• ベストアンサー

Excel VBA:エクセルのマクロで入力規則を設定する際のアラートの扱いがわからず困っています

エクセルでINDIRECTを使った入力規則設定をマクロで行う際の、アラートの扱いがわからず困っており、お教えいただけると幸いです。 例えば、A列に日付、B列にその日付に行った都道府県名、C列にはB列で選択した都道府県に属する自治体名を入れる場合を考えます。 そのために、  ・北海道、青森、…という具合に都道府県名のリストに、あらかじめ『都道府県名』と言う名前をつけたものを作成しておく。  ・洞爺湖、阿寒湖、釧路、…という北海道の自治体名リストにあらかじめ『北海道』と言う名前をつけたものを作成しておく。  ・弘前、八戸、十和田、…という青森県の自治体名リストにあらかじめ『青森』と言う名前をつけたものを作成しておく。   :(以下同様) と言う準備をしたあと  -B列の入力規則ダイアログボックスで、入力値の種類を『リスト』、元の値として『=都道府県名』とすることでドロップダウンリストから都道府県名を選ぶことが出来ます。  -C列の入力規則ダイアログボックスで、入力値の種類を『リスト』、元の値として『=INDIRECT(B1)』とすることでドロップダウンリストから自治体名を選ぶことが出来ます。   C列の規則を設定する際にB列にまだ都道府県名が入っていない場合は『元の値はエラーと判断されます。続けますか?』と言うアラートが出ますがOKを押して続行。 とすれば、C列のドロップダウンリストでB列で選択した都道府県に属する自治体名が選べることになります ここまでは、教科書などにも書いてある内容なので問題はないのですが、これをマクロ化すると問題が発生します。 上記の入力規則の設定をマクロで記録し、実行すると  『実行時エラー'1004'.アプリケーション定義またはオブジェクト定義のエラーです。』 が発生します。エラーの起こっている場所はC列の入力規則定義部分の .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:="=INDIRECT(B1)" のようです。 B列に都道府県名が入った状態ではエラーとはならないので、マクロ記録時に『元の値はエラーと判断されます。続けますか?』が出てOKとした部分が 何らかの問題となっているとは思うのですが、対処方法がわからずに困っております。 ちなみに、On Error Resume Nextを入れておいたとしても、エラーでマクロが中断されることはなくなりますが、入力規則の設定は行われないので対処方法にはなりません。 質問が長くなり恐縮です。 コピーペーストなどで入力規則の設定が消えてしまうことがあるので、ブックの立ち上げ時に入力規則の再定義をしたいと考え、このような質問となりました。 対処方法おわかりの方、ご教授いただけると大変助かります。 なお、環境はwindowsXP、excel2003です。 よろしくお願いいたします。

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

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

>Formula1:="=INDIRECT(B1)" ここでエラー制御してもいいかもしれませんね。 Formula1:="=IF(B1="""",B1,INDIRECT(B1))"

sirakura3
質問者

お礼

ご回答ありがとうございます。 Formulaの中にIF文を書くというのは、想像もしていなかった回答ですが、すごくエレガントに解決しそうです。 B1が空白だったときに、INDIRECT(B1)が設定されないのではないかと疑問に思って実際に試してみたのですが、全く問題なく動作するようです。 すごく勉強になりました。 この方法を採用してプログラミングを進めてみたいと思います。 本当にありがとうございました。

その他の回答 (1)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

>B列に都道府県名が入った状態ではエラーとはならないので ということであれば、 C列の入力規則をセットする前に、B1にひとつ県名を入れおき 入力規則セット後、B1の県名を消去すればいいのでは? '------------------------------------    B列入力規則セット  Range("B1").Value = "北海道"    C列入力規則セット  Range("B1").Value = "" '--------------------------------- 以上  

sirakura3
質問者

お礼

ご回答ありがとうございます。 なるほど、こういう考え方もありましたか。 確かに、これだとばっちり解決しそうです。 B1に、最初から県名が入っていた場合は条件判断しないといけませんが、 色々と応用が利きそうです。 ありがとうございました。

関連するQ&A

  • 一つの列に2つの入力規則を使いたい。

    B列にはプルダウンで選択するために入力規則で、リストで名前定義を使っているのですが、 また 「そのB列に隣接するA列のセルに何か入力されてないと、 B列に入力できない」 「=入力規則のユーザー設定、COUNTA(A1)=1」 とういう2つのことをしたいです。 でも、入力規則は1つしか出来ないですよね? こうゆう場合はどうすればいいのでしょうか? マクロでしょうか? よろしくお願い致します。

  • Excelの入力規則に2列のリスト

    添付画像のようなA列に都道府県コード、B列に都道府県名が入力されていて、D2セルに入力規則でプルダウンリストを使用したいです。 プルダウンリストにはAとB列を結合(添付はスペース区切りにしていますがなんでもいいです)させたものを表示し、選択後はB列の名称のみを反映させたいのですが、このような制御は可能でしょうか? できればマクロやVBAは使用しない方が望ましいです。 よろしくお願いします。

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

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

  • EXCELの入力規則でリスト入力をさせたいセルがあります。

    そのときのリスト項目ですが、例えばA列に北海道、青森、秋田・・・などの都道府県名が入っており、C列に○か空白が入力されている表があるとします。また行の数は47とします。 (○か空白の意味は、県庁所在地と都道府県名が同じ名前なら○(例に、新潟県と新潟市)、それ以外なら空白(三重県と津市)だとします) C列が"○"の場合のみA列のデーターをみて、それらをリスト項目と してダウンリストで選べるようにしたいのですが、どのようにしたらよろしいでしょうか? VBAのコードでなければできないようですか?教えてください。 よろしくお願いします。

  • 前のセルの入力規則を見て、さらに入力規則で・・・

    入力規則のリスト表示の方法について教えていただきたいのですが・・・  A列          B列 A,B,C  A-1,A-2,A-3,B-1,B-2,B-3,C-1,C-2,C-3 A列に、A,B,Cと入力規則を設定します。 B列には、A列に入力したAに関係するA-1,A-2,A-3、 Bに関係するB-1,B-2,B-3、Cに関係するC-1,C-2,C-3 を入れたいのですが、B列のリストが多くなりすぎるので、A列にAを入力したときはA-1,A-2,A-3のみをリストに表示させることは、可能でしょうか?(B,Cについても同じ) よろしくお願いします。

  • Excelの入力規則について

    Excelの入力規則について教えてください。 A1:A20に入力規則を設定します。 入力値の種類にリストを選び、元の位置で、北海道、青森、岩手、山形・・・と都道府県名を20件ほど入力し、設定が完了したとします。 A1セルでドロップダウンして、岩手を選び、次のA2のセルでドロップダウンした時、岩手をリストから消しておきたいのです。 つまり、リストから選んだものは、次のセルでドロップダウンした時、常に消えておくことができるように設定したいのですが、良い方法はありませんか?

  • エクセルの入力規則

    エクセル2007の入力規則で、リストを設定したのですが、 リストのドロップダウンメニューが出てきません。 他の入力規則は設定されるのですが、リストだけがどうしても・・・ ただ、リスト以外の値を入力するとエラーが表示されるので、リストの入力し規則は生かされているようです。 分かる方、教えてください。

  • エクセル 入力規則のVBAを教えてください

    先日も質問させていただきましたが、どうしてもうまくいかないので、再度質問させていただきます。 エクセルで顧客管理をしています。 C列に顧客名を入力していくのですが、 同じ顧客のデータは1行にまとめたいため、 C列には同じ名前が入力できないようにしたいのです。 C列全部に データ→入力規則→設定→数式  =countif(c:c,c1)=1 と、入力規則を設定しました。 この後、ダブリ入力をすると警告のメッセージボックスが出るようになったのですが、 中にはまったく同じ顧客名なのに入力できてしまったり、 また同じ名前はないのに、入力できなかったりします。 これは何が原因なのでしょうか? どうしてもダブリ入力はできないようにしたいのですが、他に何か方法はないでしょうか? 前回のこの質問に対して、 式を=countif(c:c,c1)<=1  とするや 入力規則のコピーの方法など、お答えを頂きましたが、どうしてもうまくできませんでした。 同じく、まったく同じ顧客名なのに入力できてしまったり、 また同じ名前はないのに、入力できなかったりします。 伝票を見ながら入力していくのですが、伝票は1000枚ほどあります。 どうしても入力時点で重複をさけたいのですが、これをVBAでできないでしょうか? 入力規則のコードの書き方がわかりません・・。 いつもこちらに頼って申し訳ありませんが、どうぞよろしくお願いします。

  • エクセルVBAで入力規則の列数を取得

    エクセル2013です。 ワークシートのB列、C列、E列に入力規則が設定してあります。 ところが以下のマクロを動かすと Cells.Count は正しく3を返しますが、Columns.Countは2返ります。 B、C、D列に入力規則を設定したときは、Columns.Countはちゃんと3が返ります。 B、D、E列に入力規則を設定したときは、Columns.Countはなんと1が返りました。 なぜでしょうか? Sub TEST01()   With Rows(3).SpecialCells(xlCellTypeAllValidation)     MsgBox .Cells.Count     MsgBox .Columns.Count   End With End Sub

  • エクセルの入力規則で

    似た質問があるかもしれませんが、ご質問します。 エクセルの入力規則で、[挿入]メニューで定義した名前をリストのところで設定したいのですが、リストの入力欄に「名前」を入れるのにはどのような文字列にすればいいでしょうか。 分かりにくい質問かもしれませんが、「名前」はどのように表現したらいいでしょうかという質問です。入力規則のリストにしたいデータが他シートにあるため、質問しました。 お願いします

専門家に質問してみよう