dポイントプレゼントキャンペーン実施中!

入力規則でリストが設定されているセルに対して、vbaからインデックス=0を選択するにはどのようなコードを書けばよいのでしょうか?

A 回答 (3件)

こんにちは、


入力規則でリストには、Index系プロパティは無いようです。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
従って、選択が出来ないので、設定セルに値を書き込む形になるのではないかと思います。
インデックス=0 とは空白の事でしょうか?
入力規則設定セル Range("A1") = 値(表示したい値)

ここからは、個人的興味での余談です。(所謂、力業かも知れません)
リストの設定は、どのようにされていますでしょうか?
登録方法にもよりますが、
セル範囲の場合リスト1番目は設定範囲の1と言う事になりそうです。

数式で範囲を設定している場合(リスト1番目は設定範囲の1)
Sub Test()
Dim myList
On Error Resume Next
With Range("A1").Validation
If .Type = xlValidateList Then
myList = Right(.Formula1, Len(.Formula1) - 1)
Range("A1") = Range(myList)(3).Value
End If
End With
On Error GoTo 0
End Sub
3番目の値を取得し書き込んでいます。

配列なと値を設定している場合、りんご,みかん,,, のような登録
(リスト1番目は配列の0になります)
Sub Test1()
Dim myList
On Error Resume Next
With Range("A2").Validation
If .Type = xlValidateList Then
myList = Split(.Formula1, ",")
Range("A2") = myList(2)
End If
End With
On Error GoTo 0
End Sub

ここ迄書いて思う事は、リストインデックスが無いと選択すると言う事は、出来ないようですね。
また、入力規則の設定内容の値をVBAで入力する場面は、どのような場面なのかと思いました。
(値の設定が分っていればそれを入れれば良いし、そもそも運用者の為の機能?)
単純に空白にしたいのなら、Range("A1")="" でOKかと、
やった事が無かったので、考えてみましたが意味が無いようにも思いました。

知らないだけで、簡単なやり方があるかも知れません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ちょっとややこしいのですが、以下のようなケースで悩んでいます。

A列がデータの列になっていて、A列に直接入力するパターンと、B列が入力規則リストになっていて、リスト選択するとA列にデータが設定される(リスト選択の行はA列は計算式になっている)という、2通りのデータ入力パターンをもつ表があります。

このA列のデータをすべて0で初期化したいです。

リスト選択形式のデータについては、リストの先頭を選択すれば0が設定される仕組みとなっているので、indexなどがあればindex=0を選択できれば0で初期化できるかなと思いました。

お礼日時:2020/09/25 08:57

こんなのは、どうでしょう?


そこそこ動くとは思うのですが、もしかしたら、No.1さんやNo.2さんがやっているように、Validation.Typeを判断する必要があるかもしれません。暇だったら、試してみて下さい。

Sub sample()
Dim r As Range
For Each r In Cells.SpecialCells(xlCellTypeAllValidation)
With r.Validation
If Left(.Formula1, 1) = "=" Then
.Parent.Value = Evaluate(.Formula1)(1)
Else
.Parent.Value = Split(.Formula1, ",")(0)
End If
End With
Next r
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

いろいろと書き方があるので勉強になります。
いただいたサンプルコードは難しいですが試してみたいと思います。

お礼日時:2020/09/25 09:10

こんにちは



簡単かと思ったら、ちと手ごわいですね。
対象セルに入力規則が設定されていない場合とか、リストが設定されていてもセル範囲形式のリストと直接列挙するリスト形式など指定方法が複数あったりしますので…

で、こんなのではいかがでしょうか?
ひとまず、処理対象のセルを直接指定する形式にしてあります。

Sub Sample()
Dim c, t, e

Set c = Range("E4") '←処理の対処とするセル

On Error Resume Next
t = c.Validation.Type
e = Err
On Error GoTo 0
If e Then Exit Sub

t = c.Validation.Formula1
If Left(t, 1) = "=" Then
 t = Range(Right(t, Len(t) - 1)).Cells(1, 1).Value
Else
 t = Split(t, ",")(0)
End If
c.Value = t
End Sub
    • good
    • 0
この回答へのお礼

説明が不足していてすいません、リストは別シートに定義されているデータ群に対して名前の定義を使用して指定しています。

リストを直接入力していた場合には、説明いただいたような処理で取得できることが分かったので今後の参考になりました。

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

お礼日時:2020/09/25 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A