毎日の手入力作業を自動化。Excelマクロ、VBA、PowerAutomateで解決する#0001

VBA

毎日の手入力作業を自動化。Excelマクロ、VBA、PowerAutomateで解決する#0001

毎日の繰り返し手作業を終わりにしませんか?

不定期で届くお客様からの注文書。

「届いたら、郵便で届いたのか、FAXで届いたのか、わかるようにExcel表に入力してくれる?」

わかりました!と最初は良かったけれど、だんだんと色んな仕事が増えてきて、いつの間にか、「この手入力作業。面倒なんですよね。。。」なんて、ケースが多々あります。


そんな、面倒な繰り返し手作業を無くすため、Excelのマクロの記録とVBAを使います。

こちらの記事では、自動化の第一歩目のExcelマクロの記録、さらに少しレベルアップして、コピペで出来るプログラミングコード例、VBAを使って簡単に解説をします。ボタン一つで面倒になっていた手入力作業を自動化できます!


Excelのマクロ記録とVBAとは?(自動化する前に)

Excelのマクロ記録とは

マクロの記録は、Excelで手作業で行った動作をビデオカメラの録画、再生のように、見たままを記録して、それを繰り返し再現できる機能です。たとえば「データをコピーして別のシートに貼り付ける」などの手作業を自動化できます。

VBAとは

VBA(Visual Basic for Applications)は、マクロの記録では、録画した時点の再現なので、データが増えたり、変わったりした場合、正常に機能しない場合があります。その状況をカバーする機能をプログラムでカスタマイズできるツールになります。
プログラム言語の中に、SUM関数やVlookup関数、IF関数のような複雑な処理を予め組み込むことで、色んなパターンのデータ処理を柔軟に対応出来ます。条件分岐や繰り返し処理も可能になり、業務をさらに効率化できます。


マクロで記録で自動化

「プログラミングは出来ないけど…」と思う方でも、マクロの記録なら簡単にできます。

  1. Excelメニューの[開発]をクリック。表示されていない方は、こちらをクリック!!
  2. [マクロの記録]ボタンをクリック。
  3. マクロ名を分かりやすい名前をつけます。
  4. 実行をクリックします。
  5. B2セルからB6セルまで順番にデータを手入力します。
  6. B1:郵送、B2:FAX、B3:FAX、B4:郵送、B5:FAX
  7. [記録終了]をクリック。

これだけでマクロが完成!次に、記録したマクロを[マクロ]ボタンから選択して実行してみましょう。あっという間に作業が終わります。


VBAプログラミングで自動化

雛型を作ります。

項目:「A1セル:顧客ID」・「B1セル:注文書」・「E1セル:顧客ID」・「F1セル:注文書」

データ:「A2セル~A6セルを上から順に、10001・10002…10005まで入力する」

「B2セル~B6セルまでは空白でOKです」

「E2セル~E11セルまで、10001・10002…10010まで入力する」

「F2セル~F11セルまで「郵送」・「FAX」を入力する。」

雛型の完成です。

雛型入力例:

A列:顧客IDB列:注文書E列:顧客IDF列:注文書
1000110001郵送
1000210002FAX
1000310003FAX
1000410004郵送
1000510005FAX
10006FAX
10007郵送
10008FAX
10009FAX
10010郵送

VBAプログラミングコードを作成していきます。

Excelメニューの「開発タブ」→「Visual Basic」をクリックします。

現在使用中のシートが選択されているのを確認し、メニューの「挿入」→「標準モジュール」をクリック。表示された画面に以下のプログラミングコードを入力します。※表示画面が白い、黒い、文字色が違うなど、レイアウトが違う場合があります。

以下のVBAプログラミングコードをコピペでもOKです。

Sub 注文書処理()
Range("B2").Value = "郵送"
Range("B3").Value = "FAX"
Range("B4").Value = "FAX"
Range("B5").Value = "郵送"
Range("B6").Value = "FAX"
End Sub

×閉じで、ウィンドウを閉じます。

完成です。

では、実際にどんな処理になるかを確認していきます。

Excelメニューの「開発」→「マクロ」→「注文処理」→「実行」をクリックします。

