Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2016)
検索したデータをリストボックスに表示し、そのデータに追記したい
投稿日時: 21/04/18 15:07:55
投稿者: Lunascape

 初心者です。
検索フォームを作成し、あいまい検索をしてリストボックスに結果を表示するようにしました。
その検索したデータに対してオプションボタンを利用してデータの追記をしたいと考えています。
今の現状では検索で出てきたデータではなく、リストボックス内のデータの場所が反映されてしまい、どのようにすれば検索で出てきたデータに修正ができるでしょうか?
検索時のコードについてはネットで調べたのを参考にしたので正直理解しきれていません。
 
 
 
↓オプションボタンの追記のコード

Private Sub cmd修正_Click()
    Dim ID As Long
    ID = リスト1.ListIndex
   MsgBox "修正しました"
        If OptionButton1 = True Then
        Worksheets("データ").Cells(ID + 1, 7).Value = "○"
        ElseIf OptionButton2 = True Then
        Worksheets("データ").Cells(ID + 1, 7).Value = "-"
        End If
        If OptionButton4 = True Then
        Worksheets("データ").Cells(ID + 1, 8).Value = "○"
        ElseIf OptionButton3 = True Then
        Worksheets("データ").Cells(ID + 1, 8).Value = "-"
        End If
        If OptionButton6 = True Then
        Worksheets("データ").Cells(ID + 1, 9).Value = "○"
        ElseIf OptionButton5 = True Then
        Worksheets("データ").Cells(ID + 1, 9).Value = "-"
        End If
        If OptionButton8 = True Then
        Worksheets("データ").Cells(ID + 1, 10).Value = "○"
        ElseIf OptionButton7 = True Then
        Worksheets("データ").Cells(ID + 1, 10).Value = "-"
        End If
        If OptionButton9 = True Then
        Worksheets("データ").Cells(ID + 1, 11).Value = "○"
        ElseIf OptionButton11 = True Then
        Worksheets("データ").Cells(ID + 1, 11).Value = "-"
        End If
End Sub

 
↓検索時のコード
Private Sub cmd検索_Click()
    Dim lastRow As Long
    Dim myData, myData2(), myno
    Dim i As Long, j As Long, cn As Long
 
    With Worksheets("データ")
         lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        myData = .Range(.Cells(1, 1), .Cells(lastRow, 12)).Value
    End With

   ReDim myData2(1 To lastRow, 1 To 12)
    For i = LBound(myData) To UBound(myData)
        If myData(i, 2) Like "*" & txtリスト検索.Value & "*" And myData(i, 5) Like "*" & TextBox1.Value & "*" Then
            cn = cn + 1
            myData2(cn, 1) = myData(i, 1)
            myData2(cn, 2) = myData(i, 2)
            myData2(cn, 3) = myData(i, 3)
            myData2(cn, 4) = myData(i, 4)
            myData2(cn, 5) = myData(i, 5)
            myData2(cn, 6) = myData(i, 6)
            myData2(cn, 7) = myData(i, 7)
            myData2(cn, 8) = myData(i, 8)
            myData2(cn, 9) = myData(i, 9)
            myData2(cn, 10) = myData(i, 10)
            myData2(cn, 11) = myData(i, 11)
            myData2(cn, 12) = myData(i, 12)



        End If
    Next i

    With リスト1
        .ColumnCount = 12
        .ColumnWidths = "20;50;50;100;100;100;20;20;20;20;20;20"
        .List = myData2
    End With
    
    End Sub

回答
投稿日時: 21/04/18 17:47:35
投稿者: simple

元のシートの行番号を持つ列を、ListBoxに追加して持てばどうですか?

回答
投稿日時: 21/04/18 17:52:11
投稿者: simple

ユーザーフォームを使う必要性があるのかどうか、
つまり、ワークシートでフィルタを掛けたうえで、
それに直接修正したほうがよいのではないか、
とも思いますが、経緯等が不明なので、一応、質問にコメントしました。

回答
投稿日時: 21/04/18 18:31:20
投稿者: WinArrow
投稿者のウェブサイトに移動

前回のスレで、ヒントを掲示しましたが、検証してみましたか?
 
再掲

引用:
ヒント1
  
ListIndexは、0から始まります。セルの0行は存在しないから、+1すること。
リストボックスのRowSourceに設定したセル範囲を利用すること。
  
With Range(Me.Listbox1.RowSource)
    .Cells(ID + 1, 8).Value = "○"
End With

トピックに返信