- ベストアンサー
Excel ユーザ定義関数を作りたい
ユーザー定義関数を作りたいのですが どのような本で勉強をしたら良いのかがわかりません。 お勧めの本などがあれば教えてください。 C言語は一通りできます。 とりあえず作りたい関数が一つあってインターネットで調べながら 作っているのですが 選択したセルの背景(塗りつぶしの色?)を 変更するにはどうすればよいのでしょうか? 以上二つについて宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>奇数列だけ色をつけるにはどのようにすればよいのでしょうか? 一般的にお勧めできるのは、一般操作内にある、条件付書式ですね。 書式-条件付書式- 条件1(1) 「数式が」「=MOD(COLUMN(),2)=1」 として、 書式-パターンで、色を選んで、OKで閉じます。 この条件付書式を、必要な範囲にコピーします。 これを、VBAのコードで行うとなると、 特別に、色を付けたり消したりする条件がないのでしたら、以下のような、一般的なプロシージャでよいはずです。以下は、わたし流の書き方で、Selection を変数Rngに入れるのは、特別な使い方によって、エラーが出てくることがあるからで、本来は、そのまま、RngをSelectionに置き換えて使っても良いです。 'どこに登録してもよいです。 'シートモジュールでも、標準モジュールでも可能です。 '------------------------------ Sub RngColorChng() Dim Rng As Range Dim c As Range Set Rng = Selection 'マウスで範囲を選択 For Each c In Rng With c If .Column Mod 2 = 1 Then .Interior.ColorIndex = 8 '下記参照 End If End With Next c End Sub '------------------------------ 備考: 黒(1),白(2),赤(3),黄緑(4),青(5),黄色(6),ピンク(7), 水色(8),茶(9),緑(10),藍(11),黄土色(12),紫(13),濃緑(14),灰色(15) 後は、ColorIndexの名前で、VBエディタ側のヘルプで検索してください。
その他の回答 (3)
- Zero_0
- ベストアンサー率35% (72/201)
右クリックでセルの色を変えるだけでいいのなら Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True Selection.Interior.ColorIndex = 42 '色指定 End Sub というくらいの命令でできるのですが。
- Wendy02
- ベストアンサー率57% (3570/6232)
ユーザー定義関数には、制限があって、セルの挿入、削除、または書式の設定・変更セルの値の変更など、いわゆる動的な変化をするものには、単独では行うことができません。 例えば、以下のようなコードを、標準モジュールに置いても Function COLORCHANGE(arg1 As Range, arg2 As Integer) arg1.Interior.ColorIndex = arg2 '塗りつぶし End Function 「0」を返すだけです。 >選択したセルの背景(塗りつぶしの色?)を >変更するにはどうすればよいのでしょうか? こういう場合は、通常、Excelでは、イベントプロシージャという方法を取ります。 >どのような本で勉強をしたら良いのかがわかりません。 >お勧めの本などがあれば教えてください。 ユーザー定義関数に関して言えば、以下のようなものがあります。本屋さんで、調べてみてください。 Excel 自作関数編 実践のツボ―VBAでつくるユーザー定義関数 実践のツボシリーズ http://www.amazon.co.jp/exec/obidos/ASIN/4901676954/qid=1115546005/sr=1-5/ref=sr_1_10_5/249-1462390-5530743 参考書籍:日本VBA協会 http://www.vbaa.jp/training/books.htm かんたんプログラミング Excel2002VBA 応用編
お礼
アドバイス有難うございます。 奇数列だけ色をつけるにはどのようにすればよいのでしょうか?
- hana-hana3
- ベストアンサー率31% (4940/15541)
ユーザー定義関数は、受け取った値を計算して返す事しかできませんから、セルの参照や値の変更を行おうとした時点で実行が停止してしまいます。 (VBAの関数として呼び出す場合は問題ありません。) Function で始まるプロシージャに書けばユーザー定義関数として呼び出せます。
お礼
回答有難うございます。 根本的に間違っていたようです。
お礼
再び回答ありがとうございます。 「ExcelパーフェクトマスターVBA」を 斜め読みして作ってみましたが同じような感じになりました。