• ベストアンサー

Excel ユーザ定義関数を作りたい

ユーザー定義関数を作りたいのですが どのような本で勉強をしたら良いのかがわかりません。 お勧めの本などがあれば教えてください。 C言語は一通りできます。 とりあえず作りたい関数が一つあってインターネットで調べながら 作っているのですが 選択したセルの背景(塗りつぶしの色?)を 変更するにはどうすればよいのでしょうか? 以上二つについて宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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エディタ側のヘルプで検索してください。

sanpogo
質問者

お礼

再び回答ありがとうございます。 「ExcelパーフェクトマスターVBA」を 斜め読みして作ってみましたが同じような感じになりました。

その他の回答 (3)

  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.3

右クリックでセルの色を変えるだけでいいのなら Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True Selection.Interior.ColorIndex = 42 '色指定 End Sub というくらいの命令でできるのですが。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

ユーザー定義関数には、制限があって、セルの挿入、削除、または書式の設定・変更セルの値の変更など、いわゆる動的な変化をするものには、単独では行うことができません。 例えば、以下のようなコードを、標準モジュールに置いても 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 応用編

sanpogo
質問者

お礼

アドバイス有難うございます。 奇数列だけ色をつけるにはどのようにすればよいのでしょうか?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

ユーザー定義関数は、受け取った値を計算して返す事しかできませんから、セルの参照や値の変更を行おうとした時点で実行が停止してしまいます。 (VBAの関数として呼び出す場合は問題ありません。) Function で始まるプロシージャに書けばユーザー定義関数として呼び出せます。

参考URL:
http://www.konomiti.com/Ex_kan_05.html
sanpogo
質問者

お礼

回答有難うございます。 根本的に間違っていたようです。

関連するQ&A

  • Excelのユーザー定義でできるのでしょうか?

    Excelのユーザー定義で、日にちに色をつける方法を教えていただいたのですが、時間ごとで色をつけることっていうのも、できるのでしょうか? セルC2には、開始時間、セルD2には、終了時間が入っているとします。 セルC2には、データの入力規則を使って、別シートから時間をひっぱってきています。 セルD2には、timevalue関数を使って、開始時間から終了時間を求めてあります。 そのセルC2に入力されている、 開始時間が、たとえば、午後13:00からだったら、 セルC2と、セルD2の色を青にする、という具合です。 条件付書式でやったら、シリアル値に阻まれまして、全部のセルの色が変更してしまいました。 色の変更はセルでも、フォントの方でもかまいません。 ほかの方法もあるような気もするのですが、思いつかないので、 おわかりになる方がいらっしゃいましたら、よろしくお願いいたします。

  • エクセルユーザー定義関数(1)

    エクセル初心者です。 複数のセル範囲(例えばRange("A1:A100"))を入力させ、入力されたセル範囲すべてのセルを3乗した総和を求めるユーザー定義関数は作ること可能でしょうか? Function Y(a As Range) As Variant ここに、aで選択されたセル全てを3乗して総和を求める関数Yを定義したい。 End Function よろしくお願い致します。

  • エクセルのユーザー定義関数で(VBA)

    エクセルのVBAで、セルに「=SheetName」と書き込めば、その関数を書き込んだセルが属するシート名をセルに代入さるようなユーザー定義関数を作りたいと考えています。 で、標準モジュールに Public Function SheetName(test) SheetName = ????? End Function と、書き込んでふと止まりました。 ユーザー定義関数を書き込んだシートの名前ってどうやって取得すればいいのでしょうか?VBでいうSenderみたいなのってあるんでしょうか? どなたか?詳しい方教えて頂けないでしょうか? 宜しくお願いいたします。

  • Excelユーザー定義関数が書き込まれているセルアドレス

    Excelのユーザー定義関数で、自分自身が書き込まれているセルのアドレスって取得出来るのでしょうか? 例えば、 Function test(MyString As String) As String test = "入力された文字は、「" & MyString & "」です" End Function とユーザー定義関数を作り A1のセルに =test("てすと") と書くと 入力された文字は、「てすと」ですと出てきます。 そこで、ユーザー定義関数のなかで、ユーザー定義関数を呼び出した式が入力されている(上記の例ですと、「A1」)アドレスを取得する方法ってありますか? どなたか、詳しい方いらっしゃいましたら教えてください。

  • Excel2003 ユーザー定義関数

    お世話になります。 ユーザー定義関数について教えて下さい。バージョンはExcel2003です。 B268セルの数式をコピーしてB259~B281までその数式を貼り付けるような使い方をしたいのですが、ユーザー関数は関数の中身を変更しても再計算しないとのことで再計算されません。 セルひとつひとつに貼り付けを行っていくと再計算されましたが、さらに広範囲に一気にユーザー関数を使用した数式を貼り付ける使い方で、再計算させる方法はありますでしょうか。 よろしくお願いします。

  • ユーザー定義関数にて

    色つきセルの合計を数えるユーザー定義関数を使用していますが 普通の関数のように、セルに変更等ですぐに更新してくれればいいのですが 表示は前回のままです。(ですのでF9を押しています) 計算ではちゃんとした数字になっているのですが 更新が遅くて変更されません。 (セル範囲は縦で30個ぐらいです) すぐに更新するいい方法はないでしょうか? ご経験者の方々、知識ある方々の ご意見やアドバイスなどをよろしくお願いします。 色つきセルのカウント Function CountColor(計算範囲, 条件色セル) Application.Volatile CountColor = 0 For x = 1 To 計算範囲.Rows.Count If 計算範囲.Rows(x).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then CountColor = CountColor + 1 End If Next End Function

  • エクセル2007のユーザー定義について教えてください。

    エクセル2007のユーザー定義について教えてください。 A1のセルにX001のようなコードが入力されている場合,RIGHT関数を使って右端の1を抽出し,この1に「日目」などの文字を結合して「1日目」と表示したいですがセルのユーザー定義で可能でしょうか。=RIGHT(A1,1)&"日目"のようにやればできますが,セルのユーザー定義でやりたいと思っています。

  • ユーザー定義関数について質問します。

    他社からもらったエクセルファイルにユーザー定義関数が埋め込まれていました。 これが非常に使いやすく便利なのです。しかし、一部を修正したいところがあるのですが「ユーザー定義関数」について知識がありません。 勉強しようと思ってますが、とりあえずこの関数の定義内容を見てみたいのですが、どうすれば中身が確認できますか? アドイン関数ではないので関数の定義は当ファイル内にあるはずです。 よろしくお願いします。

  • VBAでのユーザ定義関数の返り値

    VBAでのユーザ定義関数の返り値をエクセルのセルに表示させる際、 色を変更して表示するにはどうすれば良いのでしょうか? つきのような関数のerrorの時だけ赤色にしたいのです。 functin test(ss as double) if ss >10 then test=ok else test =error! end if end function

  • Excelのユーザー定義関数について。

    ネットで調べて「アルファベットのみを半角にする」というユーザー定義関数を発見し使用していますが、 この関数にある特定の文字を変換する条件を追加することはできますでしょうか。 例えば、リンゴ という文字がセル内にある場合、ミカン に変換されて表示されるという条件を下記のユーザー定義関数に加える事ができますか。 もしくは、新たに別のユーザー定義関数を作るしかないのでしょうか。アドバイスよろしくお願いします。m(_ _ )m Function ASC_A(str As String) As String Dim i As Integer For i = 1 To Len(str) If Mid(str, i, 1) Like "[a-zA-Z]" Then Mid(str, i, 1) = StrConv(Mid(str, i, 1), vbNarrow) End If Next ASC_A = str End Function

専門家に質問してみよう