• 締切済み

Excel VBAで入力規則リストに記述できる関数

入力規則のリストで、ユーザー定義関数を使ったリストにしたいのですが、どうやれば良いのでしょうか? 使い方としては、レジストリの内容をユーザー定義関数経由でリストで選択させるようなことをやりたいと思っています。 入力規則の設定で「元の値」に、ユーザー定義関数を記述してもうまくいきませんでした。 多分、関数の戻り値が悪いのだろうと思うのですが、どのような戻り値にすれば良いか、お教えください

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

入力規則のリストに、ユーザー定義関数は使えないんじゃなかったかなーと思います。 [名前の定義]経由でも『元の値はエラーと判断されます..』状況です。 ..と、思ったんですけど、シートを経由して[名前の定義]を使えば何とかなるかな..と。 でもかなりトリッキーな手法です。 1)まずテスト値をセット。  例えばレジストリの"VB and VBA Program Setting"配下にテスト値を設定します。  Sub test()    SaveSetting "MyMacro", "Main", "Data", "a,b,c"  End Sub  #後で掃除してくださいね。 2)ダミーシートを追加し、"dummy"という名前をつける。 3)標準モジュールにFunction追加。  Function GetTestData() As Range    Dim r As Range    Dim s    s = Split(GetSetting("MyMacro", "Main", "Data"), ",")    Set r = Sheets("dummy").Range("A1").Resize(, UBound(s) + 1)    r.Value = s    Set GetTestData = r  End Function  この内容は、カンマ区切り文字列のレジストリテスト値を読み込んで  Splitで分割し、"dummy"シートのA1:C1に値を書き込むというものです。 4)[名前の定義]を設定する。  名前:   LIST  参照範囲: =GetTestData() 5)任意のセルに入力規則リスト設定。  元の値:= LIST  『元の値はエラーと判断されます..』メッセージが出るけど無視。 GetTestDataの戻り値をRangeにし、シートと[名前の定義]を経由する事で無理矢理設定します。 シート経由というのが引っ掛かりますが、まあ、非表示にしておくという手も。 GetTestDataの中で"dummy"シートに書きこんでますから、ワークシート関数としては使えません。 それに、入力規則リストにアクセスする度にGetTestDataが走りますから "dummy"シートも都度書き換わります。 あまり現実的ではないような気がしますね。 #もしかしたらこんなトリッキーな方法でなくても可能なんですかね? #ご存知の方いらっしゃるかもしれませんのでしばらく待ってみてください。 ユーザー定義関数にこだわらなくてもいい場合は Workbook_Openイベントなどで"dummy"シートに書き出したほうが遥かにラクです。 >#後で掃除してくださいね。 の分でテストキーの削除。 Sub test2()   Dim s As String   s = GetSetting("MyMacro", "Main", "Data")   If Len(s) > 0 Then     DeleteSetting "MyMacro", "Main", "Data"   End If End Sub

Schwarz20
質問者

お礼

回答、有難うございます。 早速やってみましたが、シートを経由するのが、ちょっと辛いですね せめて、「名前の定義」だけで出来れば良いのですが... もう少し、待ってみます。 有難うございます

  • kiriG
  • ベストアンサー率16% (8/50)
回答No.2

リストボタン(ボタンをクリックすると)を作る方法ですね! ※ 指定セル(ここでは B3)をクリックすると セルの右側にリストボタン(▼)が現れ   リストボタンをクリックすると 設定されているリスト(複数のデーター)が表示され   適応するテーターをクリックして入力する方法 この事であれば、簡単です。 添付画像を見ながら設定してください 1) リスト元(H1..H4)を入力します。    H2=空白 (空白データーは必要と思います)    H3=AAA  (1個目)    H4=BBB  (2個目)    H5=CCC  (3個目) 2) セル B3 をクリック 3) メニューバーより  データー ⇒ 入力規則 ⇒ 設定 タブ を選択    入力値の種類 ▼ をクリックして リスト を選択    元の値 枠の右側 赤い矢印をクリック    セル H2 をクリック    SHIFT キーを押しながら セル H5 をクリック    データー入力規則の窓を閉じて 「OK」 をクリック    これで設定完了 4) セル B3 をクリックして セル右側の リストボタン(▼)をクリックして    リスト表示をして 適応するリストを選択して クリック 5) 複数のセルに適応したいのであれば    複写ポインター(設定されたセルの右下の小さな○)を目的の方向へドラッグしてください 以上

Schwarz20
質問者

お礼

