[[20050518091556]] 『特定の配列をドロップダウンリストに』(田中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の配列をドロップダウンリストに』(田中)

はじめまして。お願いします。

    田中 渡辺 山田 佐藤 加藤
 東京 ○  ○     ○  ○
 大阪 ○  ○  ○  ○
 神戸 ○  ○        ○
 広島    ○  ○     ○
 沖縄       ○  ○
 東北 ○  ○        ○

上のような表があったとして、田中で○な都市をドロップダウンリストとして表示したい場合はどうすればいいのでしょうか。空白が入ってしまい上手くいかないのです。

よろしくお願いします。


 こんにちは。

 このドロップダウンリストは、どこにあるどんな種類のものですか?
 色々あるので、事細かく書かないと話が進まないと思います。
                                           BJ


申し訳ないです。

入力規則のリストを使ってドロップダウンリストを作りたいのです。

    Q  R   S  T   U  V
      田中 渡辺 山田 佐藤 加藤
 12 東京 ○  ○     ○  ○
 13 大阪 ○  ○  ○  ○
 14 神戸 ○  ○        ○
 15 広島    ○  ○     ○
 16 沖縄       ○  ○
 17 東北 ○  ○        ○

 このような状態でA1に名前のドロップダウンリスト、A2に名前ごとに可変する都市リストを入れたいのです。
 例えば名前リストで田中を選ぶと、都市リストには東京・大阪・神戸・東北が出るような感じです。
 わかりづらいかもしれないですがよろしくお願いします。


 マクロ記録を手直ししました。
 また、97だと動きません。
 (入力規則のChangeイベントが発生しないから)
 セル範囲等は、使用に合わせて手直ししてください。

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Mch As Variant, CL As Range, Str As String
    If Target.Address(0, 0) <> "A1" Then Exit Sub
    Mch = Application.Match(Range("A1").Value, Range("Q11:AA11"), 0)
    If IsError(Mch) Then Exit Sub
    Str = ""
    For Each CL In Range("Q11:Q17").Offset(, Mch - 1)
        If CL.Value = "○" Then
           Str = Str & CL.Offset(, -Mch + 1).Value & ","
        End If
    Next
    If Str = "" Then Exit Sub
    Str = Left(Str, Len(Str) - 1)
    Application.DisplayAlerts = False  '←これと
    Range("A2") = ""
    Application.DisplayAlerts = True   '←これの入れ忘れ。05.06.13
    With Range("A2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Str
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
 End Sub

 マクロ以外だとちょっと解りません。
 尚、セルA1の入力規則はご自分で行っているものとしてます。
                                             BJ

 探してきました。 川野 鮎太郎氏 作 です。
[[20050420175246]] 『入力規則のドロップダウンリスト』(Ring) 
 ↑ こういうことですよね?  (sin)

 このようにされたらどうでしょう?表の下に作業セルを配置しています。 (LOOKUP)

   A
 1 渡辺
 2 大阪

   Q   R    S    T    U    V   
12  2  田中  渡辺  山田  佐藤  加藤
13 東京  ○   ○       ○   ○
14 大阪  ○   ○   ○   ○	
15 神戸  ○   ○           ○
16 広島      ○   ○       ○
17 沖縄          ○   ○	
18 東北  ○   ○           ○
19  5   4    5    3    3    4
20      1    1    2    1    1
21      2    2    4    2    3
22      3    3    5    5    4
23      6    4   #N/A  #N/A   6
24    #REF!   6   #N/A  #N/A  #REF!
25    #REF!  #REF!  #N/A  #N/A  #REF!
26    東京   東京  大阪  東京   東京
27    大阪   大阪  広島  大阪   神戸
28    神戸   神戸  沖縄  沖縄   広島
29    東北   広島  #N/A  #N/A  東北
30    #REF!  東北  #N/A  #N/A  #REF!
31    #REF!  #REF!  #N/A  #N/A  #REF!

 Q12に=MATCH(A1,R12:V12,)
 Q19に=INDEX(R19:V19,Q12)

 R19に=COUNTIF(R13:R18,"○")として、これをV19までフィルドラッグ。
 R20に=MATCH("○",R$13:R$18,)として、これをV20までフィルドラッグ。
 R21に=MATCH("○",INDEX(R$13:R$18,R20+1):R$18,)+R20として、
 これをこれをコピーして、R21:V25に貼り付け。

 R26に=INDEX($Q$13:$Q$18,R20)として、
 これをこれをコピーして、R26:V31に貼り付け。 

 A1にデータ、入力規則、リストで、元の値に=$R$12:$V$12。

 A2にデータ、入力規則、リストで、元の値に
 =INDEX($R$26:$V$31,1,$Q$12):INDEX($R$26:$V$31,$Q$19,$Q$12)。

皆さん色々とありがとうございました。

 >BJさん
 実はマクロを触ったことがなく、書かれたマクロをどのようにしてどこに入れればいいかもわかりませんでした…
 ですが折角教えてもらったものなので、マクロのヘルプと睨めっこしながら頑張りたいと思います。

 >sinさん
 見せていただいたところ確かに同じようなものだったのですが、私が都市にしているところがそちらでは数字になっていて
 さらに中の式がSMALLとROWでその数字を管理しドロップダウンリストの数を決めているようでしたので
 自分の力ではそれを文字列でやる術を見つけることができませんでした…
 参考にさせていただいて頑張りたいと思います。

 >LOOKUPさん
 きれいにドロップダウンリストで出すことができました。ありがとうございます。
 ですが実は本来の表がこれよりも非常に大きなものであり、またそれがいくつも分かれているようなものなので
 なるべくならばその表以外にセルを使うのは1列ないし1行に止めておきたいのです…
 この出してもらったものをなんとか一つの式にまとめることができれば出すこともできそうなので
 参考にさせていただいて頑張りたいと思います。

(田中)


 sinさんが出されている私のやり方であれば、以下のような感じです。
 A1セルに氏名を入れているとした場合。
 W列を作業列として使います。

	 Q	 R	 S	 T	 U	 V	 W
  1		田中	渡辺	山田	佐藤	加藤	大阪
  2	東京	○	○		○	○	広島
  3	大阪	○	○	○	○		沖縄
  4	神戸	○	○			○	
  5	広島		○	○		○	
  6	沖縄			○	○		
  7	東北	○	○			○	

 W12=IF(COUNTIF(OFFSET($Q$12,1,MATCH($A$1,$R$12:$V$12,0),6),"○")<ROW()-11,"",INDEX($Q$1:$Q$18,SMALL(IF(($R$12:$V$12=$A$1)*($R$13:$V$18="○"),ROW($Q$13:$Q$18)),ROWS($W$12:W12))))							
 として、Shift+Ctrlキー押しながらEnterキーで確定させて配列数式にして下方にコピー。							

 挿入>名前>定義で参照範囲に =OFFSET(Sheet1!$W$12,,,COUNTIF(Sheet1!$W$12:$W$18,"?*")) を入れて、名前を 第2リスト とする。							
 A2の入力規則の入力値の種類を「リスト」、元の値に =第2リスト

 (川野鮎太郎)	

 お呼び立ていたしまして、ご足労様です。
m(__)m   (sin)					

 >川野鮎太郎さん
 わざわざ来ていただきましてありがとうございます。きちんと2つのリストとして使うことができました。
 本当にありがとうございました。

 >sinさん
 上の返事ではお名前を間違えていまして申し訳ないです。
 いろいろとありがとうございました。


 用無しですが、不具合を修正しておきました。
                       BJ

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.