LoginSignup
1
1

More than 5 years have passed since last update.

VBAが使えたらもう少し仕事が楽になるんじゃないかと思って勉強したことまとめ2

Last updated at Posted at 2018-10-17

はじめに

普段は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 = CellsRows.Count, 1.EndxlUp.Row
    LASTCOLUMNS = Cells(1,Columns.Count).End(xlToLeft).Column
  RangeCells1, 1, CellsLASTROW, LASTCOLUMNS).value = "test"
End Sub

長くなってきたので

また続きを記載します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1