- ベストアンサー
VBAで入力規則の設定
- VBAを使ってA1セルに入力規則を設定する方法について教えてください。
- セルに数値のリストを設定する際、コード内で変数を使用する方法を知りたいです。
- 入力規則コードの後に初期値を設定する方法を教えてください。
- みんなの回答 (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を表示したい場合は、入力規則コードの後に、 入力規則コードの「前」に初期値を記入することで、入力規則で「許可していない値を初期値として」セットする事もできます。
その他の回答 (3)
- classical
- ベストアンサー率29% (14/47)
配列を使わなくても、リスト用シートを作成した方が早いのではないでしょうか? 例えば、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 でどうでしょうか?
お礼
ありがとうございます。
- watabe007
- ベストアンサー率62% (476/760)
>もう一点、初期値に0を表示したい場合は、 常にA1セルを選択した時は0を表示したいのであれば シートモジュールに以下のコードを Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Address = "$A$1" Then .Value = 0 End With End Sub
お礼
ありがとうございます。
- watabe007
- ベストアンサー率62% (476/760)
配列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 >と表示すればよいのでしゅか? 良いのでは
お礼
ありがとうございます。
お礼
ありがとうございます。