0

以下の問題について、CR で誤ってレビューを依頼しましたが、適切な場所ではないと言われたので、同じ質問を差し上げます。

一人では答えを見つけられません。この非常に単純なコードが 2 つの異なる結果を返すのはなぜですか?!?! 気が狂う...

Function FirstDay(t As String) As Boolean

d = DateSerial(Left(t, 4), Mid(t, 5, 2), Right(t, 2)) - 1
FirstDay = False
Var = Application.Match(d, Worksheets("Diary").Columns(1), 0)
If Not IsError(Var) Then
   FirstDay = True
End If

'this only to check if direct match Val to cell() retrieve the same result
If d = Sheets("Diary").Range("A12") Then Debug.Print "Yes" Else Debug.Print "no"

End Function

FirstDay("20161107")範囲内で関数を呼び出しsh("Diary").(columns(1))ます

(date,01/01/2016,07/02/2016,06/03/2016,03/04/2016,08/05/2016,05/06/2016,03/07/2016,07/08/2016,04/09/2016,02/10/2016,06/11/2016,04/12/2016)

Var は 12 である必要がありますが、Error2042 を取得すると FirstDay = false になりますが、すぐにウィンドウに文字列が表示される場合

If d = Sheets("Diary").Range("A12") Then Debug.Print "Yes" Else Debug.Print "no"

「はい」を取得

誰かが追加内容を教えてもらえますか? ありがとうファブリツィオ

4

1 に答える 1

1

Lookup_value には、数値、テキスト、または論理値を指定できます。日付ではありません。したがって、日付値を数値に変換します。

Var = Application.WorksheetFunction.Match(CDbl(d), Worksheets("Diary").Columns(1), 0)
于 2016-11-07T13:46:48.737 に答える