t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

コンピューターの得意なことを人間がしない。

先日、カレンダーのヘッダー作成を題材にコード整理のプロセスを紹介した。
thom.hateblo.jp

最終的に曜日ヘッダー作成部分は以下のようにシンプルなサブプロシージャにまとまったのだが、やはりこれを手で書くとなると面倒くさい。

Sub 曜日ヘッダー作成(開始セル As Range)
    開始セル.Offset(0, 0) = "日"
    開始セル.Offset(0, 1) = "月"
    開始セル.Offset(0, 2) = "火"
    開始セル.Offset(0, 3) = "水"
    開始セル.Offset(0, 4) = "木"
    開始セル.Offset(0, 5) = "金"
    開始セル.Offset(0, 6) = "土"
End Sub

手書きで張り付けて一つずつ修正するなんてやってらんねぇって方はコードにコードを書かせるメタプログラミングに手を出してみると良い。

下記を実行すると、

Sub ヘッダ作成のためのマクロ()
    For i = 0 To 6
        Debug.Print "開始セル.Offset(0, " & i & ") = """ & Format(i + 1, "aaa") & """"
    Next
End Sub

イミディエイトウインドウに以下のコードが出力される。

開始セル.Offset(0, 0) = "日"
開始セル.Offset(0, 1) = "月"
開始セル.Offset(0, 2) = "火"
開始セル.Offset(0, 3) = "水"
開始セル.Offset(0, 4) = "木"
開始セル.Offset(0, 5) = "金"
開始セル.Offset(0, 6) = "土"

あとは切り取って張り付けるだけ。

これならFormat関数のテクニックも活きるので万々歳。

手修正だと何が問題か

最初の行をコピーして手で修正した場合、数字と曜日あわせて12箇所の修正が必要だ。

たかだか12箇所だ。それくらい手でやれよって言われそうだが、何が嫌かというと、その修正はコンピューターが最も得意とする単純な繰り返し作業だということだ。

要するに「ニンゲン様が、なぜ貴様らコンピューターごときの仕事を肩代わりしなければならないのか。まったく理不尽である。」という不満である。

かかる時間は問題ではない。

問題はどちらが創造的な作業であるかということだ。

今回の記事は皆さんメタプログラミングをしましょうという趣旨ではない。

複数のやり方があったら、創造的な方をとる。頭を使う方をとる。
単純作業も息抜きには良いんだけれど、なるべく普段からそういう癖をつけとかないと、この先の時代を生き残るのは難しいんじゃないかなと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。