[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『連続したドロップリスト』(困ったさん)
いつも、いろいろ勉強させてもらってます。 ただいま、商品管理表を作っております。 下記の表があるとします。
sheet1(商品リスト)
A B C
1 メーカー 商品名 単価
2 AAA 釘 200
3 AAA ネジ 300
4 BBB 釘 150
A列〜C列まで商品と名前を付けます。
続いて
sheet2(メーカーリスト)
A
1 メーカー
2 AAA
3 BBB
A列をメーカーと名前を付けます。
上記の表を検索sheetでA1セルに入力規則からメーカーでリスト化し A2セルでメーカー名が一致した商品名だけをドロップリストに表示が したいのですが、他の質問を見るとメーカーごとで名前を付ける方法 は見つけたのですが出来れば商品リストを利用したいと思っております。 是非、どなたか教えてください。 (使用しているのはExcel2003 OSはWindowsXP です。)
A2 を、入力規則でリストのドロップダウンで選択させて B列 以降を、A2 で出てきたメーカー名に対応したものを、ドロップダウンで選ばせる って事でしょうか? そうであれば、こちらの純丸さんの方法が参考になりませんか? [[20051024111302]]『リストから選択』(若葉マーク) (キリキ)(〃⌒o⌒)b
今、見てきました。 参考になりますね〜。なんとかなりそうです。 ちょっとやってみます。 キリキさんありがとうございました。 (困ったさん)
う〜ん。キリキさんに教えてもらったものでメーカごとのリストを作って ボスにお伺いをかけたのですが希望通りではないと言われてしまいました。 商品リストは一つしかなくそこから検索させろとの事です。 自分で考えればいいのに・・・。 とボヤいてもしょうがないのでもう一度知恵を貸していただけないでしょうか? キリキさんのおっしゃるように A2 を、入力規則でリストのドロップダウンで選択させて B列 以降を、A2 で出てきたメーカー名に対応したものを、ドロップダウンで選ばせる って事でしょうか? その通りの内容なのです。 ぜひ、どなたか教えてください。
出先なので、携帯から、、、
上司は、なぜリストを一つと? そしてそのリストはどのようなリスト? どのようなシート構成? 作業列を作成することは可能? 等々。。。
分からないことだらけですよ^^;
もう少し具体的に書いた方が、レスが付きやすいかな〜
(キリキ)(〃⌒o⌒)b
衝突したけど、そのままペッタンコ。 我儘上司君が、コレを認めてくれないと、全部無駄レスになります。 Sheet1の商品リストが、A1のメーカーをキーとして並び替えられている事が絶対条件となります。
Sheet1のA1セルに 基準 、A1:A4に メーカー検索 と名前を付けます。 検索用のシートのB2セルにリストを設定するとして、 元の値を、 =OFFSET(基準,MATCH($A$2,メーカー検索,FALSE)-1,1,COUNTIF(メーカー検索,$A$2),1) とすれば、出来るはず??? (sin)
vbaで一発 1) Sheet2のシート名タブを右クリック「コードの表示」 2) 右空白部分に下記コードを貼り付けxをクリックしてエクセルに戻る 3) 一度他のシートを選択してからSheet2を選択しなおす
Private dic As Object 'Sheet2モジュール内でのGlobal 変数の宣言
Private Sub Worksheet_Activate() 'シートを選択時に実行
Dim a, i As Long
With Sheets("Sheet1")
If .Range("a1").CurrentRegion.Rows.Count < 2 Then
'Sheet1にデータがない場合は object 変数 dic をNothing にして終了
Set dic = Nothing
Exit Sub
End If
Set dic = CreateObject("Scripting.Dictionary")
'Object 変数 dic に Dictionary object を参照させる
a = .Range("a2",.Range("a" & Rows.Count).End(xlUp)).Resize(,2).Value
'配列 a にsheet1のA,B列の値を格納(処理高速化のため)
End With
For i = 1 To UBound(a,1) ' 配列内のループ開始
If Not dic.exists(a(i,1)) Then
' 配列1列目の値がdictionary objectに無ければ、key に格納, item に2列目の文字
dic.add a(i,1), a(i,2)
Else
' 既に存在すれば、itemの文字列にカンマ","をつけて2列目の文字列を繋げる
dic(a(i,1)) = dic(a(i,1)) & "," & a(i,2)
End If
Next
With Range("a2:a10").Validation ' A2:A10へ入力規則の設定
.Delete ' 削除
.Add type:=xlValidateLlist, formula1:=Join(dic.keys,",")
' formula1 に dic.keyを","でつなげた文字列を挿入
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)' セルに変化が生じた時に実行
If dic Is Nothing then Exit Sub 'dic object がNothingの場合は終了
With Target.Cells(1,1)
If .Column <> 1 Then Exit Sub 'A列以外は無視
If .Row = 1 Then Exit Sub '一行目も無視
.Offset(,1).Value = "" ' B列の値をクリア
If IsEmpty(.Value) Then Exit Sub 'A列の値が Empty であれば終了
With .Offset(,1).Validation ' B列に入力規則を設定
.Delete '既に設定されていたら削除
.Add type:=xlValidateList, formula1:=dic(Target.Cells(1,1).Value)
'変更されたA列の値をdic objectで参照してitemに格納されている文字列に設定
End With
End With
End Sub
(seiya)
修正:16:30
メーカーリスト列方向へメーカーごとの商品リストを作成。
列制限のため各メーカー255アイテムまで。メーカー配列ランダム可。
商品リストシートで挿入>名前>定義
「名前」 メーカー名
「参照範囲」 =INDIRECT("商品リスト!$A2:$A"&COUNTA(商品リスト!$A:$A))
「名前」 商品名
「参照範囲」 =INDIRECT("商品リスト!$B2:$B"&COUNTA(商品リスト!$B:$B))
商品リスト
A B C
1 メーカー 商品名 単価
2 AAA 釘A1 200
3 AAA ネジA1 300
4 BBB 釘B1 150
5 AAA ボルトA1 170
6 BBB ナットB1 190
7 AAA 釘A2 210
8 AAA ネジA2 230
9 BBB 釘B2 250
10 AAA ボルトA2 270
11 BBB ナットB2 290
12 AAA 釘A3 310
13 AAA ネジA3 330
14 BBB 釘B3 350
メーカーリスト
A B C D E F G H I
1 メーカー
2 AAA 釘A1 ネジA1 ボルトA1 釘A2 ネジA2 ボルトA2 釘A3 ネジA3
3 BBB 釘B1 ナットB1 釘B2 ナットB2 釘B3
メーカーリストシートのB2へ下記数式。
=IF(COUNTIF(メーカー名,$A2)>=COLUMN(A1),INDEX(商品名,SMALL(IF(メーカー名=$A2,ROW(商品名)-1),COLUMN(A1))),"")
Enterで確定したいところを我慢して Ctrl と Shift を押しながらEnter。
B2の数式をメーカーの数だけB列へコピー、同じく、列方向右側へ同じくコピー。
各メーカーの商品名が抽出されます。
2行目以下、メーカー名の入力されている範囲を行範囲選択して
挿入>名前>作成 、左端列にチェックしてOK。
商品選択の入力規則でリストの元の値を =INDIRECT(A2) などとします。
件数によっては動作が重くなりそうではある。
(みやほりん)(-_∂)b
あららっ。今、わかりづらいかと思ってもう一度整理しようと思っていました。 逆にわかりづらくなるなと諦めて戻ってきたらこんなにたくさんのレスが。 有り難うございます。ちょっと一つ一つ確認してみます。とりあえず少々時間 を頂きます。(困ったさん)
検証しました。 全部思い通りに出来ました。 (キリキ)さん、(sin)さん、(seiya)さん、(みやほりん)さん 本当に有り難うございました。これでボスをギャフ〜ンと言わせられそうです。 本当に助かりました。
さて、 一つ質問なのですが(seiya)さんvba有り難うございます。 早速なのですがこの記述文の解説をしていただけないでしょうか? 例題では出来たのですがこれから加工するにあたり何がどうでどうなんだか ちょっとはわかるのですがって言うかほとんどわからないので是非教えて いただきたいなと・・・。 厚かましいお願いですが今後の勉強の為、宜しくお願いいたします。(困ったさん)
簡単に説明文を付けました。 Dictionary objectに付いては、VB HELP を参照してください。 (seiya)
(seiya)さん 有り難うございます。 勉強させていただきます。 なにからなにまで本当に有り難うございました。 また、ご教授いただいた皆様ありがとうございましたm(__)m また何かありましたら教えてください。 では!(困ったさん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.