VBAのかんたんなメモ書き

■リンク
Excel VBA 入門講座
Excelでお仕事!「VBA応用」メニュー
VBA - アプリケーションとしてのVBA
Excel(エクセル)VBA入門:目次
めも
■変数
データ型 Dim 端末 As String Dim 変数名 As データ型
配列 Dim 端末() As String
データ型 名称 消費メモリ 格納できる範囲
Integer 整数型 2バイト -32,768 〜 32,767
Long 長整数型 4バイト -2,147,483,648 〜 2,147,483,647
Single 単精度浮動小数点数型 4バイト -3.402823E38 〜 -1.401298E-45(負の値)
1.401298E-45 〜 3.402823E38(正の値)
Double 倍精度浮動小数点数型 8バイト -1.79769313486232E308 〜 -4.94065645841247E-324(負の値)
4.94065645841247E-324 〜 1.79769313486232E308(正の値)
Currency 通貨型 8 バイト -922,337,203,685,477.5808 〜922,337,203,685,477.5807
 
■シート
シート追加する。 Sheets.Add 新規追加と同時にアクティブ
シートコピー追加する。 Call Worksheets("トップ").Copy(Before:=Sheets(1)) 左側にコピーしたシートを追加
指定したシートを表示(アクティブ)する。 Worksheets("トップ").Activate 「トップ」というシートをアクティブ
シートをコピーする。 Worksheets("トップ").Range("C6:E9").Copy
シートを貼り付けをする。 Worksheets("トップ (2)").Range("C6:E9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False
シート削除 Sheets("トップ").Delete 「トップ」というシートを削除
 
■値の取得
セル内の文字数を取得する。 Len("ABC") ABCは3文字なので、「3」という値になります。
指定したシートの、最終列を取得する。 Worksheets("トップ").UsedRange.Columns.Count
指定したシートの、最終行を取得する。 Worksheets("トップ").UsedRange.Rows.Count
 
■文字
大文字を小文字に変換する。 LCase("ABCD") 「ABCD」が「abcd」になります。
小文字を大文字に変換する。 UCase("abcd") 「abcd」が「ABCD」になります。
 
■色の変更
文字の色を変える。 Worksheets("トップ").Range("A1").Font.ColorIndex = 5 「Font.ColorIndex =5」と指定した場合、文字は青色になります。
セルの色を変える。 Worksheets("トップ").Range("A1").Interior.ColorIndex = 5
インデックスカラー番号
1   9 17   25   33   41   49
2 10 18 26 34 42 50
3 11 19 27 35 43 51
4 12 20 28 36 44 52
5 13 21 29 37 45 53
6 14 22 30 38 46 54
7 15 23 31 39 47 55
8 16 24 32 40 48 56
 
■文字の検索
「ABCD」という文字があるY列を取得する。 Worksheets("トップ").Cells.Find("ABCD").Row
「ABCD」という文字があるX列を取得する。 Worksheets("トップ").Cells.Find("ABCD").Column
 
■セル内の文字を取得する。
(1)セル内の文字を取得する。 Worksheets("トップ").Cells(1, 1) 「トップ」シートのセルA1を取得されます。
(2)セル内の文字を取得する。 Worksheets("トップ").Range("A1") 「トップ」シートのセルA1を取得されます。
(1)セルを範囲して取得する。 Worksheets("トップ").Range("A1:5C") 「1A」から「5C」を取得されます。
(2)セルを範囲して取得する。 Range(Cells(1, 1), Cells(5, 3)).Select 「1A」から「5C」を取得されます。
(3)セルを範囲して取得する。 Range(Cells(1, "A"), Cells(5, "C")).Select 「1A」から「5C」を取得されます。
セル内文字を区切って取得する。 mystr = Split(Worksheets("トップ").Cells(3, 1), " ")

Worksheets("トップ").Cells(1, 1) = mystr(0)
Worksheets("トップ").Cells(1, 2) = mystr(1)
 
■書式設定
ユーザー定義 Worksheets("トップ").Range("G:G").NumberFormatLocal = "yyyy/mm/dd hh:mm"
■フィルタ使用する。
値に一致 Worksheets("結果").Range("E2").AutoFilter field:=5, Criteria1:="【運転】*"
〜から始まる値 Worksheets("結果").Range("E2").AutoFilter field:=5, Criteria1:="【運転】" 末尾に*を付ける。例 「【運転】*」
昇順 Worksheets("結果").Range("E2").Sort key1:=Worksheets("トップ").Range("L2"), order1:=xlAscending, Header:=xlYes L列を昇順
オートフィルタを解除 Worksheets("トップ").Range("E2").AutoFilter
■保存
テキスト保存 myText = ThisWorkbook.Path & "\config.txt" 'ファイル名を指定

If Dir(myText) <> "" Then 'ファイル名の重複確認
MsgBox "保存するファイル名が重複しています。": End
Else
io = FreeFile()

Open myText For Append As io
Print #io, Sheets("トップ").Range("A100")
Close io
End If
■セルをクリック時の動作
1回クリックすると「○」
2回クリックすると「×」
3回クリックすると空白
になる。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True

' 動作させるセルのアドレス
Const ADDR As String = "D8:F21,H8:J21,D25:F47,H25:J47"

If Union(Target, Range(ADDR)).Address(0, 0) = ADDR Then
Select Case Target
Case ""
'クリックした右側セルに文字が存在しない場合動作しない(Target.Row=クリックした行、Target.Column=クリックした列)
If Worksheets("トップ").Cells(Target.Row, Target.Column - 1) = "" Then
Else
Target.Value = "○"
End If
Case "○"
Target.Value = "×"
Case "×"
Target.Value = ""
End Select
End If

End Sub
■その他
数字(秒)を時分秒(hh:mm:ss)に変換する。 Dim h As Integer, m As Integer, s As Integer
dd = Worksheets("Sheet1").Cells(3, 2)
h = Int(dd / 3600) '時間
dd = dd - h * 3600
m = Int(dd / 60) '分
dd = dd - m * 60
s = Int(dd) '秒
dd = Int((dd - s) * 100) 'ミリ秒
SWTime = Format(h, "00:") & Format(m, "00:") & Format(s, "00.")
Cells(4, 2).Value = SWTime
数字を半分にする。 Range("A1") = Int(Range("A1") / 2)