3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

「色番号の数値を元にして16進数のhtmlページ用の色指定の文字列を作るエクセルマクロ」その2

2014年3月6日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルVBA達人養成塾 小川です。

昨日の続きです。

エクセルマクロ無料動画講座申し込みページのメンテナンスの必用で作った、RGB(57, 156, 4) みたいな情報を基にして#399C04;みたいな文字列を作るマクロ。

昨日公開したものを書き直してみました。こんな感じかな↓。

Public Sub RGB_WEB2()
    Range("E1").Value = "#" & hx(Range("A1").Value) & hx(Range("A2").Value) & hx(Range("A3").Value) & ";"
End Sub
Private Function hx(num As Integer) As String
    Dim i(1) As Integer
    i(0) = num \ 16
    i(1) = num Mod 16
    Dim c As Long
    Dim s As String
    For c = LBound(i) To UBound(i)
        If i(c) < 10 Then
            s = s & CStr(i(c))
        Else
            s = s & Chr(Asc("A") + i(c) - 10)
        End If
    Next
    hx = s
End Function

「2つの文字を作ってくっつける作業を3回やって、その結果をすべてくっつける」ということで。
「2つの文字を作ってくっつける作業」で作る文字は似ているので、Functionプロシージャの中でまとめた。

ということで、短くなったし抽象度も増したけど。
だらだら書いたほうが早いですからね。こんなオーバーチューニングなことに執心してはいかんと思います。

これはよく神経質そうな受講生に言うことでもあるんですが、「誰がどう見ても最高のマクロ」を書こうなんて思わないほうがよいです。
そんなもの存在しませんから。

どうして「誰がどう見ても最高のマクロ」なんて存在しないかといえば、それは、TPO次第で「何が最高か」の解は変わるからです。

たとえば、マクロの実行時間が早いのか、読みやすいのか、作り始めてから完成するまでの時間が短いのか、あとでメンテナンスしやすいのか、..と挙げただけでも、この4つを同時に満たすことは不可能だと分かります。

だから、余計なことは考えないで、とにかくガシガシ書くこと。

このマクロだって、そういう意味ではまだツッコミどころ満載です。

例えば、Functionプロシージャの中でFor Next構文を使っているが、2回しかループしないから、展開してベタに書いたほうが早いのかもしれない。
あと、VBAにもともと10進数を16進数に直す関数があるんじゃないか、とか。

でも、別にそんなの知らないでも書けばいいんだし、調べている間にこのくらいすぐ書けちゃうくらいのスキルがあれば、そんな関数あってもなくても困らなくなるでしょ。
これもいつも言っていることですが、エクセルマクロをさらさら書けるようになりたい人は、「知識」はそこそこでよいですので、「頭の使い方」とか「体の使い方」のほうを意識して強化してください。

このマクロは、エクセルマクロ無料動画講座申し込みページの申込ボタンの色指定文字列を作るときに使いました。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド