エクセルで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です。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
>Formula1:="=INDIRECT(B1)"
ここでエラー制御してもいいかもしれませんね。
Formula1:="=IF(B1="""",B1,INDIRECT(B1))"
ご回答ありがとうございます。
Formulaの中にIF文を書くというのは、想像もしていなかった回答ですが、すごくエレガントに解決しそうです。
B1が空白だったときに、INDIRECT(B1)が設定されないのではないかと疑問に思って実際に試してみたのですが、全く問題なく動作するようです。
すごく勉強になりました。
この方法を採用してプログラミングを進めてみたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
>B列に都道府県名が入った状態ではエラーとはならないので
ということであれば、
C列の入力規則をセットする前に、B1にひとつ県名を入れおき
入力規則セット後、B1の県名を消去すればいいのでは?
'------------------------------------
B列入力規則セット
Range("B1").Value = "北海道"
C列入力規則セット
Range("B1").Value = ""
'---------------------------------
以上
ご回答ありがとうございます。
なるほど、こういう考え方もありましたか。
確かに、これだとばっちり解決しそうです。
B1に、最初から県名が入っていた場合は条件判断しないといけませんが、
色々と応用が利きそうです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAで入力規則の設定がうまくいかない・・・
Visual Basic(VBA)
-
VBAで入力規則 エラーでも入れたい
その他(Microsoft Office)
-
Excelマクロで、入力規則のリストに既に定義された名前を入れたい
Excel(エクセル)
-
-
4
【VBA】入力規則(Validation)のリストに数式を設定する方法
Excel(エクセル)
-
5
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
入力規則のリスト選択
Visual Basic(VBA)
-
8
エクセル ボタンに設定したマクロごとボタンをコピー
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
VBAコンボボックスで選択した値...
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Changeイベントでの複数セルの...
-
VBA 列が空白なら別のマクロへ...
-
VBAを使って検索したセルをコピ...
-
セルに値が入っていた時の処理
-
【Excel VBA】 B列に特定の文字...
-
文字列の結合を空白行まで実行
-
Cellsのかっこの中はどっちが行...
-
VBA 何かしら文字が入っていたら
-
VBAで、特定の文字より後を削除...
-
IIF関数の使い方
-
VBA 値と一致した行の一部の列...
-
エクセルVBA シートモジュール...
-
複数の列の値を結合して別の列...
-
Excel マクロ VBA 別シートのセ...
-
【VBA】複数行あるカンマ区切り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
IIF関数の使い方
-
VBAを使って検索したセルをコピ...
-
Changeイベントでの複数セルの...
-
VBAの構文 3列置きにコピーし...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
VBAでのリスト不一致抽出について
-
セルに値が入っていた時の処理
-
VBAコンボボックスで選択した値...
おすすめ情報