こんにちは! Excel講師の榊裕次郎です。

野良マクロという言葉がありますが、正しい文法でExcelマクロを丁寧に書いたところで、翌月になればその作成したマクロを修正しなければいけないシーンが現場ではとにかく多いです。

どんなに気を付けていても、次第に増築を繰り返した、迷路になる家へと変貌を遂げていくのがExcelマクロだと思っています。

Excelマクロは、Excelスキルがない人のために作成することが多いので、細かくエラー処理も考え抜いて作成しないと「このマクロおかしいです! 動きません! ちゃんと作成してください!」の集中業火を受けることとなります。

そのため、動作保証期間は1年、その後は新しいシステムに乗り換える(または別の人が新規に作成する)といった運用でないと、現場でのExcelマクロ担当者は、いつの間にか鬱になってしまうかもしれません。

Excelマクロの担当者は、ストレスをため込まないよう注意してください。

自分自身、Excel基礎講座では「基礎は重要!」と謳っているのですが、Excelマクロに関しては、仕様変更が多く、短期間で終わることが多いので、野良でもなんでもとりあえず動けばいいというマインドになってしまいました。

ただし、迷惑はかけてはいけません。どんなに野良マクロでも、必ずテストはしてください。外部システムに影響を及ぼすこともあるからです。そのため、これは絶対です。

今日はRangeプロパティをふんだんに使った、別ブックのデータを取り込むマクロをご紹介します。おそらくほかの講師が見たら、野良マクロということでしょう。

現在開いている別のワークシートからデータをセル参照する際、このような表示となります。

=[Sample.xlsx]Sheet1!$A$1

[ファイル名]シート名!絶対参照のセル番地

そのファイルを閉じると、このような式に変更します。例えば、CドライブにTransparentlyというWindowsのユーザー名を定めており、そのデスクトップにファイルがある場合、

='C:\Users\Transparently\Desktop\[Sample.xlsx]Sheet1'!$A$1

とセルに入力すれば、データを取り込むことができます。Googleドライブにあっても、OneDriveにあっても、ファイルパスにアクセスできる状態であれば、データを読み込むことができるわけです。

読み込みたいファイルのパスは、ファイル名を右クリック→プロパティ→セキュリティ設定の中で簡単に確認できます。

ここでコピペができますね。

現在開いているワークシートに、外部データを取り込むマクロです。

Sub Sample()

'取り込むシート名を選択
Sheets("Sheet1").Select

'取り込み先のワークシートのA1を取得
'ファイルのパス名は長いので変数を用意、セル番地は相対参照
Dim FP As String
FP = "='C:\Users\Transparently\Desktop\[Sample.xlsx]Sheet1'!A1"

'適当に範囲を決めて、思いっきりぶち込んでしまえ
Range("A1", "Z10000").Value = FP

'最後はホームポジションにアクティブセルを戻しましょう
Range("A1").Select

End Sub

もし5,000行でデータが終わっていたら、それ以降は「0」が出力されますが、集計をするには影響がないので、非常に美しくはありませんが、Excelマクロスキルがゼロの状態の人でも修正できるコードにはなるでしょう。

セル参照を外すために[値の貼り付け]をしたり、0以降の行を削除したり、そこは手動でもいいですし、自由にマクロを組んでも面白いかと思います。

何より、一生懸命作ったマクロの使用期間がたった1日だけということもあります。それ、手動でよかったんじゃないの? と文句が出てくることもあるでしょう。

今日は何を書きたかったかというと、野良マクロを全面的に肯定することはありませんが、手を抜くところは手を抜いてください。

Excelマクロ担当者は処理している作業時間が多く、ほかの社員よりも会社への貢献度は高いはずなのに、文句を言われるポジションに立ってしまいがちです。

完全主義にならないこと。そうでないと負担にしかないですからね。