マクロの自動記録で雛型作って適当に改造というお手軽さ。~
一般企業の業務システムなんて殆ど何でも作れちゃうし!~
でもトラブルの元になることもあったりする。~

#contents
*はじめに [#ue758f7e]
VBAはMicrosoft Officeに搭載されている統合開発環境Visual Basic Editor(VBE)上で開発する。~
コードはMicrosoft Excel 2003と2007で動かしているが2003以前でも2007以降でもたぶん動く。~
バージョン間の互換性は高い。~
*HelloWorld [#e42bc4f1]
-''下準備''
--''2003''~
ツール→マクロ→セキュリティ→中もしくは低をクリック
--''2007''(2010も2013も同じ)~
多少面倒くさい。今後のために開発タブを表示させその後設定を変更する。~
左上のMicrosoft Officeボタン→Excelのオプション→基本設定→Excelの使用に関する基本オプション→~
開発タブをリボンに表示する→マクロの設定→
警告を表示しすべてのマクロを無効にする又はすべてのマクロを有効にするをクリック
-''VBEの起動・プログラムの実行''
--''2003''~
ツール→マクロ→Visual Basic Editor
--''2007''~
開発タブ→Visual Basic~
あとは以下をコピペして実行→Sub/ユーザーフォームの実行→HelloWorldを選択して実行
 Sub HelloWorld()
 'これはコメント、アポストロフィーのあとに入力する
 'メモみたいなもん
 '実行結果はA1セルにHelloWorldと表示される
 Range("A1").Value = "HelloWorld"
 End Sub
-''解説''~
Sub HelloWorld()からEnd Subまでがプログラムを構成する最小単位であるプロシージャである。~
Sub HelloWorld()はプロシージャ名となる。HelloWorldの部分を書き換えれば好きな名前に出来る。~
次に何(オブジェクト)をどうするのかを命令(メソッド)したり設定(プロパティ)を変更したりする。
 オブジェクト名.メソッド名
 オブジェクト名.プロパティ名 = 値
Range("A1").Value はRange(セル)にValue(値の代入の設定を行うプロパティ)をするという意味である。~
Valueは他にもセル内の値を参照するときにも使う。= は値を代入するときに使う記号である。~
""内に代入したい値を入力する。ただし数値であれば""は不要である。= 1 + 2 のようにすれば計算結果を代入できる。~
""を使うと(= "1 + 2")計算結果ではなく1 + 2という文字列が代入される。
また= "1" + "2"のようにすると12という文字列が代入される。
-プロシージャ名のルール
*変数の利用 [#kfb3527e]
-''変数とは''~
利用したいデータ(文字列や数値)を一時的に取り置くための箱のようなもの
パソコンのメモリに一定のスペースを確保しそこにデータを記憶させる。~
-''プログラム''
 Sub 変数()
 'あらかじめA1セルとB1セルに入力されている整数を掛けて計算結果をC1セルに表示する
 Dim i As Integer
 Dim j As Integer
 i = Range("A1").Value
 j = Range("B1").Value
 Range("C1").Value = i * j
 End Sub
-''解説''~
まずは変数名と変数で何のデータを扱うのか(変数の型)を定める。これを変数の宣言という。~
VBAの場合はDim 変数名 As 変数の型となる。Integerは-32768から32767までの整数を扱うための型である。
 Dim i As Integer
 Dim j As Integer
次に用意した変数に値を代入する。今回はセルを参照してそこに入力されている値を代入する。
 i = Range("A1").Value
 j = Range("B1").Value
C1セルに計算結果を代入する。
 Range("C1").Value = i * j
-''VBAの特殊仕様''~
これは他言語ではよく見られる仕様であるが…
 int i,j,k; 
VBAではこのようにするとk以外はVariantになってしまう。
 Dim i, j, k As Integer
正しくは
 Dim i As Integer, j As Integer, k As Integer
他にもVBA(VB)は独特の仕様があるから気を付けよう。
-''変数名のルール''
-''変数の型一覧''
|型|扱えるデータ|メモ|
|Integer|||
|long|||
|Songle|||
|Double|||
|String|||
|Byte|||
|Boolean|||
|Currency|||
|Date|||
|Object|||
|Variant|||
*計算 [#w57ac774]
 Sub 計算()
 Dim i As Single
 Dim j As Single
   i = 3
   j = 2
   '加
   Range("D1").Value = i + j
   '減
   Range("E1").Value = i - j
   '乗
   Range("F1").Value = i * j
   '除
   Range("G1").Value = i / j
   '商
   Range("H1").Value = i \ j
   'あまり
   Range("I1").Value = i Mod j
   'べき乗
   Range("J1").Value = i ^ j
   '文字列結合演算子
   Range("k1").Value = i & j
 End Sub
-''解説''~
これらの記号(+,-,*,/,\,Mod,^)は算術演算子と呼ばれるもので各種計算を行うためのものである。~
文字列結合演算子は複数の文字列をひとつにまとめるためのものである。
*セルの操作 [#h7f52bd5]
-''相対参照''
--''相対参照とは''~
現在、選択されているセルから相対的に位置を指定する。
式の入ったセルの右下を引っ張ってコピーしたときに参照するセルが変わるアレ。
--''プログラム''
 Sub 相対参照()
 'セルG7を選択する
 Range("G7").Select
 'ActiveCellは現在選択されているセルを参照する。
 'Offsetはセルを移動させる。左の数値は上下の指定、右の数値は左右の指定。
 '下に1つ、右に3つセルを移動させる。移動後のセルはJ8。
 ActiveCell.Offset(1, 3).Select
 End Sub
--''解説''~
現在のセルの位置(ActiveCell)を基準とした相対位置をOffsetメソッドで指定する。
|-2,-2|-2,-1|-2,0|-2,1|-2,2|
|-1,-2|-1,-1|-1,0|-1,1|-1,2|
|0,-2|0,-1|基準|0,1|0,2|
|1,-2|1,-1|1,0|1,1|1,2|
|2,-2|2,-1|2,0|2,1|2,2|
-''絶対参照''~
--''絶対参照とは''~
直接、セルを指定する。セルの前に$をつけるとコピーしても参照するセルが変わらないアレ。~
 =$C$1+$D$1
--''プログラム''
---単一のセルを指定
 Sub 絶対参照01()
 Range("A1").Select
 End Sub
---複数の独立したセルを指定
 Sub 絶対参照02()
 Range("B1,B3,B5,B7,B9").Select
 End Sub
---連続したセルを指定
 Sub 絶対参照03()
 Range("C1:D5").Select
 End Sub
---おまけ
 Sub 絶対参照04()
 Range("A1,C1:D5").Select
 End Sub
-''Cellsによる指定''~
行番号と列番号を数字で指定する。列は1がA列、2がB列、3がC列…のようになる。~
行や列を変数で指定して変化させたい場合、Rangeではなくこちらを使う。~
 Cells(行番号,列番号).Select
-''カット・コピー・ペースト''
--''プログラム''
 Sub コピペ()
    '文字列の代入
    Range("A1").Value = "( ^ω^)"
    Range("A2").Value = "\(^o^)/"
    Range("A3").Value = "(´∀`)"
    Range("A4").Value = "キタ━(゚∀゚)━!"
    Range("A5").Value = "vipper"
    
    'コピペ
    Range("A1:A5").Copy   'Copy→Cutにするとカット
    Range("B1").PasteSpecial'コピー先の先頭を指定してペースト
 End Sub
--''解説''~
CopyメソッドとCutメソッドは
 Range("B1,B3,B5,B7,B9").Copy
や~
 Range("A1,C1:D5").Copy
のようなセルの指定はできない。
-''セルの設定''~
フォントや塗りつぶし、文字色などの変更~
--''プログラム''~
 Sub 設定()
    'フォント
    Range("A1:A10").Font.Name = "MS明朝"
    '太字
    Range("B1:B10").Font.Bold = True
    '斜体
    Range("C1:C10").Font.Italic = True
    '下線
    Range("D1:D10").Font.Underline = True
 End Sub
--''解説''~
Nameプロパティによるフォントの指定。""でフォント名を囲む。
 Range("A1:A10").Font.Name = "MS明朝"
Boldプロパティによる太字の設定。Falseは太字の解除を行う。
 Range("B1:B10").Font.Bold = True
Italicプロパティによる斜体の設定。Falseは斜体の解除を行う。
 Range("C1:C10").Font.Italic = True
Underlineプロパティによる下線の設定。Falseは下線の解除を行う。
 Range("D1:D10").Font.Underline = True
--''その他のプロパティ''~
---ColorIndex~
セルを塗りつぶしや文字色の変更。数字で色を指定する。下記は緑。その他の色は[[こちらのサイト:http://www.ne.jp/asahi/mabu-messages/greetings-2-you/colorIndexnum.htm]]を参照
 'セルの塗りつぶし
 Range("A1").Interior.ColorIndex = 10
 '文字色の変更
 Range("A1").Font.ColorIndex = 10
---Color~
セルを塗りつぶしや文字色の変更。RGBで色を指定する。
 'セルを塗りつぶす
 Range("A1").Interior.Color = RGB(255, 255, 255)
 '文字色の変更
 Range("A1").Font.Color = RGB(255, 255, 0)
---Size~
文字サイズの変更。
 Range("A1").Font.Size = 12
*同一のオブジェクトに対して複数のプロパティを設定する [#c434427f]
そのような場面ではWith文を使うと便利である。次のプログラムをWith文を使い書き換える
  Sub 設定()
    'セルの指定
    Range("A1:A10").Select
    'フォント
    'Selectionは相対参照の項で使ったActiveCellと同じで現在選択されているセルを参照する。
    'ただし複数のセルを選択するときActiveCellは空白のセルしか選択しないので注意すること。
    Selection.Font.Name = "ms明朝"
    'ただし複数セルを選択しているときActiveCellは先頭のセルしか参照しないので注意すること。
    '今回の場合、ActiveCellを使うとA1セルしか以下の設定が反映されない。
    Selection.Font.Name = "MS明朝"
    '太字
    Selection.Font.Bold = True
    '斜体
    Selection.Font.Italic = True
    '下線
    Selection.Font.Underline = True
  End Sub
with文を使うと以下のようになる。With~End With間のすべてのSelectionを省略することができる。
 Sub 設定()
  'セルの指定
  Range("A1:A10").Select
  With Selection
    'フォント
    .Font.Name = "MS明朝"
    '太字
    .Font.Bold = True
    '斜体
    .Font.Italic = True
    '下線
    .Font.Underline = True
  End With
 End Sub
*条件分岐 [#rfb39303]
条件(セルの中の値や計算の結果など)によって処理を分けたいときにはIf文やCase文を使う。~
*繰り返し [#t1f7555b]
*配列 [#z2f105a1]
*ユーザー定義型の変数 [#w1e77530]
*ユーザーフォーム [#u3c9f8de]
*ワークシートとブックの操作 [#w17595bb]
*変数の適用範囲 [#e2d2f20e]
*引数 [#wf30308d]
*関数の活用 [#od08c566]
*ユーザー定義関数 [#qa414172]
*グラフ [#s128df53]
*ピボットテーブル [#h539fec6]
*デバッグ [#jc8d8c64]
*エラー処理 [#yfeaf1e4]
*Win32APIの呼び出し [#q53b9111]
*参考 [#y7791cc5]
-''入門''~
--VBAエキスパート公式テキスト Excel VBA スタンダード~
文法に関しては一番詳しいのではないか。ベーシックは購入の必要なし。~
-''ユーザーフォーム''~
--アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール~
--ひと目でわかるMicrosoft Excel VBAコントロール&フォーム活用術~
-''web系''~
--Excel VBAでIEを思いのままに操作できるプログラミング術~
--新・Excel VBAで極めるシステムトレード 最強パワーアップ編~
-''ゲーム''~
--Excel VBA アクションゲーム作成入門~
-''3Dグラフィックス''~
--Excelで学ぶ コンピュータグラフィックス技術入門~
-''シミュレーション・数値計算''~
--Excelで遊ぶ手作り数学シミュレーション―グラフ機能とVBAプログラムを自在に操る~


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS