0

以下のような日付値を含む配列arr1があるとします。

Arr1(50)=( "9/3/2012 4:57:02 AM"、 "22/3/2012 5:57:02 AM"、 "9/5/2012 8:57:02 AM"、 "9 / 3/2011 4:57:02 AM ")

編集

 Dim CellCount
 Dim Arr(10)

 CellCount=0
 Do Untill arr(CellCount)="" And Ubound(Arr)>9

  If CStr(arr(CellCount) < arr(CellCount+1)) Then

    MsgBox(arr(CellCount)&"is good")

   Else

     MsgBox(arr(CellCount +1)&"is bad")
     Exit Do

   End if

CellCount=CellCount+1
Loop

さて、ループ手法を使用せずに、Arr1()の日付値が昇順であるかどうかを確認する直接的な方法はありますか?

ありがとう、

4

2 に答える 2

1

いいえ、最初の反例(最後の反例である可能性があります)まで/までの要素をチェックする必要があるためです。

于 2012-12-15T20:30:31.670 に答える
1

彼はあなたの質問に答えています。あなたは尋ねました、ループなしでソートされているかどうかを見つける方法はありますか? 彼はノーと言った。あなたの目、私の目はそれが分類されているかどうかを見ることができます。しかし、Excel /コンピューターがコレクション要素を経由せずにそうすることをどのように期待しますか?

データが配列内にある場合、その要素をループする必要があります。それが明確であることを願っています。

だから私が言える最高の

  • 必要に応じて、カンマ区切り文字でバリアントに分割します。ただし、Array()は要素を1Dバリアントに入れることができるため、必要ありません。
  • Rangeトランスポーズを使用してダンプします
  • シートの並べ替え方法/関数を使用して、範囲全体を並べ替えます

    --->これでソートされたことがわかります。

  • 次に、トランスポーズしてバリアント配列に戻します

この方向に進むためのコードスニペット:

Option Explicit

    Sub omgArraySort()
       Dim inputArray As Variant
       Dim outputArray As Variant
       Dim upperB as Long

       inputArray = Array("9/3/2012 4:57:02 AM","22/3/2012 5:57:02 AM", _ 
                          "9/5/2012 8:57:02 AM","9/3/2011 4:57:02 AM")
       '-- sorted array
       outputArray = sortRange(inputArray)

          upperB = UBound(iArray, 1) '-- for 1D array you may also use UBound(iArray)
          If (Err.Number <> 0) Then '-- if there's an error, it's erro code is > 0
            MsgBox "Dates sorted, not empty"
          End If
    End Sub

    '-- dump into sheet and sort in the sheet and dump back into the array
    Function sortRange(ByVal iArray As Variant) As Variant
       Dim rngSort as Range
       Dim i As Long

       Set rngSort = WorkSheets(1).Range("B2")
       i = Ubound(iArray,1)

       With rngSort.Resize(i)
          .Value = WorksheetFunction.Transpose(iArray)
          .Sort rngSort, xlDescending, Header:=xlNo
          sortRange = .Value              
       End With
    End Function

シートからコードへのトラフィックに関しては、大量のデータを処理しているときにパフォーマンスが低下する可能性があります。

そして、信頼性のあるSOの誰かが答えるとき(例えば、エッケハルトの答え)、あなたは注意を払わなければならないことを知っておいてください。彼らは適切な理由もなくそれを言いません。

于 2012-12-20T16:23:05.553 に答える