VBAたまによく使うもの覚え書き
変数宣言
変数宣言を必須にする
Option Explicit
変数宣言における型指定
Dim i As Integer
Option Explicit
Dim i As Integer
Asによる型指定は全ての変数に対して必要。書かない場合はVariantになる。
私見だがVBA実行時の型エラーはだいたいこれ。
定数宣言
Const days As Integer = 366
日付
本日
Dim today As Date
today = Date
指定する
Dim a As Date
a = CDate("2020/4/1")
一ヶ月後
Dim today As Date
Dim future As Date
today = Date
future = DateAdd("m", 1, Date)
Dim today As Date
today = Date
Dim a As Date
a = CDate("2020/4/1")
Dim today As Date
Dim future As Date
today = Date
future = DateAdd("m", 1, Date)
参考:DateAdd http://officetanaka.net/excel/vba/function/DateAdd.htm
ワークシートとのデータやり取り関連
単一セルから読み取り
Dim average_today As Double
average_today = Cells(row, column).Value
Dim average_today As Double
average_today = Cells(row, column).Value
シート名も指定するなら次のようにする
Dim average_today As Double
average_today = Sheets("any sheet's name").Cells(row, column).Value
単一セルへ値を設定
Dim average_today As Double
average_today = 20.0
Cells(row, column).Value = average_today
複数セル or 範囲を消去
Range(Cells(startRow, startColumn), Cells(endRow, endColumn)).ClearContents
シート名も指定するなら、ちょっと煩雑だがこんな感じ
Range(Sheets("any sheet's name").Cells(startRow, startColumn), Sheets("any sheet's name").Cells(endRow, endColumn)).ClearContents
If文
If today <= tomorrow And tomorrow < next_tomorrow Then
'do something
ElseIf today <= yesterday Or yesterday < tomorrow Then
'do something
Else
'do something
End If
If today <= tomorrow And tomorrow < next_tomorrow Then
'do something
ElseIf today <= yesterday Or yesterday < tomorrow Then
'do something
Else
'do something
End If
サブルーチン内なら必要に応じてExit Sub
で処理を抜ける
For Loop
Sub test_loop()
Dim i As Integer
For i = 1 To 5
MsgBox (i)
If i = 4 Then
Exit For
End If
Next i
MsgBox ("end of loop")
End Sub
Sub test_loop()
Dim i As Integer
For i = 1 To 5
MsgBox (i)
If i = 4 Then
Exit For
End If
Next i
MsgBox ("end of loop")
End Sub
continueを使いたい場合はGoTo文でNext直前にラベルを貼ると良い。
Functionの戻り値
Function GetYear(today As Date)
GetYear = Year(today)
End Function
Function GetYear(today As Date)
GetYear = Year(today)
End Function
returnは無い。Function名と同じ変数を返す。
配列インデックスの上限・下限
UBound(array)
LBound(array)
UBound(array)
LBound(array)
VBAコード上はindexが0オリジンだが、ワークシートからの一括読み込みだと1オリジンになる。
VBAコード上でもindexを1オリジンにする
Option Base 1
String値を返すEnumもどきを作成する
Enum Place
Yamagata
Sakata
Shinjo
Yonezawa
End Enum
Dim placeHash As Object
Sub Initialize()
Set placeHash = CreateObject("Scripting.Dictionary")
placeHash.Add Place.Yamagata, "山形"
placeHash.Add Place.Sakata, "酒田"
placeHash.Add Place.Shinjo, "新庄"
placeHash.Add Place.Yonezawa, "米沢"
End Sub
Enum Place
Yamagata
Sakata
Shinjo
Yonezawa
End Enum
Dim placeHash As Object
Sub Initialize()
Set placeHash = CreateObject("Scripting.Dictionary")
placeHash.Add Place.Yamagata, "山形"
placeHash.Add Place.Sakata, "酒田"
placeHash.Add Place.Shinjo, "新庄"
placeHash.Add Place.Yonezawa, "米沢"
End Sub
Enumは値が数値になる(一個目が0で順次インクリメント)ので、Stringの値が欲しければDictionary型を使うと良いようだ。
参考
CDate https://www.tipsfound.com/vba/05cdate
Const http://officetanaka.net/excel/vba/statement/Const.htm
Enum https://www.tipsfound.com/vba/02017
Range https://excel-ubara.com/excelvba1/EXCELVBA311.html
Author And Source
この問題について(VBAたまによく使うもの覚え書き), 我々は、より多くの情報をここで見つけました https://qiita.com/it__ssei/items/f1b7b328e6f6276cf3c7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .