2017-07-19 11 views
0

最大2つまたは3つの異なる変数(バリアント)を使用しようとしています。彼らはすべての日付です。 私は以下のコードを持っていますが、私はかなり間違っています。 人々が私を助けてくれますか? ここにコードがあります。Excel - VBAループ後の最大変数の検索

Dim QA As Integer: QA = 0  
For Each j_WS In Array(WS_1, WS_2, WS3) 

Select Case QA 
Case 0: j = 1 
Case 1: j = 2 
Case 2: j = 3 
End Select 

o = 14 + j * 3 
Dim WA1 As Variant 
Dim WA2 As Variant 
Dim WA3 As Variant 
Gorev = Cells(p, o).Address 
SlideNo = Cells(p, 34).Address 
Egitim_Adi = Cells(2, 3).Address 
Dim Satir_bul As Variant 


If Not IsError(Satir_bul) Then 
    Satir_bul = Worksheets(WS_All).Evaluate("=Match(" & Egitim_Adi & "&" & SlideNo & "&" & Gorev & ", '" & j_WS & "'!A:A&'" & j_WS & "'!B:B&'" & j_WS & "'!C:C, 0)") 
Else 
    WA1 = "" 
    WA2 = "" 
    WA3 = "" 
End If 


If j = 1 And Worksheets(WS_All).Cells(8, 3).Value = "Yeni Egitim" Or j = 1 And Worksheets(WS_All).Cells(8, 3).Value = "Tanitim/Reklam" Then 
    WA1 = Worksheets(j_WS).Cells(Satir_bul, 7).Value 
Else: WA1 = Worksheets(j_WS).Cells(Satir_bul, 9).Value 
    If j = 2 And Worksheets(WS_All).Cells(8, 3).Value = "Yeni Egitim" Or j = 1 And Worksheets(WS_All).Cells(8, 3).Value = "Tanitim/Reklam" Then 
     WA2 = Worksheets(j_WS).Cells(Satir_bul, 7).Value 
    Else: WA2 = Worksheets(j_WS).Cells(Satir_bul, 9).Value 
     If j = 3 And Worksheets(WS_All).Cells(8, 3).Value = "Yeni Egitim" Or j = 1 And Worksheets(WS_All).Cells(8, 3).Value = "Tanitim/Reklam" Then 
      WA3 = Worksheets(j_WS).Cells(Satir_bul, 7).Value 
     Else: WA3 = Worksheets(j_WS).Cells(Satir_bul, 9).Value 


     End If 
    End If 
End If 


QA = QA + 1 
Next j_WS 


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 
     Else 
      MAX_DATE = "" 
     End If 
    End If 
End If 


Worksheets(WS_All).Cells(p, 26).Value = MAX_DATE 


Next p 

あなたが見ることができるように、ほとんどすべてのこととWA1、WA2及びWA3は全ての日付で、私はMAX_DATEがあまりにも日付になりたいような事前に定義された整数または何かがあります。

WA1、WA2およびWA3がループ内で正しく表示されません。 WA1は最初のループでは正確に、WA2は2番目のループで正しいようになりますが、たとえば2番目のループではWA1が空になります。このため、MAX_DATEの値が正しく機能していません。

答えて

0

まず、これらの変数をDateと宣言します。コンパイラは<演算子を使ってそれらを比較する方法を知っています。ここでは、コードです:

Dim d1, d2, d3 As Date 

d1 = "06-01-2017" 
d2 = "05-01-2018" 
d3 = "01-01-1900" 'This can be some default value, you can't pass here empty string ("") 

If d1 > d2 Then 
    MsgBox ("a") 
Else 
    MsgBox ("b") 
End If 

あなたがDate代わりのVariantを使用している場合は、メッセージがそれ以外baになります。

デフォルト値を渡す必要があるので、コードの私の提案を参照してください。むしろ "値の低い"日付なので、最大値には影響しません:)

+0

実際、日付の種類はここで私の主な問題ではありません。主な問題は、最初のループの後、MAX_DATE自体が正しくリセットされないということです。それは私が信じる最初の価値に固執しました。 – Bildircin13

+0

ループの外にあるので。 –

+0

しかし、それは3つの異なるWA値に依存するので、WAループの外側にあるはずです。 – Bildircin13

関連する問題