2017-03-16 19 views
0

クライアントとIDを示すユーザーフォームに複数列のコンボボックスを生成する次のコードがあります。私は両方の列をクライアントとして生成しなければならず、複数回リストされていましたが、IDは一意です。VBA変数として複数列のコンボボックスから1つの列を使用

MyAccount = UF_Format.CB_Account.Value 

コードは現在、次のとおりです。私は新しいシートにクライアントの詳細をコピーすることができるように選択したフィルタシートを値を使用していますし、変数として選択された値を使用していますが

i = 2 

For Each c In Range("D2", Range("D" & Rows.Count).End(xlUp)) 
    CB_Account.AddItem Cells(i, 4).Value & " : " & Cells(i, 3).Value 
    i = i + 1 

Next 

コンボボックスの値が2つの列を連結しているために転倒します。実際には、私のコードがフィルタリングできるように、IDである2番目の値だけを引き出す必要があります。

ご協力いただければ幸いです。

+0

これは、列4と列3にどのような値を設定できるかによって異なります。 3列目が常に3文字であると仮定できる場合は、ユーザーは右に移動できます。列4に文字のみが含まれていることがわかっている場合は、文字を無視してパターンを一致させ、残りを取ります。簡単な方法がない場合は、セパレータを変更することができます。 '|'にする。 – z32a7ul

+0

ところで、私はこれを複数列のコンボボックスと呼んでいません。Excelシートの複数の列から連結された値だけです。 – z32a7ul

答えて

0

変数MyAccountを配列として宣言し、コロンを区切り文字としてコンボボックスの値を分割することができます。その後、配列の2番目の項目を操作できます。

Sub second_value() 
    Dim MyAccount() As String 

    MyAccount = Split(UF_Format.CB_Account.Value, " : ") 
    Debug.Print MyAccount(1) 
End Sub 
+0

列3または4に ':'を含めることができる場合を除きます。 Splitの2番目のパラメータとして ":"(スペースも含む)を指定するので、結果をトリムする必要はありません。他の効果もあります。 – z32a7ul

+0

@ z32a7ulデリミタとして「:」を使用することについて真実、私は答えを更新します。名前やIDにコロンを入れることは期待しませんが、もちろんこれを考慮する必要があります:) –

関連する問題