はじめに
普段はpythonでopenpyxlを使ったりしてますが、もうちょっとVBAを使えたら便利だなと思ったので、勉強したことをまとめます。
前回までの記事
こちらが「VBAが使えたらもう少し仕事が楽になるんじゃないかと思って勉強したことまとめ1」が前回の記事になります。
文字の結合
文字の結合は、エクセル関数とほぼ同じです。
以下はC1にA1とB1を結合したものを入れています。
Cells(1, 3).Value = Cells(1, 1).Value & Cells(1, 2).Value
以下の書き方では、strどうしは問題ありませんが、intどうしだと加算されてしまうので、注意が必要です。
Cells(1, 3).Value = Cells(1, 1).Value + Cells(1, 2).Value
'ここでは深くふれませんが、このように四則演算も簡単にできます。
また以下のようにも結合することができます。
Cells(1, 3).Value = Cells(1, 1).Value & "hello"
ForNext構文
forループも簡単に各書くことができます。
Sub test1()
Dim i
Dim j
Dim k
For i = 1 To 10
Cells(i, 1).Value = "hello"
Next i
For j = 1 To 10
Cells(j, 2).Value = "world"
Next j
For k = 1 To 10
Cells(k, 3).Value = Cells(k, 1).Value & Cells(k, 2).Value
Next k
End Sub
デバッグ>ステップイン>F8で一つずつ実行していくことができます。
またステップを入れることで、1行飛ばしで処理ができます。
Sub test1()
Dim i
Dim j
Dim k
For i = 1 To 100 Step 2
Cells(i, 1).Value = "hello"
Next i
For j = 1 To 100 Step 2
Cells(j, 2).Value = "world"
Next j
For k = 1 To 100 Step 2
Cells(k, 3).Value = Cells(k, 1).Value & Cells(k, 2).Value
Next k
End Sub
DoLoop構文
普段は使っているpythonだとwhile文でループを書いているので、doっていうのはすこし慣れないです。。。
他の言語同様、ループ構文は、「真」である間に処理を行うものなので、演算子を知っておく必要があります。
比較演算子 意味
= 等しい
<> 等しくない
より大きい
= 以上
< より小さい
<= 以下
論理演算子 意味
And 論理積
Or 論理和
Xor 排他論理和
Eqv 論理等価
Imp 論理包含
演算子 | 内容 |
---|---|
= | 等しい |
<> | 等しくない |
> | より大きい |
>= | 以上 |
< | 未満 |
<= | 以下 |
演算子 | 内容 |
---|---|
and | 論理積 |
or | 論理和 |
not | 論理否定 |
Xor | 排他論理和 |
Eqv | 論理等価 |
Imp | 論理包含 |
Notは条件を満たさないとき真 | |
Xorとは二つのうちどちらかが真の場合に真 | |
Eqvとは両方満たすもしくは両方満たさない場合に真 | |
※and or not以外はあまり使わない? |
Sub 練習1()
Dim i
i = 1
Do While i <= 10
Cells(i, 1).Value = "hello"
i = i + 1
Loop
End Sub
最終列行の取得
まず覚えておきたいもの
ctrl + ↓:xlDown
Ctrl + ↑:xlUp
を踏まえて
最終行を取得するプログラムです
Cells(Rows.Count, 1).End(xlUp).Row '後ろから数える
または
Cells(1, 1).End(xlDown).Row '前から数える
以下のようにすることでメッセージBOXでポップアップされる
Sub test1()
Dim LASTROW As Long
LASTROW = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox LASTROW & " 行目が最終行です。"
End Sub
同じ考え方で最終列を取得するプログラムです
Cells(1, 1).End(xlToRight).Column '前から数える
または
Cells(1, Columns.Count).End(xlToLeft).Column '後ろから数える
以上を踏まえるとこんなことができる。エクセルのデータがあるところ全部に「test」の文字を入力。
Sub Get_LASTROW()
Dim LASTROW As Long
Dim LASTCOLUMNS As Long
LASTROW = Cells(Rows.Count, 1).End(xlUp).Row
LASTCOLUMNS = Cells(1,Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(LASTROW, LASTCOLUMNS)).value = "test"
End Sub
長くなってきたので
また続きを記載します。