こんにちは。
この件、以前にも出ていたことなのですが、私個人としては、そういう方式自体やVersion4マクロ関数をウンヌンする話はナンセンスだと思いますが、少し、私のほうから、正しい注意書きをつけておきたいと思います。(他の方も読んでいる人もいると思いますから。)
まず
#1 さんのご指摘が、ちょうどよいのですが、
「!はタイプミスですか?」
これは、
GET.CELL(63,!A1)+NOW()*0
名前-定義というのは、元々、シートに属したものですので、「!」としないと、各シートで使えなくなります。ただし、それは、ある種の致命的エラーにも発展しますので、この方式は、複数のシートで使用する場合は、注意したほうがいいようです。
シートは違っても、同じセル番地で重なったりすると、シートが違ってもエラーが起こる可能性がたまにあります。できるなら、やはり、シートを指定したほうが、安全(Excelのアプリケーションレベルのハングアップを避けること)になります。また、名前-定義というのは、Bookに属したものですから、Bookを越えて、設定することは出来ません。エラーが発生します。
A1 と指定している以上は、右隣、通常は、B1 にセルポインタを置いて、名前登録します。
私は、ここでは書いたことがありませんが、色番号自体を取るのは、ユーザー定義関数で、
標準モジュール
Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。
次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、Alt + Q で、画面を閉じます。
Function ColorIndexShow(セル As Range, Optional 文字 As Boolean = False)
Dim num As Integer
Application.Volatile
If 文字 = False Then
num = セル.Cells(1, 1).Interior.ColorIndex
Else
num = セル.Cells(1, 1).Font.ColorIndex
End If
If num < 0 Then num = 0
ColorIndexShow = num
End Function
使用法:
=ColorIndexShow(A1)
パターンのカラーインデックス
=ColorIndexShow(A1,1)
文字のカラーインデックス'(1は、Trueでも良い)
※関数名の文字の大文字・小文字は関係ありません。
となります。ただし、Now()*0 の再計算をさせた名前定義のほうが、上のようです。根本的な違いは、名前定義で行ったものは、セキュリティのマクロチェックに掛からないということですね。
ユーザー定義関数では、同じことは出来ません。 シート内で使う分には、一般のユーザー定義関数は、Public ステートメントはつける必要はありません。
お礼
ありがとうございます