• ベストアンサー

エクセルVBAで入力規則の有無を取得

エクセル2010です。 VBAで特定のセル、たとえばA1セルに入力規則が設定されているかどうか取得したいのです。 セルにVBAで設定することはできるのですが、すでに設定されているかどうかを取得できずに困っています。 ご教示いただければ幸いです。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>A1セルといった特定のセルに設定されているかを なら入力値の種類を取得すればよいでしょう Dim ret As String On Error Resume Next ret = Range("A1").Validation.Type 'ret = ActiveCell.Validation.Type If Err Then   MsgBox "A1セルに入力規則は設定されていません。" Else   MsgBox "A1セルに入力規則が設定されています。" End If On Error GoTo 0

emaxemax
質問者

お礼

ありがとうございました! これでやりたいことができます。 よいお年をお迎えください。

その他の回答 (6)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

>セルにVBAで設定することはできるのですが、すでに設定されているかどうかを取得できずに困っています。 何故必要なんですか? VBAで書き込むときはデータの入力規則に関係なく強制的に書き込めたと思います。 しかし、要望なので参考のために下記のサンプルコードを提示します。 Sub DataType() Dim t, a t = 0 a = ActiveCell.Address On Error Resume Next t = ActiveCell.Validation.Type On Error GoTo 0 Select Case t Case 1 MsgBox "整数のみ入力可能" Case 2 MsgBox "数値のみ入力可能" Case 3 MsgBox "プルダウンリストから選択" Case 4 MsgBox "日付のみ入力可能" Case 5 MsgBox "時刻のみ入力可能" Case 6 MsgBox "文字列のみ入力可能、文字数の規制あり" Case 7 MsgBox "データ入力規則の設定あり" Case Else MsgBox "すべてのデータを入力可能" End Select End Sub 現在のアクティブセルについてチェックします。

emaxemax
質問者

お礼

> 何故必要なんですか? 特定のセル(仮にA1)を選択する際、一定の条件でそのセルに、SelectionChangeイベントで入力規則を設定するのですが、一定の条件を判定できるデータが入力される前(入力規則が設定される前)にA1を選択した場合、「先に必要データを入力して下さい」というような警告メッセージを出したかったのです。 ありがとうございました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

エラー対策は必要でした。m(_ _)m Dim rng As Range On Error Resume Next Set rng = Intersect(Range("A1"), Cells.SpecialCells(xlCellTypeAllValidation)) On Error GoTo 0 If rng Is Nothing Then   MsgBox "A1セルに入力規則は設定されていません。" Else   MsgBox "A1セルに入力規則が設定されています。" End If

emaxemax
質問者

お礼

ごあ、そうですね、シートに入力規則が一つもなかったらエラーになっちゃいますね。 丁寧に、何度もありがとうございました。 勉強になります。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

xlCellTypeAllValidationで調べる方がエラー処理しなくて良いかな Dim rng As Range Set rng = Intersect(Range("A1"), Cells.SpecialCells(xlCellTypeAllValidation)) If rng Is Nothing Then   MsgBox "A1セルに入力規則は設定されていません。" Else   MsgBox "A1セルに入力規則が設定されています。" End If

emaxemax
質問者

お礼

ご丁寧に、何度もありがとうございました。 勉強になります。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

小生も#1さんの回答でよいのではないかと思う? あとは質問者の指定のセルがその範囲に含まれているかどうかを判定するとか。 ここに質問する前に、Googleででも「VBA 入力規則の設定の有無」などで照会すれば済むことだろう。そして回答を参考に修正できる力がないと質問回答が役立てられない。 http://www.relief.jp/docs/excel-vba-check-if-exists-data-validations.htmlのコードに 下記の後半追加してみた。 参考にしてください。 Sub アクティブシートに入力規則が設定されているかを調べる() Dim rng As Range On Error Resume Next Set rng = Cells.SpecialCells(xlCellTypeAllValidation) On Error GoTo 0 If rng Is Nothing Then MsgBox "アクティブシートに入力規則は設定されていません。" Else rng.Select MsgBox "選択されているセルに、入力規則が設定されています。" MsgBox rng.Address(False, False) Set x = Application.InputBox(Prompt:="セル選択", Type:=8) MsgBox x.Address(True, True) If Not Intersect(x, rng) Is Nothing Then MsgBox "そのセルに設定アリ" Else MsgBox "そのセルに設定ナシ" End If End If End Sub ーー Application.InputBoxの応答操作はわかるよね。 調べたい1セル範囲をクリックする。

emaxemax
質問者

お礼

ありがとうございます。 よいお年をお迎えください。

回答No.3

#1さんの回答でも応用してやれば出来るんですけどね。 で、その他にも少し調べればいくらでもヒントが出てくるんですけどね。 「マクロの記録」で得られたコードを眺めてみると・・・ アクティブセルに入力規則が設定されているかどうか?だけなら   Selection.Validation.type コレで得られそうだ、と容易に辿り着きますよね? とりあえず、設定されていれば規則の種類に対応する値が返ってきます。 設定されていなければエラーが返ります。 ウォッチ・イミディエイトを弄って自力でデバッグする癖がなければ、 あるいは、構文の基本的な仕組みをある程度理解していなければ ここまで辿り着けないかもしれませんけどね。 で、ごく簡単にコレを組み込むなら Dim myVar as Variant On Error Resume Next   myVar = Empty   myVar = Selection.Validation.type   ' (1) On Error Goto 0   If Not myVar = Empty Then     MsgBox "設定あり"   Else     MsgBox "設定なし"   End If 読めないことはないと思いますが、一応解説。 入力規則が設定されていなければ(1)でエラー・・ですが、 エラー無視の指定をしているので、 変数「myVar」には何も代入しないままで進行していきます。 つまり、入力規則が設定されていなければ myVar は空っぽ。 myVar に何らかの値が入っていれば、設定されている。 と区別ができるわけですね。 繰り返しに組み込むなら、その都度 Empty に戻してやるのをお忘れなく。 ・・・と思ったら、打っているうちに被っちゃいましたね(笑)。 あー・・ついでにもう一つ、 On Error Resume Next は、 関係ないエラーもほとんど無視して進行させてしまうので注意です。 想定していないエラーが発生しているのを無視して進めた結果、 データがおかしくなる・・なんて可能性もありますので、ご利用は計画的に。

