VBA初心者でいろいろやってみたときのメモ


別ブックからのシートコピー

全シートコピーではなく、シートの一部分コピーを実施。

複数人の勤務表を集計するために最終はピボットテーブルで集計したかったため。
全シートコピーしてしまうと、いらないヘッダーまでついてきてしまうため。

'別ファイルのシートをコピー
Sub SheetCopy(FileName As String)
    'コピー元
    Dim WorkBase As Workbook
    'コピー先
    Dim WorkCopy As Workbook

    'コピー先のブック名をセット
    Set WorkCopy = ActiveWorkbook

    Application.DisplayAlerts = False

    'コピー元ファイルを読み取り専用で開く
    Workbooks.Open FileName:=FileName, ReadOnly:=True, UpdateLinks:=0

    '開いたコピー元をセット
    Set WorkBase = Workbooks.Open(FileName)

    'コピー元シート名の「勤務表」セルI13:O列の範囲をコピー
    Dim baseLowRow As Long
    baseLowRow = WorkBase.Worksheets("勤務表").Cells(Rows.Count, 11).End(xlUp).Row
    WorkBase.Worksheets("勤務表").Range("I13:O" & baseLowRow).Copy

    'コピー先シート名「データ」B2から貼り付け
    Dim beforeCopyLowRow As Long
    beforeCopyLowRow = WorkCopy.Worksheets("データ").Cells(Rows.Count, 2).End(xlUp).Row
    WorkCopy.Worksheets("データ").Range("B" & beforeCopyLowRow + 1).PasteSpecial xlPasteFormulasAndNumberFormats

    'コピーを解除
    Application.CutCopyMode = False

    '名前欄をコピー
    WorkBase.Worksheets("勤務表").Range("AA6:AA6").Copy

    '明細に名前を貼り付け
    Dim afterCopyLowRow As Long
    afterCopyLowRow = WorkCopy.Worksheets("データ").Cells(Rows.Count, 2).End(xlUp).Row
    WorkCopy.Worksheets("データ").Range("A" & beforeCopyLowRow + 1 & ":A" & afterCopyLowRow).PasteSpecial xlPasteFormulasAndNumberFormats

    'コピー元のファイルを閉じる
    WorkBase.Close False

    Application.DisplayAlerts = True
End Sub

不要データ削除

工数が0時間の行はピボットで集計した際に不要な列として表示されていたため、0時間の行は削除する。

'不要データ削除
Sub DeleteUnnecessaryData()
    Dim lowRow As Long
    Dim i As Long

    lowRow = Cells(Rows.Count, 2).End(xlUp).Row

    Application.ScreenUpdating = False

    'E列が空白か0であれば、削除
    For i = lowRow To 2 Step -1
        If VarType(Cells(i, 5)) = vbEmpty Or Cells(i, 5) = 0 Then
            Range(i & ":" & i).Delete
        End If
    Next i

    Application.ScreenUpdating = True
End Sub