よねさんのWordとExcelの小部屋 なんでも掲示板

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

ツリー一括表示

Nomal 複数条件(部分一致) /斎藤 (19/08/17(Sat) 12:14) #13394
Nomal Re[1]: 複数条件(部分一致) /斎藤 (19/08/17(Sat) 16:45) #13395
  └Nomal Re[2]: 複数条件(部分一致) /よねさん (19/08/19(Mon) 08:51) #13396
    └Nomal Re[3]: 複数条件(部分一致) /斎藤 (19/08/24(Sat) 20:09) #13397
      └Nomal Re[4]: 複数条件(部分一致) /よねさん (19/08/25(Sun) 13:16) #13398
        └Nomal Re[5]: 複数条件(部分一致) /斎藤 (19/08/27(Tue) 19:45) #13399


親記事 / ▼[ 13395 ]
■13394 / 親階層)  複数条件(部分一致)
□投稿者/ 斎藤 -(2019/08/17(Sat) 12:14:26)
    いつも拝見させて頂いております。
    テキストボックスとコンボボックスを用いて条件結果をリストボックスに表示するVBAを作成しようとしていますが、うまくできません。

    以下のVBAを実行し、「検索」ボタンで実行しようとすると「書き込みできません」というメッセージが表示されます。
    どこで記述を間違えているかご教示いただけますと幸いです。

    '----------------------------------------------
    '検索を実行します。部分一致検索を行っています。
    Private Sub CmdSearch_Click()
    Dim lastRow As Long
    Dim myData, myData2()
    Dim i As Long, j As Long, cn As Long
    Dim key1 As String, key2 As String, key3 As String, key4 As String

    '顧客コード
    If TextBox3.Value = "" Then key1 = "*" Else key1 = "*" & TextBox3.Value & "*"
    '顧客名
    If TextBox4.Value = "" Then key2 = "*" Else key2 = "*" & TextBox4.Value & "*"
    '顧客カナ
    If TextBox5.Value = "" Then key3 = "*" Else key3 = "*" & TextBox5.Value & "*"
    '顧客分類
    Dim ListNo As Long
    ListNo = ComboBox1.ListIndex
    If ListNo < 0 Then
    key4 = "*"
    Else
    key4 = ComboBox1.List(ListNo)
    End If

    '検索するデータを配列 myData に格納しています。
    With Worksheets("顧客マスタ")
    '--- 2018/9/27修正しました
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    myData = .Range(.Cells(1, 1), .Cells(lastRow, 8)).Value
    End With

    '配列 myData の中で検索で一致したデータを配列 myData2 に格納しています。
    ReDim myData2(1 To lastRow, 1 To 3)
    For i = LBound(myData) To UBound(myData)

    If myData(i, 2) Like key1 And myData(i, 3) Like key2 And myData(i, 4) Like key3 And myData(i, 8) Like key4 Then
    cn = cn + 1
    myData2(cn, 1) = myData(i, 2) '顧客コード
    myData2(cn, 2) = myData(i, 3) '顧客名
    myData2(cn, 3) = myData(i, 8) '顧客分類
    End If
    Next i

    '検索で一致したデータをリストボックスに表示します。
    With ListBox1
    .ColumnCount = 3
    .ColumnWidths = "50;130;50"
    .List = myData2
    '.RowSource = "顧客マスタ!B2:H" & lastRow
    '.ColumnHeads = True
    End With

    End Sub

    '----------------------------------------------
    'ユーザーフォームの初期設定:リストの全データを表示しています。
    Private Sub UserForm_Initialize()
    Dim lastRow As Long
    Dim myData, myData2()
    Dim i As Long, j As Long

    '顧客分類シートから参照します。
    Dim lr As Long
    With Worksheets("顧客分類")
    lr = .Range("B" & Rows.Count).End(xlUp).Row
    End With
    With ComboBox1
    .RowSource = "顧客分類!B3:B" & lr
    End With

    '顧客マスタシートから参照します。
    With Worksheets("顧客マスタ")
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    myData = .Range(.Cells(1, 1), .Cells(lastRow, 8)).Value

    End With

    ReDim myData2(1 To lastRow, 1 To 3)
    For i = LBound(myData) To UBound(myData)
    myData2(i, 1) = myData(i, 2)
    myData2(i, 2) = myData(i, 3)
    myData2(i, 3) = myData(i, 8)
    Next i

    With ListBox1
    .ColumnCount = 7
    .ColumnWidths = "50;130;0;0;0;0;50"
    .List = myData2
    .RowSource = "顧客マスタ!B2:H" & lastRow
    .ColumnHeads = True
    End With

    End Sub

