• 締切済み

マクロで検索

こんにちは。 以下のような,マクロをVBAで作りたいと考えています。アドバイスをお願い致します。 A列の2行目からA列の100行目まで,2002/5/1から100日間の日付が入力してあります。フォームに任意の日付(2002/5/1から100日間)を入力する。入力した日付と同じ日付をA列から検索し,表示する。オートフィルターを使うのでしょうか?よくわかりません。ご存知の方がおられましたら,教えてください。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

>フォームに任意の日付を・・・ フォームはユーザーフォームとして回答します。 ユーザーフォームにTextBox1、TextBox2、CommandButton1があり、TextBox1に入力した年月日をCommandButton1を押すことで検索し、あればTextBox2に同じ日付を出力する手順を考えてみます。 CommandButton1のClick時にTextBox1のテキストとセルの日付を照合することになります。 この場合は、求めるセルは最大1個で、対象も100個のセルなので全部の日付を照合しても問題ないでしょう。 下では参考に 『Find』を使っています。速度的には一番速いかもしれません。 ただ、この場合、比較方法に困ります。フォームのテキストボックスは文字列であり、シートのセル内は日付形式のはずです。 これは文字列と数値を照合することになります。下ではテキストボックスの文字列を日付形式に変換しています。 『Find』で見つかったら表示しています。検索する場合は、検索したキーの日付の右のセルを表示したりします。 この時は、『検索結果セル.Offset(0,1)』のようにしてフォームに持ってきます。 何件も見つける必要がある場合は、『FindNext』を使います。 状況によっては、フィルタやソートなども効果を発揮します。 作成例です。ユーザーフォームのコードウインドウに貼り付けます。 Dim 元シート As Worksheet Dim 検索範囲 As Range Private Sub CommandButton1_Click()   Dim 入力年月日 As String   Dim 年月区切り As Integer, 月日区切り As Integer   Dim 年 As Integer, 月 As Integer, 日 As Integer   Dim 検索結果セル As Range   入力年月日 = TextBox1.Text   年月区切り = InStr(1, 入力年月日, "/")   月日区切り = InStr(年月区切り + 1, 入力年月日, "/")   年 = Val(Mid(入力年月日, 1, 年月区切り - 1))   月 = Val(Mid(入力年月日, 年月区切り + 1, 月日区切り - 年月区切り))   日 = Val(Mid(入力年月日, 月日区切り + 1, Len(入力年月日) - 月日区切り))   Set 検索結果セル = 検索範囲.Find(DateSerial(年, 月, 日))   If Not 検索結果セル Is Nothing Then     '見つかった場合     TextBox2.Text = 検索結果セル.Text   Else     '見つからなかった場合     TextBox2.Text = "???"   End If End Sub Private Sub UserForm_Initialize()   Set 元シート = Worksheets("Sheet1")   Set 検索範囲 = 元シート.Range("A2:A100") End Sub

関連するQ&A