[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『簡易リストボックスの応用』(ヨネ)
こんにちは。以下のデータから簡易リストボックスの作り方で良い方法があれば教えてください。 Sheet1に以下のようなデータがあるとします。
Sheet1
A B C 1 分類 種類 産地 2 果物 いちご 千葉 3 果物 りんご 青森 4 果物 りんご 長野 5 果物 みかん 愛媛 6 果物 みかん 静岡 7 果物 マンゴー 沖縄 8 果物 パパイヤ 沖縄 9 野菜 きゅうり 千葉 10 野菜 レタス 長野 11 野菜 レタス 栃木 12 肉 牛肉 山形 13 肉 牛肉 兵庫 14 肉 豚肉 鹿児島 15 肉 豚肉 栃木 16 肉 鶏肉 群馬
Sheet2に
セルA1 には 分類のリストとして 果物、野菜、肉を 入力規則として設定したい。 セルB1 には セルA1で選択したものの絞込みされた 種類のリストを出したい。 例えば A1に 果物を 選択していたら B1には いちご、りんご、みかん、マンゴー、パパイヤ を入力規則として設定したい。 セルC1 には セルA1,セルB1で選択したものの絞込みされた 産地のリストを出したい 例えば A1に 果物、B1に りんごを 選択していたら C1には 青森、長野 を 入力規則として設定したい。
こちらの [[20040826180010]] 入力規制』(TK) を参考に考えてみたのですが、わかりませんでした。 よろしくお願い致します。
項目別にリストを作成し、名前を定義します。 産地は各品目に関連しているようなので、その品目毎に名前を定義します。 ↓のようなリストにして、挿入→名前→作成で上端行で名前を定義します。 分類 果物 野菜 肉 いちご りんご みかん 果物 いちご きゅうり 牛肉 千葉 青森 愛媛 野菜 りんご レタス 豚肉 長野 静岡 肉 みかん 鶏肉 マンゴー パパイヤ
各セルにはデータ→入力規則で、リストの元の値に下のように指定します。 A1:=分類 B1:=INDIRECT(A1) C1:=INDIRECT(B1) (Hatch)
(Hatch)さんありがとうございます。 ただ このSheet1のデータは、分類、種類、産地ともに今後、増えていくものなので 事前にリストを作って置くことができないのです。 Sheet1の状態から、一気にリストを作ることはできないでしょうか。(ヨネ)
近くのスレで似たようなものを作ったのでちょっと編集してみました。 [[20060920215636]]『入力規則のリストに先頭が数字の名前が付けられない場合』(えでたか)
Sheet2のシートタブを右クリックし、コードの表示を選択。
出てきた画面に下記コードを貼り付けて閉じる。
(ROUGE)
'----
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim tbl, i As Long, ky, lst As String
With Target
If .Count > 1 Then Exit Sub
If .Row <> 1 Then Exit Sub
If .Column > 3 Then Exit Sub
End With
With Sheets("Sheet1") '<--ここ
tbl = .Range("A2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
End With
Select Case Target.Column
Case 1
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tbl, 1)
If Not IsEmpty(tbl(i, 1)) And Not .exists(tbl(i, 1)) Then _
.Add tbl(i, 1), Empty
Next
If .Count > 0 Then
For Each ky In .Keys
lst = lst & "," & ky
Next
Else
lst = ""
End If
End With
Case 2
If Target.Offset(, -1).Value = "" Then Exit Sub
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tbl, 1)
If tbl(i, 1) = Target.Offset(, -1).Value And Not IsEmpty(tbl(i, 2)) And _
Not .exists(tbl(i, 2)) Then _
.Add tbl(i, 2), Empty
Next
If .Count > 0 Then
For Each ky In .Keys
lst = lst & "," & ky
Next
Else
lst = ""
End If
End With
Case 3
If Target.Offset(, -1).Value = "" Then Exit Sub
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tbl, 1)
If tbl(i, 1) = Target.Offset(, -2).Value And tbl(i, 2) = Target.Offset(, -1).Value _
And Not IsEmpty(tbl(i, 3)) And Not .exists(tbl(i, 3)) Then .Add tbl(i, 3), Empty
Next
If .Count > 0 Then
For Each ky In .Keys
lst = lst & "," & ky
Next
Else
lst = ""
End If
End With
End Select
If lst = "" Then: Target.Validation.Delete: Target.Value = Empty: Exit Sub
If InStr(1, lst, Target.Text) = 0 Then Target = Empty
With Target.Validation
.Delete
.Add xlValidateList, , , lst
End With
End Sub
すごい!!できました(^○^)。感激です! どうもありがとうございました。(ヨネ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.