最近一番の業務効率化は、AIエージェントではなく「たった1つのマクロ」だった話
最近、AIエージェントの話をよく聞くようになりました。
「これからはAIが自律的にタスクをこなしてくれる」
AIは日々使っていますし、
文章の整理、アイデア出し、コード作成、要約など、
かなり助けられています。
ただ、最近ふと考えました。
「最近で、業務効率が一番上がった出来事って何だったっけ?」
と。

で、振り返ってみると、答えは少し意外でした。
最新のAIエージェントを導入したことではありません。
高価なSaaSを入れたことでもありません。
大規模なDXプロジェクトでもありません。
たった1つのExcelマクロを作ったことでした。
しかも、かなり地味なマクロです。
ありがちな「複数シート確認作業」
たとえば、こんな作業はないでしょうか。

Excelを使っていると、こういうことがよく起きます。
シートAを開く。
必要な範囲をコピーする。
別の場所に貼る。
シートBを開く。
また同じ範囲をコピーする。
また貼る。
シートCを開く。
またコピーする。
作業としては単純です。でも、地味に面倒です。
しかも、この手の作業は
「1回あたり数分」なので、なかなか改善対象になりません。
だから放置されがちです。
でも、こういう作業こそ、
実は時間と集中力をじわじわ削っています。
作ったマクロは何をするものか
今回作ったマクロは、
ざっくり言うとこういうものです。

ファイル内の対象のシートを番号で選び
指定したセル範囲だけをまとめてコピーできる
っていうマクロです。
めちゃくちゃ単純でTHE初心者マクロという感じです。



便利なのは、同じ範囲を複数シートから抜き出せることです。
Sub SelectAndCopyMultipleSheetsByNumber()
Dim sheetList As String
Dim sheetNames() As String
Dim count As Integer
Dim i As Integer
Dim userInput As Variant
Dim sheetNums() As String
Dim num As Variant
Dim selectedSheets() As String
Dim selectedCount As Integer
Dim sourceRange As Range
Dim tempWs As Worksheet
Dim ws As Worksheet
Dim destRow As Long
Dim wsSource As Worksheet
' 1. 現在アクティブなブックにあるすべてのシート名を取得してリスト化
count = 0
For i = 1 To ActiveWorkbook.Sheets.count
count = count + 1
ReDim Preserve sheetNames(1 To count)
sheetNames(count) = ActiveWorkbook.Sheets(i).Name
sheetList = sheetList & count & " : " & ActiveWorkbook.Sheets(i).Name & vbCrLf
Next i
' 2. ダイアログを表示してシート番号を入力させる
userInput = InputBox("コピー元のシートを番号で入力してください:" & vbCrLf & _
"※複数選択は「,」または「/」区切り(例:1,3 または 1/3)" & vbCrLf & _
"※すべて選択する場合は「all」または「0」と入力" & vbCrLf & vbCrLf & sheetList, "シートの選択")
' キャンセルまたは未入力の場合は終了
If userInput = "" Then Exit Sub
' 3. 入力内容の解析(すべて選択 か 個別選択 か)
selectedCount = 0
If LCase(userInput) = "all" Or userInput = "0" Or userInput = "全て" Then
' 「all」または「0」の場合は全シートを配列に格納
For i = 1 To count
selectedCount = selectedCount + 1
ReDim Preserve selectedSheets(1 To selectedCount)
selectedSheets(selectedCount) = sheetNames(i)
Next i
Else
' 個別入力の場合は区切り文字をカンマに統一して分割
userInput = Replace(userInput, "、", ",")
userInput = Replace(userInput, "/", ",")
userInput = Replace(userInput, "/", ",")
userInput = Replace(userInput, " ", ",")
sheetNums = Split(userInput, ",")
For Each num In sheetNums
num = Trim(num)
If IsNumeric(num) Then
If CInt(num) >= 1 And CInt(num) <= count Then
selectedCount = selectedCount + 1
ReDim Preserve selectedSheets(1 To selectedCount)
selectedSheets(selectedCount) = sheetNames(CInt(num))
End If
End If
Next num
End If
' 有効な番号が一つもなかった場合
If selectedCount = 0 Then
MsgBox "有効なシート番号が入力されませんでした。", vbExclamation
Exit Sub
End If
' 4. 範囲を選択させるために、選ばれた最初のシートを開く
Set wsSource = ActiveWorkbook.Sheets(selectedSheets(1))
wsSource.Activate
On Error Resume Next
Set sourceRange = Application.InputBox( _
Prompt:="コピーする範囲をマウスで選択するか、キーボードで入力してください。" & vbCrLf & "(例: A2:D10)", _
Title:="範囲の指定", _
Type:=8)
On Error GoTo 0
' キャンセルされた場合は終了
If sourceRange Is Nothing Then Exit Sub
' 5. コピー処理(単一選択か複数選択かで分岐)
If selectedCount = 1 Then
' 1枚だけならそのままクリップボードへ
wsSource.Range(sourceRange.Address).Copy
MsgBox selectedSheets(1) & " シートのデータをクリップボードにコピーしました!", vbInformation
Else
' 複数枚なら一時的なまとめシートを一番左(最初)に作成して結合
Application.ScreenUpdating = False
' ★変更箇所:まとめシートをブックの最初(インデックス1の前)に挿入
Set tempWs = ActiveWorkbook.Sheets.Add(Before:=ActiveWorkbook.Sheets(1))
tempWs.Name = "コピー用まとめ_" & Format(Now, "hhmmss")
destRow = 1
For i = 1 To selectedCount
Set ws = ActiveWorkbook.Sheets(selectedSheets(i))
' データのコピー
ws.Range(sourceRange.Address).Copy Destination:=tempWs.Range("A" & destRow)
' 次の貼り付け位置を更新(A列の最終行の次)
destRow = tempWs.Cells(tempWs.Rows.count, "A").End(xlUp).Row + 1
Next i
' まとめたデータをクリップボードにコピー
tempWs.UsedRange.Copy
Application.ScreenUpdating = True
MsgBox "指定された " & selectedCount & " 枚のシートのデータを結合し、クリップボードにコピーしました!" & vbCrLf & _
"(※結合データは一番左の「" & tempWs.Name & "」シートにも残しています)", vbInformation
End If
End Sub
このマクロで削減できたのは、作業時間だけではありません。
むしろ大きかったのは、迷う時間と確認する負担が減ったことです。
手作業でやっていると、毎回こういうことを考えます。
1つひとつは小さいです。
でも、毎日、毎週、毎月発生すると、かなり大きな負荷になります。
こういう負荷は、作業時間としては見えにくいです。
しかし、確実に集中力を奪います。
そこで発生する細かいコピー作業や確認作業は、
仕事の本質ではありません。
本来やるべきなのは、数字を見て考えることです。
進捗を見て判断することです。
次の打ち手を決めることです。
でも、その前段階で、コピーや転記に注意力を使ってしまう。
これはとても、もったいないことです。
「自動化」とは、人間の注意力を守ること
業務効率化というと、よく「何分削減できたか」で語られます。
もちろん、それも大事です。

