1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-16

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

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

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

'別ファイルのシートをコピー
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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?