マクロの自動記録で雛型作って適当に改造というお手軽さ。~ 一般企業の業務システムなんて殆ど何でも作れちゃうし!~ でもトラブルの元になることもあったりする。~ #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" 'コピペ、Copy→Cutにするとカット Range("A1:A5").Copy Range("B1").PasteSpecial'コピー先の先頭を指定してペースト End Sub --''解説'' -''セルの設定''~ フォントや塗りつぶし、文字色などの変更 *条件分岐 [#rfb39303] *繰り返し [#t1f7555b] *配列 [#z2f105a1] *ユーザー定義型の変数 [#w1e77530] *ユーザーフォーム [#u3c9f8de] *ワークシートとブックの操作 [#w17595bb] *変数の適用範囲 [#e2d2f20e] *関数の活用 [#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プログラムを自在に操る~