2017-07-20 16 views
0

コードで問題が発生しました。私は3つの変種の間に最大値(日付)を見つけようとしていますが、それはうまく機能しません。VBA変数の日付の比較

ここにコードがあります。

If CountValues(WA1, WA2, WA3) <> CountValues(WS_1, WS_2, WS3) Then 

    MAX_DATE = "" 
     Else 

If WA1 = "" Then 
WA1 = "01.01.1990" 
End If 
If WA2 = "" Then 
WA2 = "01.01.1990" 
End If 
If WA3 = "" Then 
WA3 = "01.01.1990" 
End If 
      If WA1 >= WA2 And WA1 >= WA3 Then 
       MAX_DATE = WA1 
      Else 
       If WA2 >= WA3 And WA2 >= WA1 Then 
        MAX_DATE = WA2 
       Else 
        If WA3 >= WA2 And WA3 >= WA1 Then 
         MAX_DATE = WA3 



End If 
End If 
End If 
End If 

現在、WA1は13.11.2017に等しく、WA2およびWA3は空です。 WS_1には値がありますが、WS_1には値がありません。したがって、最初のチェックが機能しています。 F8チェックでは「WA2 =」「」と表示されます。しかし、それでもMAX_DATEは2番目のIf関数が真であるので、何もないWA2に行きますが、WA1の値を返さなければなりません。

これを修正する方法はありますか?

答えて

0

これは比較方法によるものです。空の文字列は、文字列の「より小さい」です。次の解決策を試してください:

これらの変数にはいくつかの値を割り当てます。プログラムはそれを比較することができます。空にしないでください。いくつかのデフォルト値を使用してください(たとえば、非常に古い日付、最大値を変更しない場合は、1900-01-01など)。そして、あなたの同じ質問に答えて昨日言ったように、Dateのタイプを使用してください。プログラムはそれを比較する方法を知っています。 Variantsとして日付を格納すると、間違った結果が返されます(文字列をこれらの変数に渡すので、Variantの場合は文字列比較が適用され、Dateとして保存されている場合は日付として比較されます)。

また、最大値を決定することは少しsimplierのようになります。

MAX_DATE = WA3 
If WA1 > WA2 Then 
    If WA1 > WA3 Then MAX_DATE = WA1 
Else 
    If WA2 > WA3 Then MAX_DATE = WA2 
End If 
+0

あなたの情報をありがとう、と私はコードを少し変更しました。私は彼らに分を与えた。今度はマクロがWA3を選択しました。これは01.01.1990です。私は質問のコードを編集しました。 – Bildircin13

+0

あなたはほとんどそれを正しく得ました。あなたは '日付'変数として 'WA1'などを宣言する必要があります:)それらをdelcaringした直後に、空のチェック(空の文字列は' Date'変数に代入することができません)またはこの空の文字列を割り当て、デフォルトの日付に変更します。 –

+0

値が一致しない場合は、空の部分のチェックをスキップして(日付として宣言するために)、MAX_DATEの値を ""として宣言できますか? – Bildircin13