emaxemax
質問者

お礼

ありがとうございました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

入力規則が設定されているかどうかをサンプルマクロ http://www.relief.jp/docs/excel-vba-check-if-exists-data-validations.html

emaxemax
質問者

お礼

ありがとうござます。 ただ、ご紹介のURLは、入力規則がシートに設定されているかどうかを取得するものです。 これではSet rng = Cells.SpecialCells(xlCellTypeAllValidation) で取得したセル範囲を総当たりして、その中にA1があるかどうかなら調べられますが、A1セルといった特定のセルに設定されているかを取得するものではありません。

関連するQ&A

  • EXCEL VBAで、EXCELの入力規則でリストに設定された内容をすべて取得したい

    EXCEL2003を使っています。 EXCELシートのあるセルに対し、入力規則が以下のように設定されています。 ・入力値の種類:「リスト」 ・データ:複数の値を直接設定(「りんご,みかん,もも」のような形式) このとき、リストに設定されているすべての値をVBAで取得したいと思っています。 入力規則で設定されている内容を取得する方法をご存知の方、ご教示いただけますでしょうか。 そもそも入力規則で設定されている内容を取得することは可能なのでしょうか。 よろしくお願いいたします。

  • エクセル 入力規則

    エクセル2007を使用しています。仕事でデータ入力をしているのですが、ある特定のセルに、日本語入力をオンに設定しました。なので、そのセルに入力するときだけ日本語で入力ができ、それ以外のセルにはオフの状態に設定をしました。しかし、その特定のセル(日本語入力をオンに設定したセル)に移動しても、オンになりません。IMEツールバーが「あ」にならず「A」のままです。これは何か問題があるのでしょうか?入力の規則で、日本語入力をオンに設定したのに、反映されない症状について、お分かりになる方がいらっしゃいましたら、教えてくださいl。

  • 入力規則とVBA

    セルに入力規則を設定して、「A,B,C」を選べるとします。 Aを選んだとき、Bを選んだとき、Cを選んだときの処理をVBAで記述しているのですが、 「A,B,C」の値はは変わることがあるので、入力規則の一番目を選んだとき、二番目を選んだとき、三番目を選んだときのように出来ないでしょうか? VBのコンボボックスのように使いたいです。

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

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

  • VBAで入力規則 エラーでも入れたい

    Excel2003を使っています。 Range("B1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIRECT(A1)" これを使って「=INDIRECT(A1)」を入力規則のリストとして、セルのA1が空欄の状態で入れたいのですが、実行時エラー1004となってしまいます。 セルのA1には複数ある定義された名前のどれか一つが入るようにします。そして、そのどれか一つが入っていれば、エラーは起こることなく入力規則は設定されます。 ただ、A1は後々この資料を使うときに打ち込みたいため、VBAを走らせている段階では空欄のままにしておきたいのです。 これ、VBAを使わず直接入力規則を設定するときも、A1が空欄だと「元の値はエラーと判断されます。続けますか?」というメッセージが出ますよね? たぶん、これが原因だと思いますが、直接入れるときはそのメッセージを「はい」で強行することができます。 これをVBAで入れるときにもできないものかなと思っています。 VBAで強行して設定する方法はないものでしょうか? ちなみに「On Error Resume Next」をつけてみましたが、その場合はエラーは出ないものの入力規則も設定されませんでした・・・。

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

    エクセルでAの列1~20に入力規則により、その列に同じ数値を入力すると警告が出る様に設定しました。同じように重複してAの列1~20に数字の1~100までの数値以外を入力したら警告が出る様にも設定したいのです。 この様に入力規則を同じセルに複数設定できますでしょうか?お教えください。

  • 入力規則? エクセル関数??

    エクセル2003を使用しています。 特定のセル内に数字の1を入力すれば(同じセル内に)○○、2と入力すれば××、3と入力すれば△△となるように設定したいです。 ツールバーの「データ」→「入力規則」もしくは、「セルの書式設定」→「表示形式」から作成することができますか? それとも関数を作る必要がありますか? お願いします。

  • Excel VBA 入力規則のリスト化

    Excel VBAにて入力規則でリスト化しようと思っています。 通常セルを範囲指定によってリスト化する場合、 以下のようなコードになると思うのですが、 (セルA1にセルB1~B10の内容がリスト化される) Range("A1").Select With Selection.Validation .Add Type:=xlValidateList, Formula1:="=B1:B10" End With 例えばB1~B3, B6~B10などのような不連続な範囲をリスト化 する方法はありませんでしょうか? 宜しくご教示の程お願い致します。

  • エクセルVBA ClearContentsで入力規則が消える?

    さきほどこのような質問を偶然見つけました。 http://odn.okwave.jp/qa2912139.html Range("A2:G50").Select  Selection.ClearContents で、セルに設定してあった入力規則が消えるようなのです。 しかし、わたしのエクセル2000では、入力規則も条件付書式も消えません。 ひょっとして、2007ではそのように変わったのでしょうか?

  • Excelの入力規則について

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

専門家に質問してみよう