回答、有難うございます それを直接、ユーザー定義関数でやりたいのです。 つまり、VBAマクロで、 Public Function GetTestData() : (処理は省略) : End Function と、作成したものを メニューバーよりデータ⇒入力規則⇒設定で「入力値の種類」を「リスト」を選択して さらに「元の値」に「=GetTestData()」とやりたいのです。 このままやると、エラーになりリストにも表示されないので、どのようなVBAマクロを作ればいいのでしょうか?

  • kiriG
  • ベストアンサー率16% (8/50)
回答No.1

もう少し 具体的に 何がしたいのかを 教えてください どのような 入力 規則を したいのでしょう~ VBA でプログラムすれば どんな ことでも適用できますが・・・ ■質問 メニューバー から  データー → 入力規則 → 入力値の種類を「ユーザー定義」二変更して 数式の枠に 入力する方法で しているのでしょうか? ツール → マクロ → Visual Basic Editor (VBA)を選択して プログラムとして記述すれば 問題は、解決できると思います。 でも 少し勉強しないと 無理かも どのように したいのかが 解かればアドバイスも 可能ですが・・・ VBAの詳しいことは 参考URLを見てください。

参考URL:
http://excelvba.pc-users.net/index.html
Schwarz20
質問者

お礼

回答有難うございます。 メニューバー から  データー → 入力規則 → 入力値の種類を「ユーザー定義」ではなく、 メニューバー から  データー → 入力規則 → 入力値の種類を「リスト」でやりたいのです。 「ユーザー定義」に記述するようなユーザー定義関数や、 セルに記述するようなユーザー定義関数は作成できるのですが、 リストの「元の値」に入力できるような関数が作れなくて、困っています。 ご存知だったら、お教えください

