[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ListBoxの日付検索方法について教えて下さい。』(VBA勉強中)
CommandButton37を押すことによってワークシート(DATA)から(WAREA)へコピーして ListBox1に表示させています。 表示項目は左から ”番号””日付””担当者””名前1””名前2””名前3””方式””カテゴリー””時間1””時間2” と表示させています。 ここで”日付”ですが、2008/06/01〜2008/06/30までランダム(番号順のため)に表示させています。 そこで、TextBox1に日付(2008/06/10)と入力してCommandButton2を押すと2008/06/10のみのデータを 表示させるにはどうしたらよいでしょうか? ListBox1に表示させる構文は次の通りです。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Private Sub CommandButton37_Click() Worksheets("DATA").Range("A1").CurrentRegion.Copy Worksheets("WAREA").Range("A1") With ListBox1 .ColumnHeads = True .ColumnCount = 10 .ColumnWidths = "30;80;55;60;60;60;65;45;45;" '.Text = "DATA!A2:J100" .RowSource = "WAREA!A2:J100" End With End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− まったくの素人なので大先輩方、よろしくお願いいたします。
Private Sub CommandButton2_Click() Dim myRow As Long With Application.WorksheetFunction If .CountIf(Worksheets("WAREA").Range("A2:J100"), Me.TextBox1.Text) > 0 Then myRow = .Match(CLng(DateValue(Me.TextBox1.Text)), Worksheets("WAREA").Range("B1:B100"), 0) Worksheets("WAREA").Range("A1:j1").Copy Destination:=Worksheets("WAREA").Range("A101") Worksheets("WAREA").Range("A" & myRow & ":j" & myRow).Copy Destination:=Worksheets("WAREA").Range("A102") Me.ListBox1.RowSource = "WAREA!A102:J102" Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With End Sub 一例。 ColumnHeads を生かすため、別の場所にRowSource用のデータを 作成する例。WAREA!A101:J102に見出しと対象データのみ書き出し、 それをRowSourceにしてます。 他にも方法はあると思われます。 (みやほりん)(-_∂)b
ご指導、ありがとうございます。 早速に修正しましたが、うまく動かないので再度、質問がてらご指導お願いいたします。 TextBox48⇒日付(2008/06/10)を入力 Private Sub CommandButton44⇒検索コマンド "WAREA"のC列に日付データがあります。 このC列には下の様な日付データが格納してあります。 2008/6/6 2008/6/8 2008/6/8 2008/6/10 2008/6/10 2008/6/11 2008/6/11 2008/6/12 2008/6/12 2008/6/15 2008/6/15 2008/6/16 2008/6/16 2008/6/16 2008/6/26 2008/7/1 2008/7/1 ここでTextBox48に2008/06/16と入力してPrivate Sub CommandButton44で検索をかけると 2008/06/15のデータ1つのみの表示になってしまいます。 TextBox48に2008/06/16と入力したときに6/16の3つのデータを表示するにはどうすればよいでしょうか 長々と申し訳ありませんが、ご指導お願いいたします。
構文は以下の通りです。
Private Sub CommandButton44_Click()
Dim myRow As Long
With Application.WorksheetFunction If .CountIf(Worksheets("WAREA").Range("A2:J100"), Me.TextBox48.Text) > 0 Then myRow = .Match(CLng(DateValue(Me.TextBox48.Text)), Worksheets("WAREA").Range("C2:C100"), 0) Worksheets("WAREA").Range("A1:J1").Copy Destination:=Worksheets("WAREA").Range("A101") Worksheets("WAREA").Range("A" & myRow & ":J" & myRow).Copy Destination:=Worksheets("WAREA").Range("A102") Me.ListBox1.RowSource = "WAREA!A102:J102" Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With
End Sub
Dim myRow As Long With Application.WorksheetFunction If .CountIf(Worksheets("WAREA").Range("A2:J100"), Me.TextBox1.Text) > 0 Then myRow = .Match(CLng(DateValue(Me.TextBox1.Text)), Worksheets("WAREA").Range("B1:B100"), 0) Worksheets("WAREA").Range("A1:j1").Copy Destination:=Worksheets("WAREA").Range("A101") Worksheets("WAREA").Range("A" & myRow & ":j" & myRow).Copy Destination:=Worksheets("WAREA").Range("A102") Me.ListBox1.RowSource = "WAREA!A102:J102" Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With End Sub 一例。 ColumnHeads を生かすため、別の場所にRowSource用のデータを 作成する例。WAREA!A101:J102に見出しと対象データのみ書き出し、 それをRowSourceにしてます。 他にも方法はあると思われます。 (みやほりん)(-_∂)b
ご指導、ありがとうございます。 早速に修正しましたが、うまく動かないので再度、質問がてらご指導お願いいたします。 TextBox48⇒日付(2008/06/10)を入力 Private Sub CommandButton44⇒検索コマンド "WAREA"のC列に日付データがあります。 このC列には下の様な日付データが格納してあります。 2008/6/6 2008/6/8 2008/6/8 2008/6/10 2008/6/10 2008/6/11 2008/6/11 2008/6/12 2008/6/12 2008/6/15 2008/6/15 2008/6/16 2008/6/16 2008/6/16 2008/6/26 2008/7/1 2008/7/1 ここでTextBox48に2008/06/16と入力してPrivate Sub CommandButton44で検索をかけると 2008/06/15のデータ1つのみの表示になってしまいます。 TextBox48に2008/06/16と入力したときに6/16の3つのデータを表示するにはどうすればよいでしょうか 長々と申し訳ありませんが、ご指導お願いいたします。 構文は以下の通りです。
Private Sub CommandButton44_Click()
Dim myRow As Long
With Application.WorksheetFunction If .CountIf(Worksheets("WAREA").Range("A2:J100"), Me.TextBox48.Text) > 0 Then myRow = .Match(CLng(DateValue(Me.TextBox48.Text)), Worksheets("WAREA").Range("C2:C100"), 0) Worksheets("WAREA").Range("A1:J1").Copy Destination:=Worksheets("WAREA").Range("A101") Worksheets("WAREA").Range("A" & myRow & ":J" & myRow).Copy Destination:=Worksheets("WAREA").Range("A102") Me.ListBox1.RowSource = "WAREA!A102:J102" Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With End Sub
>Worksheets("WAREA").Range("C2:C100") なぜ C2 から? MATCH関数で求められるのが何か、Helpで確認してください。 (ExcelVBAのヘルプではありません。Excelのヘルプです。) それはさておき。 ランダム=複数存在の可能性は思いつきませんでした。 それとビミョーにこちらのイメージと違いますねぇ。 ボタン押下時点でWAREAのデータをどうにかしちゃっても良いのなら、下記。 Private Sub CommandButton2_Click() ' Dim myRow As Long With Application.WorksheetFunction If .CountIf(Worksheets("DATA").Range("C2:C100"), Me.TextBox1.Text) > 0 Then Worksheets("WAREA").Cells.ClearContents Worksheets("DATA").Range("A1").AutoFilter _ Field:=3, _ Criteria1:=">=" & Me.TextBox1.Text, _ Operator:=xlAnd, _ Criteria2:="<=" & Me.TextBox1.Text Worksheets("DATA").Range("A1").CurrentRegion.Copy Destination:=Worksheets("WAREA").Range("A1") ' myRow = Worksheets("WAREA").Range("A1").CurrentRegion.Rows.Count ' Me.ListBox1.RowSource = "TEMP!A2:J" & myRow Worksheets("DATA").Range("A1").AutoFilter Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With End Sub WAREAシートはそのままにしておく必要があり、TEMPというシートを一つ追加してよいなら、下記。 Private Sub CommandButton2_Click() Dim myRow As Long With Application.WorksheetFunction If .CountIf(Worksheets("WAREA").Range("C2:C100"), Me.TextBox1.Text) > 0 Then Worksheets("TEMP").Cells.ClearContents Worksheets("WAREA").Range("A1").AutoFilter _ Field:=3, _ Criteria1:=">=" & Me.TextBox1.Text, _ Operator:=xlAnd, _ Criteria2:="<=" & Me.TextBox1.Text Worksheets("WAREA").Range("A1").CurrentRegion.Copy Destination:=Worksheets("TEMP").Range("A1") myRow = Worksheets("TEMP").Range("A1").CurrentRegion.Rows.Count Me.ListBox1.RowSource = "TEMP!A2:J" & myRow Worksheets("WAREA").Range("A1").AutoFilter Else Exit Sub: Rem textbox1にリストに対する値がなかった場合の処理 End If End With End Sub TEMPシートを追加した上で試してください。 あと、オブジェクト名の編集も。 (みやほりん)(-_∂)b
『ListBoxの日付検索方法について教えて下さい。』(VBA勉強中)
返信時は以前の内容を消さないように編集してください。 消された内容を復活しました。 (みやほりん)(-_∂)b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.