結果:B2セルからB6のセルまで郵送・FAXの文言が入力されます。

仕組みの解説

Sub 注文書処理() ←実行マクロ名を「注文書処理」として、処理を開始というイメージです。新しくVBAマクロを作る時は、Subの後の文字を書きかえればOKという話になります。

Range(“B2”).Value = “郵送” ←「B2セル」に「入力」します。「郵送」と。というようなイメージです。決まった1つのセルに、何か文言を転記させたいという時に使います。


Range(“B3”).Value = “FAX” ←上記同様です。B3セルにFAXという文言を入力して。
Range(“B4”).Value = “FAX” ←上記同様です。B4セルにFAXという文言を入力して。
Range(“B5”).Value = “郵送” ←上記同様です。B5セルに郵送という文言を入力して。
Range(“B6”).Value = “FAX” ←上記同様です。B6セルにFAXという文言を入力して。
End Sub ←マクロを終了します。

マクロの開始宣言と終了宣言は1セットと覚えると良いでしょう。

必ず、Sub 注文書処理() と End Sub 開始と終了を作成したあと、何をさせたいか。処理動作。Range(“●●”).Value = “●●”を入力していくイメージです。

よくある応用例

~システムから、今日分の注文データをダウンロード出来たんだけど、顧客ID(A列)で、肝心な注文書(B列)、郵送かFAXが入ってなくて、別表のデータから転記してくれる?今後は、顧客ID(A列)が変わったり、追加した時に、別表から注文書が自動的に入ると良いんだけど。~

別表は、顧客IDがE列、注文書はF列になってるから。よろしくね。みたいなありがちケースを解決します。

Sub CheckValue()    Dim CellValue As Integer
    CellValue = Range("B1").Value

    If CellValue > 100 Then
        Range("B1").Interior.Color = vbGreen
    Else
        Range("B1").Interior.Color = vbRed
    End If
End Sub

こんな作業に役立ちます

定期レポートの自動化

  • 売上データを集計する。
  • デスクトップに保存する

集計データのイメージ

日付商品名売上個数売上金額
2025/01/01商品A105000
2025/01/02商品B157500
2025/01/03商品A52500
2025/01/04商品C2010000
Sub AutomateReport()
    Dim ws As Worksheet
    Dim summaryRange As Range
    Dim filePath As String

    ' 集計するデータシートを指定
    Set ws = ThisWorkbook.Sheets("売上データ")

    ' 集計データの範囲を設定(例: A1:D5)
    Set summaryRange = ws.Range("A1:D5")

    ' デスクトップのパスを取得
    filePath = Environ("USERPROFILE") & "\Desktop\売上データ集計.xlsx"

    ' 集計結果を新しいブックにコピーして保存
    summaryRange.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False

    ' 保存
    ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=xlOpenXMLWorkbook
    ActiveWorkbook.Close

    MsgBox "売上データの集計と保存が完了しました!"
End Sub

データの整理

  • 商品Aのデータを自動で抽出する。
  • 新しいシートにコピーする。
Sub FilterAndOrganizeData()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRow As Long

    ' データ元のシートを指定
    Set wsSource = ThisWorkbook.Sheets("売上データ")

    ' データの最終行を取得
    lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row

    ' 抽出用の新しいシートを作成
    Set wsTarget = ThisWorkbook.Sheets.Add
    wsTarget.Name = "商品Aのデータ"

    ' ヘッダーをコピー
    wsSource.Rows(1).Copy Destination:=wsTarget.Rows(1)

    ' 商品Aのデータをフィルタリングしてコピー
    With wsSource
        .Range("A1:D" & lastRow).AutoFilter Field:=2, Criteria1:="商品A"
        .Range("A1:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
            Destination:=wsTarget.Rows(2)
        .AutoFilterMode = False
    End With

    MsgBox "商品Aのデータ整理が完了しました!"
End Sub

まとめ 最初の一歩を踏み出そう

最初は簡単な記録から始めて、少しずつVBAに挑戦してみてください。
「これまでの手作業は何だったんだろう…」と思うほど、効率が上がるはずです。
ぜひ今日から、あなたの作業に取り入れてみましょう!

コメント

タイトルとURLをコピーしました