VBAで入力規則の設定

このQ&Aのポイント
  • VBAを使ってA1セルに入力規則を設定する方法について教えてください。
  • セルに数値のリストを設定する際、コード内で変数を使用する方法を知りたいです。
  • 入力規則コードの後に初期値を設定する方法を教えてください。
回答を見る
  • ベストアンサー

VBAで入力規則の設定

いつもお世話になっております。 VBAを勉強して3ヶ月程度の初心者です。 VBAでの入力規則の設定について質問させていただきます。 A1セルに入力規則の設定を行い、0~10までの数値を選択できるようにしたいと考えています。 Sub Test() Range("A1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _ , Formula1:="0,1,2,3,4,5,6,7,8,9,10" End Sub とコードを記述すれば、確かに望みの仕様は満たされるのですが、複数のセルに入力規則を設定する場合、 また、リストの数が増えた場合を考えて、"1,2,3,4,5,6,7,8,9,10"を変数に出来ない?と考えて・・・ Sub Test2() Dim kazu(10) As Long kazu(0) = 0 kazu(1) = 1 kazu(2) = 2 kazu(3) = 3 kazu(4) = 4 kazu(5) = 5 kazu(6) = 6 kazu(7) = 7 kazu(8) = 8 kazu(9) = 9 kazu(10) = 10 Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _ , Formula1:=kazu End Sub なんて事もやってみましたが・・・駄目でした。 もう一点、初期値に0を表示したい場合は、入力規則コードの後に、  Range("A1").Value=0 と表示すればよいのでしゅか? ご指導をよろしくお願いいた

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

入力規則のリストネタを、カンマ区切りの文字列で作成するだけです。 シンプルに: sub macro1()  dim i as integer  dim buf as string  for i = 0 to 10   buf = buf & "," & i  next i  buf = mid(buf,2)  range("A1").validation.delete  range("A1").validation.add type:=xlvalidatelist, formula1:=buf  range("A1") = 0 end sub #参考 >初期値に0を表示したい場合は、入力規則コードの後に、 入力規則コードの「前」に初期値を記入することで、入力規則で「許可していない値を初期値として」セットする事もできます。

genta1019boston
質問者

お礼

ありがとうございます。

その他の回答 (3)

  • classical
  • ベストアンサー率29% (14/47)
回答No.3

 配列を使わなくても、リスト用シートを作成した方が早いのではないでしょうか?  例えば、sheet2のA1に1、A2に2・・・ とリストを作成しておいて、そこから参照すれば、リスト項目が増えた場合でも対応できます。  なお、質問文ではセルを選択していますが、任意の場所(選択セル(複数可)) に対して実行できるようにしています。 _______________ Sub sample() Dim ListWS As Worksheet Set ListWS = Worksheets("sheet2") 'リスト用シート Dim MyRg As Range Set MyRg = Selection '選択しているセルを格納 ListWS.Range("A1").CurrentRegion.Name = "MyList" 'リスト用シートに名前を付ける   'currentregionとは、選択しているセルを含む、空白で囲まれた範囲 With MyRg.Validation .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertInformation, _ Formula1:="=MyList" MyRg.Value = 0 End With End Sub でどうでしょうか?

genta1019boston
質問者

お礼

ありがとうございます。

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

>もう一点、初期値に0を表示したい場合は、 常にA1セルを選択した時は0を表示したいのであれば シートモジュールに以下のコードを Private Sub Worksheet_SelectionChange(ByVal Target As Range)   With Target     If .Address = "$A$1" Then .Value = 0   End With End Sub

genta1019boston
質問者

お礼

ありがとうございます。

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

配列kazuに収められている数値を","で繋ぐ必要があります。 ここではJoin関数を使いましたので変数の型はLongではエラーが出るので Variantにしています。 Dim kazu(10) As Variant, i As Long For i = 0 To 10   kazu(i) = i Next Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _ , Formula1:=Join(kazu, ",") >Range("A1").Value=0 >と表示すればよいのでしゅか? 良いのでは

genta1019boston
質問者

お礼

ありがとうございます。

関連するQ&A

  • 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」をつけてみましたが、その場合はエラーは出ないものの入力規則も設定されませんでした・・・。

  • 入力規則 日付をリストのプルダウンで選択したい

    エクセルの入力規則をVBAでやる時に日付をリストのプルダウンで選択したいのですが Sub test() With Range("A1").Validation .Delete .Add Type:=xlValidateList, Formula1:="2014/1/1,2014/1/2" End With End Sub をすると、 1/1/2014 1/2/2014 にとプルダウン上で表示されてしまい、なおかつ文字列になってしまいます。 .Add Type:=xlValidateList, Formula1:=#1/1/2014# & "," & #1/2/2014# .Add Type:=xlValidateList, Formula1:=Format(#1/1/2014#, "yyyy/mm/dd") & "," & Format(#1/2/2014#, "yyyy/mm/dd") これでも同じでした。 2014/1/1 2014/1/2 と表示させるにはどうすればいいでしょう?

  • excel2003 vba の入力規則リスト

    入力規則でリスト登録する記述について、教えていただけないでしょうか。 例えば変数(long)で、a=1,b=5 というものがあったとします。 シート1のA1セルに、1,2,3,4,5 でそれぞれ数値選択できる入力リスト を作成したいのですが、うまくいきません。どのように修正したらよいか教えて欲しいです。 Dim a As long Dim b As long a=1 b=5 With Worksheets("Sheet1").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=a, Formula2:=b End With だと、何も設定されません。

  • エクセルVBAで入力規則を設定するには?

    22歳男性です。 エクセルVBAについて質問があります。 シート上にあるボタンをクリックすると、特定のセルに入力規則を追加するというプログラムを作っています。 以下のコードのように記述しているのですが、まったくうまくいきません。 何が悪いのかご指摘いただけたらと思います。 ■コード■ Private Sub CommandButton1_Click() With Range(\"b2\").Validation .Add Type:=xlValidateWholeNumber, Operator:=xlBetween, Formula1:=10, Formula2:=20 End With End Sub

  • EXEL VBA で入力規則を変更するには

    現在去年のデータの入力作業をしていますが年月日を入力する際、 "2010/4/1"とか"2010/4/28"と打たなければならず、セルの書式設定とか 入力規則でもできません。 A3のセルにきたら"2010/"が既にはいっており、続けて"4/1"とか"4/28"とか日付だけを入力すればよいようにVBAでやれば出来ると思い、ここ2日ほどサイトとか見て勉強しましたが下記のところまが精一杯で動きません。 Private Sub Workbook_Activate() With Selection.Validation .Delete Range("A3", "A300").Select Add Type:=xlValidateDate Formula1 = "2010/mm/dd" End With End Sub どなたかご教授お願いします。

  • 【EXCEL2007 VBA】Validation入力規則→編集

    【EXCEL2007 VBA】Validation入力規則→編集 こんにちは。 通常Validation入力規則を使用すると、入力したセルデータはそのまま使用しますが、例えば↓のようなコードで"山梨県"を選択し、その同一セル内で"山梨県"に加えて"甲府市"と入力するとエラーが現れます。 そのエラーが現れなく方法はあるのでしょうか? Sub ChooseThenEdit() With Range("D2").Validation .Delete .Add Type:=xlValidateList, _ Formula1:="福岡県,岡山県,山梨県" End With End Sub Validationの使用にはこだわりませんが、とにかく 1.選択肢の表示 2。選択 3.編集 を素早くやりたいのです。 注1.上の例であれば隣のセルで山梨県の市を選べるようにすればいいじゃないか、という指摘があるかもしれませんが、あくまでも例なので、それはナシとして下さい。 注2.ListBoxを使用すればまあ出来ますが、ちょっと素早くできないと思うので、ご勘弁ください。 ではでは。ご回答ありがとうございます。

  • 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 リストを作成後、そのセルに文字列を挿入したい

    With Worksheets("シート名").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="該当なし" End With というように、A1のセルに対して、「該当なし」というプルダウン(入力規則)を設定し、そのあと文字列(文言)を挿入したいです。 その方法を教えてください。

  • VBAで入力規則の設定がうまくいかない・・・

    VBAで入力規則の設定がうまくいきません どなたかご教示ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim A As String If Target.Column = 3 And Target.Row >= 77 And Target.Row <= 65536 Then If Target.Value <> "" Then Worksheets("Sheet2").Range("A1:Z5").Copy _ Destination:=Target.Offset(5, -1) For i = 5 To 9 For k = 5 To 23 Step 2 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A Next Next End If End If End Sub 「実行時エラー '1004' : アプリケーションの定義またはオブジェクト定義のエラー」が出てしまします。 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A "=INDIRECT(""" & Target.Offset(0, 3).Address & """)"こうすることや"INDIRECT(" & Target.Offset(0, 3).Address & ")"こうするとエラーは発生しません。これはバグなのでしょうか? 上記だとリストに値がうまく設定されません。 このプログラムの意味ですが・・・ ttp://www.relief.jp/itnote/archives/000822.php こちらにあるような物を参考にしています。 ドロップダウンリストを連動させて使いたいのです。

  • エクセルでchangeプロジェクトを複数設定する場

    すみません、マクロの基本的な部分を分かっておらず、Google検索などで知識を得た程度のど素人なのですが。 A1にあ・い A2にう・え A3にお・か をプルダウンで選べるように設定していて 【い】を選んだ場合は選択肢を【う】と【お】のみにする 【あ】を選んだら選択肢を戻す 【え】を選んだ場合は選択肢を【あ】と【お】のみにする 【う】を選んだら選択肢を戻す 【か】を選んだ場合は選択肢を【あ】と【う】のみにする 【う】を選んだら選択肢を戻す という挙動を設定したく、複数のchangeプロジェクトを書いてみたのですが、どうしても1箇所のみうまくいきません。(下のマクロでは【え】を選んだ場合、A3の選択肢が消えない。) 書き方・考え方自体が間違っているのかもしれませんが、教えていただけませんでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) 処理1 Target 処理2 Target 処理3 Target End Sub Private Sub 処理1(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Else If Range("A1").Value = "い" Then With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" MsgBox "入場区分を【い】に設定した場合は、分配フラグは【え】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A1").Value = "あ" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub Private Sub 処理2(ByVal Target As Range) If Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A2").Value = "え" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" MsgBox "分配フラグを【え】に設定した場合は、入場認証区分は【あ】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A2").Value = "う" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A3)" End With End If End If End Sub Private Sub 処理3(ByVal Target As Range) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A3")) Is Nothing Then Exit Sub Else If Range("A3").Value = "か" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" MsgBox "お客さま情報をかに設定した場合は、入場区分は【あ】、分配フラグは【う】に固定となります。" ElseIf Range("A3").Value = "お" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ,い" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub

専門家に質問してみよう