関連するQ&A

  • エクセルの「入力規則」についてお尋ねします。

    エクセル2010です。 あるセルにデータの入力規則を設定します。 条件設定の入力値の種類を「リスト」にし、リストの値は、0,1,2,3と直接指定します。 これで設定したセルにはプルダウンで0,1,2,3を選択するか、直接0~3の数値の入力しかできなくなります。 ここまでは問題ないのですが、このセルにユーザー定義の書式、0"人"を設定して、1は1人と表示されるようにしました。そうすると、直接0~3の数値の入力ははじかれ、プルダウンで0,1,2,3を選択するしか入力ができなくなります。 リストに設定した値を正しく入力しているのに排除されるのはなぜでしょう? いろいろ試し、リストの値を、0,1,2,3と直接指定せず、セル範囲のリスト指定とし、そのセル範囲にもユーザー定義の書式、0"人"を設定しておけばクリアできました。 でも、たかだか数件のリストを指定するのにいちいちリストをワークシート上に作成し、そこにもユーザー定義の書式を設定しなければならないのは腑に落ちません。

  • VBAで入力規則のリスト参照元の値取得

    エクセル2007を使っています。 VBAツールを作っており、その処理で使われる一機能として 「任意のセルに設定されている入力規則のリストの元の値をVBAで取得する」処理を コード中に書きたいと思っております。 ■質問概要  「入力規則のリスト」が設定されている任意のセルを選択したときに、そのセルに設定されている  「入力規則のリスト」の「元の値」をVBAで取得する方法について教えてください。  ※取得した値は配列型の変数に代入するものとします ■想定イメージ  たとえば、次のようなブックで使うことを想定しております(画像参照)  ※実際はもっとデータ量が多いブックで使う予定です  ・「リスト元の値」というシートで「選択言語」という名前でリストを定義化  ・「通常操作するシート」では値を入力したいセルに対し、「入力規則のリスト」の「元の値」を   「=選択言語」で設定  VBAではこの「通常操作するシート」の入力欄のセルを選択している時に「選択言語」で定義されている  データをすべて取得し配列型変数に代入するという動作をさせたいと思っています。     この方法について教えてくださいますようお願いします。

  • エクセル2000の入力規則で困っています。

    エクセル2000のセルの入力規則で、条件の設定を 入力値の種類が「リスト」、 元の値が、カンマ区切りで  2,3,4,5  としております。 さらに、セルには書式設定で、表示形式が「ユーザー定義」で、0"年" にしてあります。 これで、セルを選択すると、ドロップダウンから 2~5 のいずれかしか選択できなくなり、セルには○年と正しく表示されますが、手入力で2~5の整数を入れようとすると「リストから選択してください」とはじかれてしまいます。 しかし、セルの表示形式が「ユーザー定義」でなければ、手入力でも2~5の整数値を問題なく入れることができます。 セルの書式は、あくまで見かけだけのことで、セルの中は同じ数値データのはずなのにどうしてこうなるのでしょうか? セルに○年を表示させながら、2~5の整数値の手入力を可能にする方法はないでしょうか?

  • Excelのセルをリストから入力

    Excel2000ユーザーです。 任意のセルをリストからデータ入力(選択)するように設定した場合、リストに含まれない値を入力する方法はありますか? ■現状 [データ]→[入力規則]で入力規則プロパティ画面を表示し、 「入力規則の種類」:リスト 「元の値」:リストに含めるデータ 「ドロップダウンメニューから選択する」にチェック と設定しています。

  • エクセルの入力規則について

    エクセルの入力規則機能について質問があります。 入力値の種類をリストに設定されていて、元の値には”=項目”と記載されています。 項目は別のシートのリストをさしているようで、セルをポップアップするとその別シートの セルの内容が選択できるようになっています。別のシートのリストの項目を削除すると セルをポップアップするとその項目だけ選択できなくなります。 このような機能(”=項目”の定義の仕方)について、どのように設定すればよいか教え て下さい。 よろしくお願いいたします。

  • Excel、入力規則のリストについて

    現在、A1とA2のセル(仮)に入力規則を設定し、それぞれ名前定義した範囲をリストとして表示するようにしています。 ※ただしくは、A1とA2は連動しており、A1で選択された値によってA2に表示されるようになっています。 A1の値を切り替えると、A2のリスト項目は問題なく切り替わるのですが、 A2のリストから選択して値を選択してあげるまで、A2は以前の値が保持されたままになります。 A1の値を切り替えると同時に、A2にA2のリスト項目の一番先頭のものを表示させることは出来ませんでしょうか。 お願いします。

  • エクセルの入力規則のリスト入力で、自由な記述もしたい

    OFFICE2003を使用しております。 EXELの「入力規則」で「リスト」を指定すると、登録されたリスト一覧の中のどれかを選択します。 このとき一覧の中に「その他・自由に記述」などと出てきて、自由に記述できるようにすることは可能でしょうか? すなわちほとんどの場合はリスト一覧で足りるのですが、ごくたまにリスト以外のことを入力する必要がある場合はどのように設定すればよいでしょうか?

  • エクセルの入力規則 リスト

    お世話になります。 入力規則でリストで選択し、その選択した値によって動的に次の入力リストの中身の変更を行いたいのですが上手く記述できないのでお願いします。 具体的に言いますと シート2を値を管理するシートとし、シート1を用意し シート2に アルファベットリスト(中身:A,B,C,D) Aリスト(中身:あ,い,う,え,お) Bリスト(中身:か,き,く,け,こ) Cリスト(中身:さ,し,す,せ,そ) Dリスト(中身:た,ち,つ,て,と) と命名したセルを用意します。 シート1のA列でアルファベットリストを入力規則のリストで呼べるようにします。 ここまでは出来るのですが シート1のA列でCを選択した場合B列ではCリストの「さ、し、す、せ、そ」を選択できるようにしたいのです。 Aであれば「あいうえお」Bであれば「かきくけこ」と絞りたいのですが上手くできないのです。 質問の内容がわからない場合申し訳ありません、質問頂ければお答えしますので宜しくお願い致します。

  • Excelの入力規則のリストにカンマを表示したい

    Excelの「データの入力規則」でリストにカンマ(,)を表示したいです。 手順としてはメニューの「データ」-「入力規則」を選択し、 表示された画面で「設定」タブを選択し「入力値の種類」で「リスト」を 選択します。 その後、「元の値」でカンマ(,)が含まれたシートのセル範囲を選択すれば 表示されますが、直に値を「元の値」に指定する場合にカンマ(,)をエスケープする方法が分かりません。 お分かりの方は教えてください。

  • excelの入力規則リストで重複不可にするには

    エクセルの入力規則でリストを利用して【プルダウンメニュー】を作成しています。 リストのデータを重複して選択できないようにするにはど のようにすればいいでしょうか? 例をあげるとしして 仮にA、b、Cの3つのセルに入力規則のリストを設定していずれも元の値が 『リンゴ』『みかん』『バナナ』とした場合。 Aのセルでリンゴを選択した時BやCのセルでリンゴを選択できないようにするに します。 VBAは全く分からないのでできれば関数で やる方法をご教授頂ければと思います。 宜しくお願いします

専門家に質問してみよう