Excel VBAのテクニックメモ

最近、仕事でちょっとしたことのためにExcel VBAで作業していました。2週間くらいでしょうか。そもそもBasicをいじるのが久しぶりという感じでしたが、何とかなりました。

参考資料執筆諸氏に感謝します。


いくつか自分なりに見つけたテクニックをメモしておきます。順番は……適当です。しいて言えば作ったプログラムの展開順。

ファイルを開いたときに何かを実行する

VBAでThisWorkbookに書き込む

Private Sub Workbook_Open()
' ファイルを開いたら直ちに行われる動作
'……以下コード。

ファイルを保存する直前に何かを実行する

VBAでThisWorkbookに書き込む

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' ファイルを開いたら直ちに行われる動作
'……以下コード。

あるプローシージャの中に場所を特定してラベルを貼り、処理によって飛び先を変える

N88 Basic言語で言うところの行番号的に用いることができる。
If〜Thenや、Goto命令でその場所にジャンプできる。Thenで飛びたいときはGotoを省略できるのもN88 Basicと同じ。

If ほげほげの条件のとき Then Label_A
'---それ以外の時の処理……

Label_A:
'……以下コード。

画面表示率を変更する

ActiveWindow.Zoom = 84 '画面拡大率%

半角英数モードにする

' ----IMEを解除し半角英数直接入力にする----
If IMEStatus = vbIMEModeOn Then
	SendKeys "{kanji}", True  '[半角/全角]キー
End If

はい・いいえをダイアログボックスで選択し、処理を分岐する

Dim HogehogeSuru As Integer
HogehogeSuru = MsgBox("ほげほげしますか?", vbYesNo)
    Select Case HogehogeSuru
        Case vbYes '「はい」の処理
        
        Case vbNo '「いいえ」の処理
        
    	Case Else '「それ以外」の処理
    
    End Select

文章中に改行があるダイアログを表示

MsgBox("この国では" & vbCrLf & "人民の" & vbCrLf & "人民による" & vbCrLf & "人民のための" & vbCrLf & "政治を実現していると" & vbCrLf & "思っていますか?" , vbYesNo)

処理しているときの画面をいちいち表示するかどうか

Application.ScreenUpdating = False '画面描画オフ
Application.ScreenUpdating = True '画面描画オン

確認ダイアログボックス表示非表示を切り替える。

Application.DisplayAlerts = False '確認メッセージ表示オフ
Application.DisplayAlerts = True '確認メッセージ表示オン

行の高さ・列の幅を引き締める

Rows(1)とは1行目になる。2行目であればRows(2)。
Columns(1)とはA列になる。B列であればColumns(2)。数字で書くので書き方に注意。

' 行の高さを引き締める
Rows(1).EntireRow.AutoFit
' 列の幅を引き締める
Columns(1).EntireColumn.AutoFit

その瞬間の日付と秒数のシート名を付ける

ActiveSheet.Name = Format(Now, "yyyy年M月d日(aaa) h時mm分ss秒")

印刷範囲をいつも同じものに設定する

たとえば、A1からG20までをA4横で設定、用紙の中央に配置するとき

    '---用紙設定A4横、余白少なめ、紙一枚に合わせる、引き伸ばしOK---
    ActiveSheet.PageSetup.PrintArea = "$A$1:$G$20"
    With ActiveSheet.PageSetup
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
    End With

データの空き行を探して、見つけ次第何かの処理を始める

Dim AkiRow As Integer
    For AkiRow = 1 To 30 '30行まで数えればOKとわかっている場合
        If Cells(AkiRow, 1).Value = "" Then Exit For
    Next AkiRow
'---以下、処理内容を書く---