| 
    
     |  | こんにちは。かみちゃん です。 
 >>検索終了しComboBox1の▼をクリックリスト内から選択したときに
 >>A列のデータしか今はComboBoxに載りませんが、
 >>一応3列目まで表示させるには
 >>どの数字をさわればいいでしょうか?
 >>なお、転記はA列のみでOKなのですが
 
 1.選択肢としては、ColumnCountで指定した列数(A列〜C列)を表示
 2.選択したら、ComboBoxには、TextColumnで指定した列(1列のみ)の値を表示
 3.ComboBoxの値としては、TextColumnで指定した列とは別にBoundColumnで指定した列(1列のみ)の値とする。
 ということになっています。
 
 そこで、yasuさんの「一応3列目まで表示させる」という要件を実現するた
 めには、以下のように修正する必要があります。
 実現できるのは、UserForm4のコードのみです。
 UserForm3やUserForm2では、難しいです。
 ★の部分を修正する必要がありますので、そこまでして、「一応の要件」を
 満たす必要があるのかよく考えてください。
 
 考え方としては、A列〜C列の値をComboBoxに表示する場合に、さらに1列を
 ComboBoxに追加して、それを表示用の列とします。
 以下のコードでは、左から1列目が表示用の列として、残り3列をA列〜C列
 の値を割り当てるようにしています。
 
 '==================================================
 '■UserForm4モジュール
 '==================================================
 
 'コード.xlsのA1セル〜A列の値の入っている最終行のC列までをComboBoxへ追加
 ' 検索条件部分一致を選択肢とする
 ' 部分一致は全角半角、大文字小文字を無視
 Private Sub CommandButton1_Click()
 Dim WB1 As Workbook
 Dim WB2 As Workbook
 Dim strFileName As String
 Dim ws As Worksheet
 Dim lngRow As Long
 Dim rng As Range
 Dim ComboBox_Row As Long
 
 Set WB1 = ThisWorkbook
 strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 If strFileName <> "False" Then
 Application.ScreenUpdating = False
 'すでに開いているかどうかをチェックする
 If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
 MsgBox strFileName & vbCrLf & "を開きます"
 Set WB2 = Workbooks.Open(strFileName)
 Else
 Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
 End If
 WB1.Activate
 
 Set ws = WB2.Sheets("Sheet1")
 Set rng = ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
 ComboBox_Row = 0
 With Me.ComboBox1
 .ColumnCount = rng.Columns.Count + 1 '★
 .ColumnWidths = "40 pt;0 pt;0 pt;0 pt" '★
 .TextColumn = 1 '★
 .BoundColumn = 1 '★
 For lngRow = 1 To rng.Rows.Count
 If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
 Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
 '     .AddItem rng.Cells(lngRow, 1).Value
 '     .List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
 '     .List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
 .AddItem rng.Cells(lngRow, 1).Value & " " & _
 rng.Cells(lngRow, 2).Value & " " & _
 rng.Cells(lngRow, 3).Value '★
 .List(ComboBox_Row, 1) = rng.Cells(lngRow, 1).Value '★
 .List(ComboBox_Row, 2) = rng.Cells(lngRow, 2).Value '★
 .List(ComboBox_Row, 3) = rng.Cells(lngRow, 3).Value '★
 ComboBox_Row = ComboBox_Row + 1
 End If
 Next
 '   .ColumnWidths = "20 pt;20 pt;20 pt"
 '   .BoundColumn = 1
 End With
 Application.ScreenUpdating = True
 Else
 MsgBox "コード.xlsのファイル選択を中止しました"
 End If
 End Sub
 
 
 Findメソッドを使う場合
 
 ComboBox_Row = 0
 With Me.ComboBox1
 .ColumnCount = rng.Columns.Count + 1 '★
 .ColumnWidths = "40 pt;0 pt;0 pt;0 pt" '★
 .TextColumn = 1 '★
 .BoundColumn = 1 '★
 
 '---検索条件部分一致検索(全角・半角区別なし、大文字・小文字区別なし)
 
 Dim c As Range
 Dim FirstAddress As String
 
 Set c = rng.Columns(2).Find(Me.TextBox1.Value, , xlValues, xlPart, , , False, False)
 If Not c Is Nothing Then
 FirstAddress = c.Address
 Do
 .AddItem c.Offset(, -1).Value & " " & _
 c.Value & " " & _
 c.Offset(, 1).Value '★
 .List(ComboBox_Row, 1) = c.Offset(, -1).Value '★
 .List(ComboBox_Row, 2) = c.Value '★
 .List(ComboBox_Row, 3) = c.Offset(, 1).Value '★
 '     .AddItem c.Offset(, -1).Value
 '     .List(ComboBox_Row, 1) = c.Value
 '     .List(ComboBox_Row, 2) = c.Offset(, 1).Value
 ComboBox_Row = ComboBox_Row + 1
 Set c = rng.FindNext(c)
 Loop While Not c Is Nothing And c.Address <> FirstAddress
 End If
 '---検索条件部分一致検索 ここまで
 
 '   .ColumnWidths = "20 pt;20 pt;20 pt"
 '   .BoundColumn = 1
 End With
 
 >こんなのもあり色々試したのですがダメでした
 >
 > コンボボックスのリストには、複数の列を表示することが可能です。
 
 見当違いです。それは、選択肢の複数列表示ですから、すでに対応してあります。
 そこまでして、「一応の要件」を満たしたいのは、なぜなのでしょうか?
 一歩一歩積み上げていかないと、わけわからなくなると思うのですが・・・
 「一応」「とりあえず」「念のため」は手戻りの原因です。
 それを覚悟の上でしたらいいのですが、心配です。
 
 
 |  |