毎日の手入力作業を自動化。Excelマクロ、VBA、PowerAutomateで解決する#0001
毎日の繰り返し手作業を終わりにしませんか?

不定期で届くお客様からの注文書。
「届いたら、郵便で届いたのか、FAXで届いたのか、わかるようにExcel表に入力してくれる?」
わかりました!と最初は良かったけれど、だんだんと色んな仕事が増えてきて、いつの間にか、「この手入力作業。面倒なんですよね。。。」なんて、ケースが多々あります。
そんな、面倒な繰り返し手作業を無くすため、Excelのマクロの記録とVBAを使います。
こちらの記事では、自動化の第一歩目のExcelマクロの記録、さらに少しレベルアップして、コピペで出来るプログラミングコード例、VBAを使って簡単に解説をします。ボタン一つで面倒になっていた手入力作業を自動化できます!
Excelのマクロ記録とVBAとは?(自動化する前に)

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

「プログラミングは出来ないけど…」と思う方でも、マクロの記録なら簡単にできます。
- Excelメニューの[開発]をクリック。表示されていない方は、こちらをクリック!!
- [マクロの記録]ボタンをクリック。
- マクロ名を分かりやすい名前をつけます。
- 実行をクリックします。
- B2セルからB6セルまで順番にデータを手入力します。
- B1:郵送、B2:FAX、B3:FAX、B4:郵送、B5:FAX
- [記録終了]をクリック。
これだけでマクロが完成!次に、記録したマクロを[マクロ]ボタンから選択して実行してみましょう。あっという間に作業が終わります。
VBAプログラミングで自動化
雛型を作ります。

項目:「A1セル:顧客ID」・「B1セル:注文書」・「E1セル:顧客ID」・「F1セル:注文書」
データ:「A2セル~A6セルを上から順に、10001・10002…10005まで入力する」
「B2セル~B6セルまでは空白でOKです」
「E2セル~E11セルまで、10001・10002…10010まで入力する」
「F2セル~F11セルまで「郵送」・「FAX」を入力する。」
雛型の完成です。
雛型入力例:
| A列:顧客ID | B列:注文書 | E列:顧客ID | F列:注文書 |
|---|---|---|---|
| 10001 | 10001 | 郵送 | |
| 10002 | 10002 | FAX | |
| 10003 | 10003 | FAX | |
| 10004 | 10004 | 郵送 | |
| 10005 | 10005 | FAX | |
| 10006 | FAX | ||
| 10007 | 郵送 | ||
| 10008 | FAX | ||
| 10009 | FAX | ||
| 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 | 商品A | 10 | 5000 |
| 2025/01/02 | 商品B | 15 | 7500 |
| 2025/01/03 | 商品A | 5 | 2500 |
| 2025/01/04 | 商品C | 20 | 10000 |
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に挑戦してみてください。
「これまでの手作業は何だったんだろう…」と思うほど、効率が上がるはずです。
ぜひ今日から、あなたの作業に取り入れてみましょう!

コメント