[ □ Tree ] 返信/引用返信 削除キー/

▲[ 13394 ] / ▼[ 13396 ]
■13395 / 1階層)  Re[1]: 複数条件(部分一致)
□投稿者/ 斎藤 -(2019/08/17(Sat) 16:45:53)
    すみません、自己解決しました。
    ListとRowSouceは同時に使用できないみたいなのですが、何か方法はないでしょうか。
[ 親 13394 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13395 ] / ▼[ 13397 ]
■13396 / 2階層)  Re[2]: 複数条件(部分一致)
□投稿者/ よねさん -(2019/08/19(Mon) 08:51:59)
    > ListとRowSouceは同時に使用できないみたいなのですが、何か方法はないでしょうか。
    
    ListとRowSourceとを両方使う必要はないと思います。
    同時に使用できないのなら、どちらかに統一すればよいのではないのでしょうか?
    Excel(エクセル) VBA入門:リストボックスの使い方
    http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform03.html
    の[リストボックスへセル範囲のデータを表示する]に書いていますように、
    Listプロパティを利用するときには、一旦、配列(Variant)に入れ、配列からListBoxへ入れています。
    

[ 親 13394 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13396 ] / ▼[ 13398 ]
■13397 / 3階層)  Re[3]: 複数条件(部分一致)
□投稿者/ 斎藤 -(2019/08/24(Sat) 20:09:28)
    よね 様

    ご返信頂きありがとうございます。
    参照先を拝見しました。
    Listプロパティを使用した場合、見出しが作成できますでしょうか。
    RowSourceを使用した場合、絞り込み検索ができなくなり(ボタンを押しても反応がない?)、ラベルで代用しようと思いましたが、何か方法があればご教示頂けますでしょうか。
    (参照する列はA,D,F,H等不連続です。)

    また、1つのフォームに検索項目を付け、条件一致しリストに表示された項目をダブルクリックして「顧客名」や「住所」等の各項目(テキストボックスやコンボボックス)に反映させたいのですが、最上部の検索行しか反映できません。

    【検索項目】
    ・顧客コード(テキスト)
    ・顧客名(テキスト)
    ・顧客カナ(テキスト)
    ・顧客分類(コンボ)
    ↓↓↓↓検索結果↓↓↓
    ◎リストボックスに表示

    ※上記内容を同じフォーム内にある各項目に反映

    よろしくお願い致します。

[ 親 13394 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13397 ] / ▼[ 13399 ]
■13398 / 4階層)  Re[4]: 複数条件(部分一致)
□投稿者/ よねさん -(2019/08/25(Sun) 13:16:08)
[ 親 13394 / □ Tree ] 返信/引用返信 削除キー/

▲[ 13398 ] / 返信無し
■13399 / 5階層)  Re[5]: 複数条件(部分一致)
□投稿者/ 斎藤 -(2019/08/27(Tue) 19:45:02)
    ご返信頂きありがとうございます。
    ご教授頂いた方法で試してみたいと思います。

    また不明点があればご質問させて頂きますので、
    よろしくお願い致します。
[ 親 13394 / □ Tree ] 返信/引用返信 削除キー/


Pass/

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

- Child Tree -