2

特定の日付が日付の範囲内にあるかどうかを調べようとしています。日付の範囲は次のとおりです。

01/01/2013
11/02/2013
29/03/2013
20/05/2013
01/07/2013
05/08/2013
02/09/2013
14/10/2013
11/11/2013
25/12/2013
26/12/2013

VBAコードは次のとおりです。

  ' Format Holiday Rows '
        With ConfigData.Range("B8:B18")
            Set holidays = .Find(s1.Cells(row_count, 1))

            If Not holidays Is Nothing Then
                MsgBox s1.Cells(row_count, 1)
            End If
        End With

上記のコードでは、ポップアップする最初の MsgBox に「11/01/2013」と表示されます。その値は範囲内にないため、これはまったく意味がありません。

注: ConfigData.Range("B8:B18") は、上記の日付の範囲を参照します。

また: このコードは、s1.Cells(row_count, 1) の値をインクリメントする for ループ内にあります。2013 年 1 月 1 日から 2013 年 12 月 31 日まで

4

4 に答える 4

2

シリーズの暦日が休日リスト内にあることを確認したいだけの場合は、次を使用することもできますvlookup

Dim strFound As String

On Error Resume Next
strFound = Application.Vlookup(s1.Cells(row_count, 1), .Range("B8:B18"), 1, 0)
If IsError(strFound) Then
   MsgBox "Not Found"
Else
'-- Found
End If
On Error GoTo 0
于 2013-01-22T00:51:47.507 に答える
0

Excel ではアメリカの日付形式が使用されていることに注意してください。つまり、mm/dd/yyyy であり、.Find() 関数を適切に機能させるのは少し難しい場合があります。Excelが探しているものをうまく提供できるように、変数が適切にフォーマットされていることを確認してください。

Dim strdate As String
Dim aCell As Range

strdate = ActiveSheet.Cells(1,1)
strdate = Format(strdate, "Short Date")
On Error Resume Next
    Set aCell = Cells.Find(What:=CDate(strdate), After:=Range("A1"), LookIn:=xlFormulas , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If rCell Is Nothing Then
    MsgBox("Date cannot be found. Try Again")
End If
End Sub

もちろん、日付の書式設定で発生する厄介なことがたくさんありますが、これは、探している日付が "Short Date" 形式であると仮定しています。

于 2013-08-13T21:21:36.330 に答える
0

次のコードは私にとってはうまくいきます:

Sub thing()

    Dim cell As Range, _
        holidays As Range

    For Each cell In Range("D1:D365")
        With Range("A1:A11")
            Set holidays = .Find(cell.Value, LookIn:=xlValues, lookat:=xlWhole)

            If Not holidays Is Nothing Then
                Debug.Print cell.Value
            End If
        End With
    Next cell

End Sub

これが機能しない場合は、セルの書式設定に問題がある可能性が高いことをお勧めします。日付セルの 1 つを選択します。すぐに表示されるウィンドウ (Alt+F11、次に Excel の Ctrl+G) に移動し、? Selection.Value2入力して Enter キーを押します。それは数値(〜41000)を返しますか?

または、完全に新しいシートに日付を再入力して (最初の数を手動で入力して下にドラッグします。書式設定もコピーされるため、コピー アンド ペーストしないでください)、もう一度やり直してください。これにより、潜在的な問題として、少なくとも奇妙なフォーマットが取り除かれます。

于 2013-01-21T23:06:59.223 に答える