2012-03-07 5 views
0

のこの配列で最も早い日付値を返します私の配列。VBAは、エクセル:</p> <p>私がで見つかった最も早い日付を返すようにBronzeDateをしたいと思います:私はコーディングとこの問題を修正するにはわからないといくつかの問題を抱えている文字列

これは、プリントアウトの例です:

Possible Bronze Date : 6/6/2011 
    Possible Bronze Date : 10/5/2011 
    Possible Bronze Date : 10/5/2011 
    Possible Bronze Date : 12/5/2011 
    Possible Bronze Date : 10/5/2011 
    Possible Bronze Date : 6/6/2011 
    Possible Bronze Date : 11/5/2011 
    Possible Bronze Date : 1/16/2012 
    Possible Bronze Date : 6/6/2011 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    Possible Bronze Date : 
    [BRONZE] 0 

CODING:

Dim Bronze(1 To 100) As String 
... 
     Dim c As Integer 
     c = 1 
     Do Until c = 20 
      Debug.Print "  Possible Bronze Date : " & Bronze(c) 
      c = c + 1 
     Loop 

     ' EXTRACT THE MIN VALUES 
     Dim BronzeDate As String 
     BronzeDate = Application.WorksheetFunction.Min(Bronze) 

     ' PRINT OUT VALUE FOR EACH DATES 
     Debug.Print "  [BRONZE] " & BronzeDate 

答えて

0

私は問題があなたのブロンズ配列は文字列配列であるということだと思います。

ブロンズアレイをバリアント型に変更すると、これで問題が解決するはずです。

2

文字列の日付を個別に変換する以外に選択肢がないと思います。

このコードをテストして正しい日付を出力しました。注:あなたの配列のミディアムエンド日付をリトルエンディアンに切り替えましたので、私のバージョンのExcelで正しく処理されます。

Sub ExtractMinDate() 

    Dim Bronze() As Variant 
    Dim DateCrnt As Date 
    Dim DateMin As Date 
    Dim InxBronze As Long 

    Bronze = Array("6/6/2011", "5/10/2011", "5/10/2011", "1/12/2011", "5/10/2011", _ 
       "6/6/2011", "5/11/2011", "16/1/2012", "5/6/2011") 

    DateMin = 0 

    For InxBronze = LBound(Bronze) To UBound(Bronze) 
    If IsDate(Bronze(InxBronze)) Then 
     DateCrnt = Bronze(InxBronze) 
     If DateMin = 0 Or DateMin > DateCrnt Then 
     DateMin = DateCrnt 
     End If 
    End If 
    Next 

    Debug.Print DateMin 

End Sub 
関連する問題