よく使うものを備忘録として
Dim flag As Boolean
Dim num As Integer
Dim row As Long
Dim value As Single
Dim value As Double
Dim today As Date
Dim str as String
MsgBox? "Hello world"
MsgBox? 変数
変数の宣言を強制する。
モジュールの先頭に書いて、しっかり宣言しておいた方がいい。
Range("A1") = Cells(1,1) = Cells(1,"A")
Range("B1") = Cells(1,2) = Cells(1,"B")
Range("A1:C5").Select = Range(Cells(1, 1), Cells(5, 3))
=Range(Cells(1, "A"), Cells(5, "C"))
Range("A1,B5,D6") = Union(Cells(1, 1), Cells(5, 2), Cells(6, 4))
や
Range("A1:C3,B5:D7") = Union(Range(Cells(1, 1), Cells(3, 3)), Range(Cells(5, 2),Cells(7, 4)))
Range("A1" & ":" & 変数)
変数はアドレス
Range("A2:B" & 変数行番号)
変数は行番号など数
cells(m,n) m:行 n:列
Rows("1:1")
Columns("A:A")
Range("A1").CurrentRegion?.End(xlDown).Row
上記のは、連続したデータの一番下の行数を取得するが、間に空白などがある場合はそこまでの行数を取得するので、空白がある場合はシートの一番下の行数が取得できていないことがある。そういったとき用に
Cells(ActiveSheet?.Rows.Count, 1).End(xlUp).Row
Worksheets("Sheet1").Name
()はインデックス番号でもokなので、ループ中の変数と組み合わせてよく使う
Left 関数、Right 関数、Mid 関数など
書式:Left(string, length):文字列の左端から指定した文字数分の文字列
書式:Right(string, length):文字列の右端から指定した文字数分の文字列
書式:Mid(string, start[, length]):文字列の左端から指定した文字数分の文字列を返します
EX)シート名をセル内の情報としておいておく用に作ったもの
'// ワークシートの名前を抽出して、セルに入力 Sub sheetname抽出() '//変数定義はここでは略 For intLoop = 1 To Worksheets.Count '// 画面更新の停止 Application.ScreenUpdating = False Worksheets(intLoop).Select '//アクティブシートの左下の行番号取得 Rows = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row '//シートの名前取得 MyDate = Worksheets(intLoop).Name '//シートの日付、人、部位の入力 Range("Q2:Q" & rows) = Left(MyDate, 8) Range("R2:R" & rows) = Mid(MyDate, 10, 2) Range("S2:S" & rows) = Mid(MyDate, 12, 2) Next intLoop End Sub
ex)
Sub MA()
A% = 10
B% =5
SA A,B
End Sub
Sub SA(X%, Y%)
Z = X + Y
MsgBox? Z
End Sub
Aに10、Bに5を代入して、プロシージャSAに引数としてA,Bを渡す プロシージャMAから変数X,Yに引数である変数A,Bを受け取る ZにX+Yを加算結果を代入 MsgBox?関数を用いてZを表示(15)
Application.ScreenUpdating? = False
Sub MergeSheets?()
Dim intLoop As Integer '// 画面更新の停止 Application.ScreenUpdating = False '// 先頭にワークシートを1枚追加 Worksheets.Add before:=Worksheets(1), Count:=1 For intLoop = 2 To Worksheets.Count '// 元データを選択してコピー Worksheets(intLoop).Select Range("A1").CurrentRegion.Select If intLoop > 2 Then Selection.Resize(Selection.rows.Count - 1).Offset(1).Select End If Selection.Copy '// 先頭のワークシートに貼り付け Worksheets(1).Select If intLoop = 2 Then Range("A1").Select Else Cells(ActiveSheet.rows.Count, 1).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Next intLoop '// コピーモードを解除して全シートのA1セルを選択 Application.CutCopyMode = False Worksheets.Select Range("A1").Select Worksheets(1).Select '// 画面更新停止の解除 Application.ScreenUpdating = True '// 完了メッセージ MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。"
End Sub
エクセル関数を用いて
x = Application.Round(5.13 , 0)
x=5
x = Application.Round(5.13 , 1)
x=5.1
x = Application.Round(4.13 , -1)
x=10
xは数値
0