[[20151016115835]] 『コンボボックスの連携について』(wish) ページの最後に飛ぶ

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

 

『コンボボックスの連携について』(wish)

コンボボックスの連携について教えてください。

[[20090923194642]] のものが現在理想としているものに近いのですが、初心者であまり理解ができず・・・
下記のような構文がすでに存在していて

コンボボックスを3つ(cmb締日・cmb支払方法・cmb回収条件)増やす予定です。
【リストの場所】
締日→支払シートc2:c207(重複あり)
支払方法→支払シートd2:d207(重複あり)
回収条件→支払シートe2:e207(重複なし)

締日〜支払方法の条件選択から回収条件が表示されるようにしたいのですが・・・


Private Sub btn入力_Click()
Dim lastRow As Long
    With Worksheets("管理")
        lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
        .Cells(lastRow, 2) = Me.cmb申請内容.Text
        .Cells(lastRow, 4) = Me.cmb登録区分.Text
        .Cells(lastRow, 5) = Me.txt得意先本社.Text
        .Cells(lastRow, 6) = Me.txt本社フリガナ.Text
        .Cells(lastRow, 7) = Me.txt代表者氏名.Text
        .Cells(lastRow, 8) = Me.txt本社郵便番号.Text
        .Cells(lastRow, 9) = Me.txt本社所在地.Text
        .Cells(lastRow, 10) = Me.cmb経営体1.Text
        .Cells(lastRow, 11) = Me.cmb経営体2.Text
        .Cells(lastRow, 13) = Me.cmb施設コード.Text
        .Cells(lastRow, 15) = Me.txt電話番号.Text
        .Cells(lastRow, 16) = Me.txtFAX番号.Text
        .Cells(lastRow, 17) = Me.cmb新規開業.Text
        .Cells(lastRow, 18) = Me.txt開業時期.Text
        .Cells(lastRow, 19) = Me.txt診療科.Text
        .Cells(lastRow, 20) = Me.txt取引先営業所または施設.Text
        .Cells(lastRow, 21) = Me.txt郵便番号.Text
        .Cells(lastRow, 22) = Me.txt取引先所在地.Text
        .Cells(lastRow, 23) = Me.cmb医療機器販売業区分.Text
        .Cells(lastRow, 24) = Me.txt許可または届出番号.Text
        .Cells(lastRow, 25) = Me.cmb医薬品販売業区分.Text
        .Cells(lastRow, 26) = Me.txt許可番号.Text
        .Cells(lastRow, 27) = Me.txt電話番号2.Text
        .Cells(lastRow, 28) = Me.txtFAX番号2.Text
        .Cells(lastRow, 29) = Me.cmb継続取引有無.Text
        .Cells(lastRow, 30) = Me.txt年間見込金額.Text
        .Cells(lastRow, 31) = Me.cmb回収条件.Text

    End With
    Unload Me
End Sub

Private Sub Cancel_Click()
    Unload Me
 End Sub

Private Sub cmd郵便番号検索_Click()
    CreateObject("Shell.Application").ShellExecute "http://www.post.japanpost.jp/zipcode/"
End Sub

Private Sub cmd郵便番号検索2_Click()
     CreateObject("Shell.Application").ShellExecute "http://www.post.japanpost.jp/zipcode/"
End Sub

Private Sub txt年間見込金額_Change()
    txt年間見込金額 = Format(txt年間見込金額, "\\#,###")
End Sub

