VBAのよく使う内容をまとめました。
かなり初心者向けの資料になってますので
是非このページで覚えてたくさん改善してみてください!!
Excel VBA 開き方について
ショートカットでの起動
Excelを開いた状態でAlt +F11を押します。
VBAの画面が立ち上がります。
開発から起動
開発は初期設定では表示されていないのでリボンのユーザー設定から開発にチェックを入れます。
表示されるようになったらVisual Basic をクリックしてVBAの画面を起動します。
Excel上のデータを取得方法について
シートの指定
画像のような状況の時にシート名を指定の仕方は
個人的によく使う書き方だと3種類
Worksheets(“シート1”)
一番最初に使うのはこれじゃないでしょうか。最初はこの指示の仕方をしていました。
この指示方法でも問題ありませんがシート名はExcel上で変更できるのでマクロが壊れないようにしましょう。
Worksheets(1)
繰り返しさせる時はこの方法もありです。配列で一気に取得できますが
複数シート繰り返し操作するときなど良さそうです。
Sheet1
VBA上でシートに名前が定義されているのでそれで指定します。
この値はVBAのプロパティを修正しないと変わらないので
個人的には一番おススメです。
シートがうまく指定できていればmsgboxでシート名をを取得してみましょう。
画像の状態ならシート1と3回でるはずです。
Sub test()
MsgBox Worksheets(1).Name
MsgBox Worksheets(“シート1”).Name
MsgBox Sheet1.Name
End Sub
セルの値を取得
セルの値を取得するには下記の2種類をよく使用します。
Cells: Cells(2, 1).Value 1つ目が行番号、2つ目が列番号なのでA2のセルの値を取得します。
Range: Range(“A2”).Value こっちは分かりやすいですね。セルの位置そのままです。
複数セルの指定方法は?
Rangeの場合はExcelの指定と同じなので Range(“A1:B2”) このような指示方法となります。
Cellsの場合はcells単体では無理ですがRange(Cells(1,1),Cells(2,2))
このように書くとことができます。
Rangeの場合は数値は行方向だけですが
Cellsを使ったやり方だと列方向も数値なので変数にすることができます。
この場合は複数範囲なので値を変数へ格納すると配列で取得となります。
セルの指定だけだとアクティブシートになってしまうので
複数シートを参照する場合はシートの指定を前に指定します。
Range(“A1”).value・・・シートが変わると別のシートを取得してしまいます…。
Sheet1.Range(“A1”).value・・・シートが変わってもシート1を取得することができます。
繰り返し処理
繰り返し処理は大きく分けて3種類あります。
空白のセルまで繰り返しとかであればDo Until ~Loopだけでも結構頑張れます。
繰り返し処理ですがうまく設定できてないまま実行してしまうと
無限に繰り返すのでそのあたりは注意して使用してください。(特にDo UntilとDo While)
Do Until ~Loop Do While ~Loop
Do Until はこうなるまで繰り返し
Do While はこの間繰り返しの意味です。
書き方として下記の書き方をするとA1から繰り返し次の行を見ていき
A行が空白のセルまで繰り返すという意味になります。
y=1
Do Until Sheet1.Range(“A” & y).value=””
y=y+1
Loop
While の場合は下記の書き方だとA1から繰り返し次の行を見ていき
A行が空白じゃないセルの間繰り返すという意味になります。
y=1
Do While Sheet1.Range(“A” & y).value<>””
y=y+1
Loop
書き方は違いますがやってることは同じなんですよね。
不等号などの比較演算子の使い方によっては同じ処理ができるので
最初のうちはDo Untilだけでも大丈夫です。
空白になったら繰り返し終了ってよく使います。
一旦Do Untilだけで大丈夫かなって方は次のページへお進みください。
for~Next も結構シンプルなので
For ~ Next
For~Nextとは範囲を決めてここからここまで繰り返させる処理です。
たとえば10回繰り返したい場合はこのように記載します。
For i=1 to 10
Next i
10部分の値を変数にすることで繰り返し回数を変動できるようになりますね。
debug.print i
で繰り返すたびにiの変数をイミディエイトウインドウに書き出すことが出来る。
デバッグするときに結構便利なので覚えておきましょう。
イミディエイトウインドウはVBAの画面で
Ctrl + Gで表示できます!
For Each…Next
For Each…Next ステートメントは、コレクション内のオブジェクトごと、または配列内の要素ごとに、ステートメントのブロックを繰り返します。
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-for-eachnext-statements
説明が初心者にはつらいですよね。
コレクションというのは例えばExcelのシートでオブジェクトというのはシート1つずつのことです。
For each 変数 IN コレクション で指定します。
Excel内のシート分繰り返すなら下記のように記載します。
For Each Sheet In ThisWorkbook.Worksheets
Next
Debug.print Sheet.name
で繰り返した分シート名が取得できるので
うまくいってるかはわかりますね。
イミディエイトウインドウはVBAの画面で
Ctrl + Gで表示できます!
コメント