エクセル備忘録VBA編
動的配列の宣言
Dim MyArray() As String
指定したファイル(開いていること)にワークシートを追加し、名前を付ける
Workbooks("Filename.xls").Sheets.Add
Workbooks("Filename.xls").ActiveSheet.Name = "SheetName"
エクセル関数をVBAで使う 事例では、関数 count を使っている
d = WorksheetFunction.Count(Range("E:E"))
指定したセルの読み上げ バージョン2002以降。
Range("Q25").Speak
自己パス名を取得(その1)最後に\付き
MyPath = Left(ActiveWorkbook.FullName, _
Len(ActiveWorkbook.FullName) - Len(ActiveWorkbook.Name))
自己パス名を取得(その2)最後に\なし
ActiveWorkbook.Path
アクティブなファイル名を取得
myfile = ActiveWorkbook.Name
アクティブなファイル名を取得(フルパス付き)
myfile = ActiveWorkbook.FullName
マクロを実行しているファイル名を取得
myfile = ThisWorkbook.Name
ワークシートの数
Worksheets.Count
シート名の表示
MsgBox Worksheets(SheetNO).CodeName
ユーザーフォームの表示
UserForm.show
ユーザーフォームの非表示
Unload UserForm
ユーザーフォーム上のチェックボックスのチェックを調べる
If UserForm1.CheckBox1.Value = True Then
MsgBox “チェックされています。”
End If
ワークシートウインドウの最小化
ActiveWindow.WindowState = xlMinimized
ワークシートウインドウの最大化
ActiveWindow.WindowState = xlMaximized
選択範囲のセルの書式を文字列にする
Columns("F:L").Select
Selection.NumberFormatLocal = "@"
エクセルファイルを開く
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & エクセルファイル名
ファイルオープンのダイアログボックスを開き、エクセルファイルを開きます。
Application.Dialogs(xlDialogOpen).Show
ファイルオープンのダイアログボックスでファイル名を取得
(Filename:フルパス付き Filename2:ファイル名のみ)
Dim Filename As Variant
Dim Filename2 As Variant
Filename = Application.GetOpenFilename _
("csvファイル (*.csv), *.csv", , "ファイルの選択", , False) ‘True とすると複数選択可能
Filename2 = Dir(Filename)
アクティブなエクセルファイルのクローズ
ActiveWorkbook.Close
エクセルファイルのクローズ
Workbooks(エクセルファイル名).Close
エクセルファイルを保存せずにクローズ
Workbooks(ActiveWorkbook.Name).Close savechanges:=False
エクセルファイルを保存してクローズ
Workbooks(ActiveWorkbook.Name).Close savechanges:=True
開いているエクセルファイルに名前を付けて保存する
Workbooks(開いているファイル名).SaveAs (新しいファイル名)
ファイルの削除
Kill myXlsFile
テキストファイル・バイナリファイルの処理(シーケンシャル入力モード、バイト単位での入力)。
myFNo = FreeFile '使用可能なファイル番号を取得
Open myCsvFile For Input As #myFNo ' ファイルをシーケンシャル入力モードで開きます。
MaxSize = LOF(myFNo) ' ファイルのサイズをバイト数で取得します。
' Fort〜Nextループを使って、
For NextChar = 1 To MaxSize - 1 Step 1 ’すべての文字を前から読み込みます。
Seek #myFNo, NextChar ' 位置を設定します。
MyChar = Input(1, #myFNo) ' 文字を読み込みます。
‘ここで処理をします。
Next NextChar
Close #myFNo ' csvファイルを閉じます。
テキストファイルの処理(シーケンシャル入力モード、行単位での入力)。
myFNo = FreeFile '使用可能なファイル番号を取得
Open myTextFile For Input As #myFNo ' ファイルをシーケンシャル入力モードで開きます。
Do While Not EOF(myFNo) ' ファイルの終端までループを繰り返します。
Line Input #myFNo, myBuf ' 行を変数に読み込みます。
‘ここで処理をします。
Loop
Close #myFNo 'ファイルを閉じます。
シート間のコピーペースト(その1)
Worksheets("Sheet3").Rows("1:1").Copy
Worksheets("Sheet2").Paste (Rows("1:1"))
シート間のコピーペースト(その2)
Worksheets(S_sheet).Rows(row_no).Copy (Worksheets(D_sheet).Rows(D_row_no))
セル幅を指定
Columns("D:D").ColumnWidth = 6.5
セルの高さを指定
Rows("9:9").RowHeight = 40.5
列の非表示
Columns("B:B").EntireColumn.Hidden = True
列の表示
Columns("B:B").EntireColumn.Hidden = False
確認のメッセージを出さずにSheet2を削除する
Application.DisplayAlerts = False
Worksheets("Sheet2").Delete
Application.DisplayAlerts = True
Yes (ms=6) No (ms=7) の確認ダイアログ
ms = MsgBox("メッセージ。続けますか?", vbYesNo)
メッセージダイアログボックス内で改行する
MsgBox("改行して二行で表示します。" & vbCr & _
"これが二行目です。")
正の整数のみを入力する
Do
MyValue = InputBox("正の整数のみを入力します")
Loop Until MyValue > 0 And IsNumeric(MyValue) = True
アクティブなシートを保護する
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
アクティブなシートの保護を解除する
ActiveSheet.Unprotect
円を描く
Set WShape = Worksheets("Sheet1").Shapes
Set Obj1 = WShape.AddShape(msoShapeOval, h_oval, v_oval, 18, 18) ‘ 18, 19 とすれば楕円形
With Obj1
.Fill.Visible = msoFalse '塗りつぶし無し
.Line.Weight = xlThin '線を細線に、xlThinの代わりに1, 2, 3, 4 でもよい
.Name = "maru1"
End With
円を削除
With Worksheets("Sheet1")
.Shapes("maru1").Delete
End With
Range()の使い方 この例では、セルA1からA10までに空白文字列を入れている
For T = 1 To 10
Range("A" & T) = “”
Next T
範囲を指定して印刷
ActiveSheet.PageSetup.PrintArea = "$A$1:$AO$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
一時的にプリンタを切り替える
tmpprtname = ActivePrinter ‘アクティブプリンタ名を保存
Application.ActivePrinter = "プリンタ名、マクロの記録で取得すること"
‘ここで処理
Application.ActivePrinter = tmpprtname ‘保存していたプリンタ名を戻す
Withの使い方
With Workbooks(1).Worksheets(1)
.Cells(RowPos1, 3) = 1
.Cells(RowPos1, 3) = 2
.Cells(RowPos1, 3) = 3
.Cells(RowPos1, 3) = 4
End With
Setの使い方
Set WS = Worksheets(1).Worksheets(1)
WS.Cells(RowPos2, 3) = 1
WS.Cells(RowPos2, 3) = 2
WS.Cells(RowPos2, 3) = 3
WS.Cells(RowPos2, 3) = 4
Functionの使い方
Sub Main()
MsgBox Fname(10) ‘ 5と表示されます。
End Sub
Function Fname(a)
Fname = a / 2
End Function