Private Sub UserForm_Initialize()
    Me.cmb申請内容.RowSource = Worksheets("Sheet14").Range("A1:A3").Address(external:=True)
    Me.cmb登録区分.RowSource = Worksheets("Sheet14").Range("b1:b3").Address(external:=True)
    Me.cmb経営体1.RowSource = Worksheets("Sheet14").Range("c1:c4").Address(external:=True)
    Me.cmb経営体2.RowSource = Worksheets("Sheet14").Range("d1:d51").Address(external:=True)
    Me.cmb施設コード.RowSource = Worksheets("Sheet14").Range("e1:e138").Address(external:=True)
    Me.cmb新規開業.RowSource = Worksheets("Sheet14").Range("f1:f2").Address(external:=True)
    Me.cmb医療機器販売業区分.RowSource = Worksheets("sheet14").Range("g1:g3").Address(external:=True)
    Me.cmb医薬品販売業区分.RowSource = Worksheets("sheet14").Range("g1:g2").Address(external:=True)
    Me.cmb継続取引有無.RowSource = Worksheets("sheet14").Range("h1:h2").Address(external:=True)

End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


??

[[20151015095006]] 『コンボボックスの複数設置について』(hisae) 
(通りすがりんご) 2015/10/16(金) 12:49


 たぶん、ハンドル名違うけど、同じ人??
 ちょくちょく変えないでいただければ、回答しやすいなぁ。

 本題ですが、
 >締日→支払シートc2:c207(重複あり) 
 >支払方法→支払シートd2:d207(重複あり) 
 >回収条件→支払シートe2:e207(重複なし) 
 実際のリスト見せてもらっていいですか?

(稲葉) 2015/10/16(金) 14:18


ハンドルネームすみません。その日の気分で変えてしまって、気をつけます。

シート名【支払】
C       D        E
末日締め   手形        末日締め翌々月20日起算サイト90日手形
末日締め   手形        末日締め翌々月末日起算サイト90日手形
末日締め   手形        末日締め翌月末日起算サイト120日手形
15日締    手形       15日締め翌々月5日起算サイト90日手形
15日締    手形       15日締め翌々月5日起算サイト90日手形
15日締    手形       15日締め翌月10日起算サイト90日手形
19日締    手形       19日締め翌月10日起算106日手形
19日締    手形       19日締め翌月10日起算106日手形
20日締    手形       20日締め翌月10日起算サイト70日手形
20日締    手形       20日締め翌月10日起算サイト100日手形
20日締    小切手・現金   20日締め翌月20日現金・小切手
20日締    小切手・現金   20日締め翌月末日現金・小切手
当月末日   小切手・現金   当月末日現金・小切手
末日締め   小切手・現金   末日締め翌月10日現金・小切手
末日締め   小切手・現金   末日締め翌月15日現金・小切手
末日締め   小切手・現金   末日締め翌月20日現金・小切手
末日締め   小切手・現金   末日締め翌月25日現金・小切手
末日締め   小切手・現金   末日締め翌月末日現金・小切手
末日締め   小切手・現金   末日締め翌々月末日現金・小切手
末日締め   小切手・現金   末日締め3ヶ月後末日現金・小切手
代金引換   代金引換      代金引換
15日締    振込        15日締め翌月末日振込
15日締    振込        15日締め翌々月5日振込
15日締    振込        15日締め翌々月末日振込
15日締    振込        15日締め3ヶ月後末日振込
20日締    振込        20日締め当月末日振込
20日締    振込        20日締め翌月5日振込
20日締    振込        20日締め翌月10日振込

