[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Functionで#value!が表示される』(アカポン)
以下の式を標準モジュールに書き、sheet1上に式を書き計算させる
B1(x)とC1(y)を足して、D1に表示させ、F1に入っている枠を赤で塗る
この場合、valueが表示される。
Function su(x, y, t) As Variant
su = x + y
t.Interior.ColorIndex = 3
End Function
しかし、interiorではなくFontに変えるときちんと動作し、F1の中の文字を赤にする
Function su(x, y, t) As Variant
su = x + y
t.Font.ColorIndex = 3
End Function
どうして、interiorの場合は、エラーになるのでしょうか
functionではなく sub()でのプログラムではきちんと動作します。
分かる方、お手数ですが、教えてください。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Excel のユーザー定義関数の制限について https://support.microsoft.com/ja-jp/topic/excel-f2f0ce5d-8ea5-6ce7-fddc-79d36192b7a1
プロパティの設定およびほとんどのメソッドの実行 はできませんので、
むしろ、Fontに変えるときちんと動作 する方が例外的です。 (´・ω・`) 2021/02/25(木) 13:54
なおマクロから呼び出す分にはその制約は外れます。
(γ) 2021/02/25(木) 15:06
上記が原則なんですが、こんな方法で回避できるという方法を、 他の掲示板で、とある方から教えて頂いたことを想い出しました。
ユーザー定義関数の中では書式変更ができないが、 他から呼ばれたFunctionプロシージャでは可能、ということを逆用した 次のような書き方ができるようです。
Function mySum(r1 As Range, r2 As Range, r3 As Range) As Variant Application.Evaluate "setColor(" & r3.Address & ")" mySum = r1 + r2 End Function
Function setColor(r As Range) 'r.Interior.Color = vbRed '赤 r.Interior.ColorIndex = 3 End Function
ただし、この方法が万能かどうかは不明ですが、 少なくともこのケースでは有効なようです。
この方法は、国内では余り出回っていないようですが、 私が最近感心したブレークスルー的手法でした。 なんでも海外の記事にあったそうです。世の中広いなと思いました。
【余談】 ちなみに、現在のコンセプトは関数の及ぼす範囲を限定的にしていて整合的ですが、 上記手法はある種の網の破れなんでしょうね。
ただし、Spill機能ですか?、最近は、MS社そのものがその原則を破っているのではないか と言う気がしないでもないのですが、 便利ではありますが、どこまで進める積もりなのかと、気になりながら拝見しております。
ついでに言えば、 https://www.publickey1.jp/blog/21/excellambdaexcelceoexcel.html なんかでは、Excelの根幹の計算機能をかなりアグレッシブに変えていこうという MS社の意気込みが窺えて興味深いです。
(γ) 2021/02/26(金) 12:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.