もりさんのプログラミング手帳

教えることは、二度学ぶこと

スポンサーリンク

【ExcelVBA】よくつかうフレーズのストック

ある程度勉強が進むと、お決まりのフレーズをコーディングする機会が増えてきます。
この処理はあのメソッドを使えば実現できるな、でもどうやって書くんだっけ・・・という時に、一から調べなおすのは時間がかかるので、ストックしておくと便利ですね。

※備忘目的なので、随時追加していきます。
※変数宣言は省略しています

ブック・シートの操作

ブック全体、または、シート全体に対する処理。

ブック内のシート数、処理を繰り返す

For n = 1 To Sheets.Count
    Sheets(n).  '(処理)
Next n

特定の文字列を含むシートを選択する

For n = 1 To Sheets.Count
    If Sheets(n).Name Like "*ABC*" Then
        Sheets(n).select
    End If
Next n

シートコピー(一番目のシートを後ろにコピー)

Sheets(1).Copy after:=Sheets(1)

シート名の変更

Sheets(n).Name = "ABC"

印刷設定

With ActiveSheet.PageSetup
    .CenterHeader = "&A"
    .Zoom = False
    .Orientation = xlLandscape
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With

データ加工

シート上の見た目調整などです。

データの並び替え

Range("A:E").Sort _
key1:=Range("A2"), Order1:=xlAscending, _
key2:=Range("B2"), order2:=xlAscending, _
Header:=xlYes

列幅自動調整

Columns("A:E").AutoFit

列削除

Columns("A:E").Delete

列をグループ化してたたむ(非表示にする)

Columns("J").Group
Columns("J").Hidden = True

アウトラインレベル1にする場合(すべてたたむ)

ActiveSheet.Outline.ShowLevels RowLevels:=1

アウトラインレベル2

ActiveSheet.Outline.ShowLevels RowLevels:=2

列幅の調整

Columns("B").ColumnWidth = 30

行の高さの調整

Rows(r).RowHeight = 30 '特定の行のみ設定
Rows(1 & ":" & maxrow).RowHeight = 301行目から最終行まで一括設定

表の最終行の取得

①Excelの最終行から上方向に取得する場合

maxrow1 = Cells(Rows.Count, 1).End(xlUp).Row

②指定のセルから下方向に取得する場合 ※途中で空白セル(空行)があった場合、空行の手前までの行が取得される。

maxrow2 = Cells(1, 1).End(xlDown).Row

表の最右列の取得

maxcol = Cells(1, Columns.Count).End(xlToLeft).Column

セル内の文字列を左寄せ

Range("A1").HorizontalAlignment = xlLeft '文字を左寄せ

非表示行を開く(シート全体)

Rows.Hidden = False

セルの値をコピー&値貼り付け

(例:A列の値をB列に"値貼り付け")

Columns("A").Copy
Columns("B").PasteSpecial Paste:=xlPasteValues '値貼り付け
Application.CutCopyMode = False 'クリップボードを空にする

指定範囲に罫線を引く

Range(Cells(1, 1), Cells(r, c)).Borders.LineStyle = xlContinuous

書式設定

シート全体のフォントを変更する

Cells.Font.Name = "MS Pゴシック"

セルに計算式を挿入する

特定の1セルに挿入する

Cells(r, c).Formula = "=SUMIF($G:$G,40,$K:$K)"

指定の範囲に一括で挿入する(下記の場合、K列の2~100行目に設定)

Range(Cells(2, "K"), Cells(100, "K")).Formula = "=IF(G2=""40"",J2*-1,J2)"

数値を桁区切り・マイナス値は赤色表示にする

Cells(r, c).NumberFormatLocal = "#,###;[赤]-#,###"

その他

実行時間計測(秒単位)

Dim StartTime As Variant, EndTime As Variant

StartTime = Time '開始時刻
Debug.Print "開始時刻 " & StartTime

'~~~~~~処理~~~~~~

EndTime = Time '終了時刻
Debug.Print "終了時刻 " & EndTime

MsgBox "実行時間は" & _
    Minute(EndTime - StartTime) & "分" & _
    Second(EndTime - StartTime) & "秒でした。"

実行時間計測(ミリ秒単位)

'モジュール宣言位置に記述
Declare Function timeGetTime Lib "winmm.dll" () As Long

Sub 時間計測()

    Dim StartTime As Long
    StartTime = timeGetTime '開始時刻
    
    Call (プロシージャ呼び出し)

    Dim EndTime As Long
    EndTime = timeGetTime '終了時刻

    Debug.Print (EndTime - StartTime) / 1000 & "秒"

End Sub

スポンサーリンク