Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12966 / 13646 ツリー ←次へ | 前へ→

【7709】入力規則のリストの配列操作 あらやん 03/9/16(火) 11:47 質問
【7713】Re:入力規則のリストの配列操作 INA 03/9/16(火) 12:39 回答
【7723】Re:入力規則のリストの配列操作 あらやん 03/9/16(火) 13:50 発言
【7724】Re:入力規則のリストの配列操作 INA 03/9/16(火) 13:58 回答
【7731】Re:入力規則のリストの配列操作 あらやん 03/9/16(火) 14:54 お礼
【7734】Re:入力規則のリストの配列操作 BOTTA 03/9/16(火) 15:39 回答
【7738】Re:入力規則のリストの配列操作 あらやん 03/9/16(火) 16:25 お礼

【7709】入力規則のリストの配列操作
質問  あらやん  - 03/9/16(火) 11:47 -

引用なし
パスワード
   例えば、
セル"A1"に"全部A,全部B,全部C" 
セル"A2"〜"A5"に"A,B,C" 
というリストを入力規則で、作成したとして、

「セル"A1"で"全部A"が選択された場合、セル"A2"〜"A5"に"A"を表示する。」
というマクロが組みたいのですが、

入力規制で作成したリストを、配列として扱うにはどうしたらよいでしょうか?
「セル"A1"で"全部A"が選択された場合、セル"A2"〜"A5"のリストの1番目を表示する。」

また表示方法は、VALUEしかないのでしょうか?

すいませんが、よろしくお願いいたします。

【7713】Re:入力規則のリストの配列操作
回答  INA  - 03/9/16(火) 12:39 -

引用なし
パスワード
   ↓こんな感じで良いのでしょうか?(たぶん違うような気がするのですが・・・)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("A1").Address Then
  If Target.Value = "全部A" Then
    Range("A2:A5").Value = "A"
  End If
End If

End Sub

【7723】Re:入力規則のリストの配列操作
発言  あらやん  - 03/9/16(火) 13:50 -

引用なし
パスワード
   INA さん返信ありがとうございます。

そうですね、下記だと、直接"A"を書き込んでいるだけになるので、
「入力規則でリスト化したデータのN番目を取得」という操作が分からないですよね。

>Private Sub Worksheet_Change(ByVal Target As Range)
>
>If Target.Address = Range("A1").Address Then
>  If Target.Value = "全部A" Then
>    Range("A2:A5").Value = 「入力規則でリスト化した1番目のデータ」
>  End If
>End If
>
>End Sub

で導ければうれしいのですが。

【7724】Re:入力規則のリストの配列操作
回答  INA  - 03/9/16(火) 13:58 -

引用なし
パスワード
   入力規則のリストは、コンボボックス(ListIndex)のように取得できないので、
Range("A2:A5").Value に表示された値をキーワードに、
リスト範囲をFindメソッドで検索しては、いかがでしょうか?

以下は、セルA2の値で、セル範囲B1:B5を Findメソッドで検索し、
見つかったセルのアドレスを表示するサンプルです。

Private Sub CommandButton1_Click()
Dim FindData As Variant

Set FindData = Worksheets("Sheet1").Range("B1:B5").Find(Range("A2").Value)

MsgBox FindData.Address

End Sub

【7731】Re:入力規則のリストの配列操作
お礼  あらやん  - 03/9/16(火) 14:54 -

引用なし
パスワード
   なるほど、やはり取得はできないのですね。
これを元に組み直してみたいと思います。
INAさん、どうもありがとうございました。

>入力規則のリストは、コンボボックス(ListIndex)のように取得できないので、
>Range("A2:A5").Value に表示された値をキーワードに、
>リスト範囲をFindメソッドで検索しては、いかがでしょうか?
>
>以下は、セルA2の値で、セル範囲B1:B5を Findメソッドで検索し、
>見つかったセルのアドレスを表示するサンプルです。
>
>Private Sub CommandButton1_Click()
>Dim FindData As Variant
>
>Set FindData = Worksheets("Sheet1").Range("B1:B5").Find(Range("A2").Value)
>
>MsgBox FindData.Address
>
>End Sub

【7734】Re:入力規則のリストの配列操作
回答  BOTTA  - 03/9/16(火) 15:39 -

引用なし
パスワード
   あらやんさん、INAさん、こんにちは。
Split関数で入力規則設定部分のリストを配列に格納する。
という方法は使えませんか?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyAry As Variant
MyAry = Split(Range("A2:A5").Validation.Formula1, ",")
  If Target.Address = Range("A1").Address Then
    Select Case Target.Value
      Case "全部A"
        Range("A2:A5").Value = MyAry(0)
      Case "全部B"
        Range("A2:A5").Value = MyAry(1)
      Case "全部C"
        Range("A2:A5").Value = MyAry(2)
    End Select
  End If
End Sub

【7738】Re:入力規則のリストの配列操作
お礼  あらやん  - 03/9/16(火) 16:25 -

引用なし
パスワード
   なるほど、Formula1をsplitするのですね。気づきませんでした。
確かに、この方法ならいけそうです。
BOTTA さんありがとうございます。


>あらやんさん、INAさん、こんにちは。
>Split関数で入力規則設定部分のリストを配列に格納する。
>という方法は使えませんか?
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>Dim MyAry As Variant
>MyAry = Split(Range("A2:A5").Validation.Formula1, ",")
>  If Target.Address = Range("A1").Address Then
>    Select Case Target.Value
>      Case "全部A"
>        Range("A2:A5").Value = MyAry(0)
>      Case "全部B"
>        Range("A2:A5").Value = MyAry(1)
>      Case "全部C"
>        Range("A2:A5").Value = MyAry(2)
>    End Select
>  End If
>End Sub

12966 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free