(wish) 2015/10/16(金) 14:37


 サンプルです。
 3つくらいなら、難しいこと考えずに力技で行けそうでしたので、そっちのサンプルです。
 組み込みは自分で行ってください。

 1)新しいユーザーフォームにコンボボックスを3つおいてください。
 2)作成したユーザーフォームのコード画面を表示して、以下のコードを入れてください
 3)ユーザーフォームを表示させてください。
 4)最初はComboBox1しか選択できません。
 5)ComboBox1を選択すると、ComboBox2に新しいリストが表示されます。
 6)ComboBox2を選択すると、ComboBox3に新しいリストが表示されます。
 7)6)の状態で、ComboBox1を変更すると、ComboBox3の使用ができなくなります。

    Option Explicit
    Private Cmbs As Object
    Private lv1 As String
    Private lv2 As String
    Private lv3 As String

    '//ユーザーフォーム読み込み時の処理
    Private Sub UserForm_Initialize()
        '//重複のなしのリストを作成
        Call SetCmbs

        ComboBox1.List = Cmbs.keys
        ComboBox2.Enabled = False
        ComboBox3.Enabled = False
    End Sub

    Private Sub ComboBox1_Change()
        lv1 = ComboBox1.Text
        ComboBox3.Enabled = False
        If Cmbs.exists(lv1) Then
            With ComboBox2
                .Enabled = True
                .List = Cmbs(lv1).keys
            End With
        End If
    End Sub

    Private Sub ComboBox2_Change()
        lv1 = ComboBox1.Text
        lv2 = ComboBox2.Text
        If Cmbs(lv1).exists(lv2) Then
            With ComboBox3
                .Enabled = True
                .List = Cmbs(lv1)(lv2).keys
            End With
        End If
    End Sub
    Private Sub SetCmbs()
        Dim r As Range

        '//モジュールレベル変数に、Dictionaryオブジェクトを作成
        Set Cmbs = CreateObject("Scripting.Dictionary")

        With Sheets("支払")
            For Each r In .Range("C2", .Cells(.Rows.Count, "C").End(xlUp))
                lv1 = r.Value
                lv2 = r.EntireRow.Range("D1").Value
                lv3 = r.EntireRow.Range("E1").Value
                If Not Cmbs.exists(lv1) Then Cmbs.Add lv1, CreateObject("Scripting.Dictionary")
                If Not Cmbs(lv1).exists(lv2) Then Cmbs(lv1).Add lv2, CreateObject("Scripting.Dictionary")
                If Not Cmbs(lv1)(lv2).exists(lv3) Then Cmbs(lv1)(lv2).Add lv3, CreateObject("Scripting.Dictionary")
            Next r
        End With
    End Sub

 うまく説明できるかわかりませんが、Cmbs(Dictionaryオブジェクト)を器にみたてて図示しました。
 大きなCmbsという器に
 中くらいの締め日ごとの名前をつけた器を必要な分だけ入れて、
 小さな支払い方法ごとの名前をつけた器を必要な分だけ入れ、
 その中に回収条件という具を盛り付けました。

 使うときは(イメージで説明します)
 Cmbs.Keysと指定すると、中くらいの器の名前リストが作られ、
 Cmbs("20日締め").Keysと指定すると、小さい器の名前リストが作られ、
 Cmbs("20日締め")("手形").Keysと指定すると、具のリストが表示されると言った感じです。

 │                  Cmbsオブジェクト(Dictionaryオブジェクト)              ││
 │                                                     ││
 ││            20日締め             ││       15日締め        ││
 ││                              ││                    ││
 │││   手形   ││ 小切手・現金 ││   振込   ││││   手形   ││   振込   │││
 │││70日手形   ││翌月20日   ││当月末     ││││翌々90日手形 ││翌月末     │││
 │││100日手形  ││翌月末日    ││翌月5日    ││││翌月90日手形 ││翌々月5日   │││
 │││        ││        ││翌月10日   ││││        ││翌々月末日   │││
 │││        ││        ││翌月10日   ││││        ││3か月後    │││
 ││└────────┘└────────┘└────────┘││└────────┘└────────┘││
 │└──────────────────────────────┘└────────────────────┘│
 └──────────────────────────────────────────────────────┘

 人に説明するの、難しい・・・
(稲葉) 2015/10/16(金) 15:52

あの・・・・・すごいとしか言えません
何とかわからないなりに埋め込み無事に作動しています。ありがとうございました。
(wish) 2015/10/16(金) 16:30

 うーんリンク先見てなかったら先生方の投稿で、恥ずかしい限り。
 おそらく、4つ以上増やしたいって時にメンテナンス出来ないでしょうから、
 是非リンク先の手法を取り入れていただけたらいいですね。
(稲葉) 2015/10/16(金) 16:47

コメント返信:

[ 一覧(最新更新順) ]


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