プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
検索結果をListviewさせる方法おしえてくれませんでしょうか
添付ファイルのように
TextBox1 と TextBox2があります。
その下にListviewがあります。

生年月日
TextBox1 から TextBox2まで
という感じでコマンドボタンを押したら
Listviewに表示させたいのです。
おしえてくれませんでしょうか

「検索結果をListviewさせる方法」の質問画像

A 回答 (1件)

ぶどうとさん、おはようございます。


ご質問を読むとListviewに表示する以前に問題が少々あるように思います。
それは、TextBoxです。
テキストボックスに入力された文字が日付に変換できるかなどを検証する必要があります。また、(画像を見る限りシリアル値のようですが)データがシリアル値なのかも問題になるかもです。

TextBox1 から TextBox2までの(日付)範囲でリストを(F列を対象)抜き出しListviewに表示

コマンドボタンに

Dim i As Long, j As Long, cnt As Long
Dim stDate As Date, endDate As Date
Dim findRow() As Variant
'文字が日付に変換できるかなどを検証
If Not IsDate(TextBox1.Value) _
And Not IsDate(TextBox2.Value) Then
MsgBox ("日付を正しく入力してください")
Exit Sub
End If
'ListView1をクリア
ListView1.ListItems.Clear
'TextBox1と2を比較(大小を決める)
If CDate(TextBox1.Value) <= CDate(TextBox2.Value) Then
stDate = CDate(TextBox1.Value)
endDate = CDate(TextBox2.Value)
Else
stDate = CDate(TextBox2.Value)
endDate = CDate(TextBox1.Value)
End If
'条件に一致した行番号を配列に入れる
'ソートが必要な場合、行番号配列作成前に
For i = 4 To Cells(Rows.Count, "F").End(xlUp).Row
If stDate <= Cells(i, "F").Value _
And endDate >= Cells(i, "F").Value Then
ReDim Preserve findRow(cnt)
findRow(cnt) = i
cnt = cnt + 1
End If
Next
'配列の値を元にシートのリストをListView1に表示
For i = 0 To UBound(findRow)
With ListView1.ListItems.Add
.Text = i + 1
For j = 1 To 4 'カラム分繰り返す
.SubItems(j) = Cells(findRow(i), "B").Offset(, j).Value
Next j
End With
Next i

カウント変数が分かり難かったらごめんなさいね
シートオブジェクトは指定していませんので明示してください。
    • good
    • 0
この回答へのお礼

お休みのところ本当にありがとうございました。
思い通りに作成していただきありがとうございました。
ListViewは検索してもなかなか思うようなのが
なく困っておりました。これをもとに
幅がひろがるとおもいます。
ありがとうございました。

お礼日時:2020/12/31 09:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A