ただ、今回あらためて感じたのは
効率化の本質は時間削減だけではないということです。
むしろ大事なのは、人間の注意力を守ることです。
人間が本当に使うべきところに、集中力を残しておく。
そのために、機械に任せられるところは任せる。
今回のマクロは、まさにそれでした。
シートを探す。
範囲をコピーする。
順番に貼る。
漏れがないか確認する。
こうした作業をマクロに渡すことで、
人間は「内容を見て考える」ことに集中できます。
「今さらマクロ?」ではなく「だからこそマクロ」
ここで、こう思う人もいるかもしれません。
「AIの時代に、今さらExcelマクロ?」
たしかに、マクロは新しい技術ではありません。
派手でもありません。
バズりません。
でも、現場の業務改善では、
必ずしも新しい技術が勝つわけではないと感じました。

大事なのは、今そこにある摩擦を減らせるかだと思います。
AIでもいい。
マクロでもいい。
GASでもいい。
RPAでもいい。
手順書の見直しでもいい。
使う技術の名前よりも、「実際に人がラクになるか」のほうが大事です。
今回のマクロは、技術的にはシンプルです。
でも、仕事のストレスにはちゃんと効きました。
流行りのツールを使わなくても、それで十分だなって思いました。
小さなマクロは、AIエージェント活用の設計図になる
このマクロの話を、単なる「Excel便利技」で終わらせるのは、
少しもったいないです。
なぜなら、こうした小さな自動化は、
将来的にAIエージェントを使いこなすための練習になると思います。
AIエージェントに仕事を任せるには、
業務がある程度棚卸しされている必要があります。
「いい感じにまとめておいて」ではなく、
どのデータを使うのか。
どの条件で処理するのか。
どの形式で出力するのか。
エラー時はどうするのか。
ここまで整理されているほど、AIやシステムには任せやすくなります。
つまり、マクロを作ることは、単にExcelを便利にすることではありません。
業務を言語化し、構造化することです。
そしてそれは、AIエージェントに仕事を任せるための設計図になります。
自動化の第一歩は「半径1メートル」でいい
AIエージェントで一気に業務をゼロにしたい。
そう考えるのは自然です。
でも、いきなり大きな自動化を狙うより、
まずは自分の半径1メートルにある作業を見るほうが早いです。

多くの場合、「ちょっと面倒だけど、まあ手でやればいいか」
と放置されています。
でも、そこにこそ改善の種があります。
大きなDXは、小さな違和感から始まる
DXという言葉は、どうしても大きく聞こえます。

でも、現場で本当に変化を感じるのは、もっと小さい瞬間だったりします。
「あれ、これボタン1つで終わるようになった」
「毎週の集計がラクになった」
「会議前に焦らなくなった」
「ミスを気にしなくてよくなった」
こういう小さな体験が、自動化への信頼を生みます。
そして、自動化への信頼が生まれると、次の改善が進みやすくなります。
マクロでできた。
次はGASでできるかもしれない。
APIでつなげるかもしれない。
AIに任せられるかもしれない。
この順番が、意外と大事です。
おわりに
これから多くの仕事が、AIによって自動化されていくと思います。
ただ、その未来は、いきなり魔法のようにやってくるわけではありません。
目の前の業務を分解する。
繰り返しを見つける。
ルール化する。
小さく自動化する。
その積み重ねの先に、AIに任せられる仕事が増えていくのだと思います。
今回のマクロは、見た目としてはとても地味です。
複数シートを選ぶ。
範囲を指定する。
まとめてコピーする。
ただそれだけです。
でも、その「ただそれだけ」が、現場の摩擦を減らしました。
確認の負担を減らしました。
ミスの不安を減らしました。
本来考えるべきことに集中できる時間を作りました。
新しい技術を追うのは大事です。
でも、足元を見るのも同じくらい大事です。
自分のExcelの中にある、毎週繰り返している作業。
会議前に毎回やっているコピペ。
月末に必ず発生する集約作業。
誰かが気合いで支えている地味な手作業。
そこに、最初の自動化のチャンスがあります。
AIエージェントで全部を変える前に、まずは半径1メートルのマクロから。
案外、仕事を一番ラクにする改善は、
すごく近くにあるのかもしれません。
いいなと思ったら応援しよう!
「いいかも」と思ったら、応援して頂けると励みになります!