1

私はしばらくの間、この特定の問題に取り組んできましたが、明らかに非常に単純なものが欠けています。Excel のダイナミック レンジに基づいて配列を作成し、個々の要素を使用して別の配列と比較しようとしています。添付されたコードの唯一の問題は、空の要素が引き続き表示されることです。任意のガイダンスをいただければ幸いです。私の全体的なコードの一部が添付されています。

Sub Test_Again()
Dim R As Long
Dim C As Long
Dim List() As Variant
Dim i As Integer

List = Sheets("Sheet11").Range("A2:A17").Value

For R = 1 To UBound(List, 1) ' First array dimension is rows.
    For C = 1 To UBound(List, 2) ' Second array dimension is columns.
        Debug.Print List(R, C)
    Next C
Next R

ReDim List(UBound(List, 1))    
    Do Until i = UBound(List)
               If List(i) = Now() Then                                      
                          End If
               i = i + 1
    Loop
End Sub
4

1 に答える 1

2

を使用しない限り、法線Redimは配列をクリアしますRedim Preserve。ただし、ヘルプによると:

Preserve キーワードを使用すると、配列の最後の次元のみをサイズ変更でき、次元数はまったく変更できません。たとえば、配列に次元が 1 つしかない場合、その次元は最後で唯一の次元であるため、その次元のサイズを変更できます。ただし、配列に 2 つ以上の次元がある場合は、最後の次元のサイズのみを変更して、配列の内容を保持することができます。

したがって、あなたの場合、Redimここでは役に立ちません。2 次元配列を 1 次元配列に転送する場合は、代わりに手動で行う必要があります。

Sub Test_New()
    Dim lRow As Long, lCol As Long
    Dim vListSource() As Variant, vListTarget() As Variant

    'Assign soure array
    vListSource = Sheets("Sheet11").Range("A2:A17").Value

    'Show full content for debug
    For lRow = LBound(vListSource) To UBound(vListSource) ' First array dimension is rows.
        For lCol = LBound(vListSource, 2) To LBound(vListSource, 2) ' Second array dimension is columns.
            Debug.Print vListSource(lRow, lCol)
        Next lCol
    Next lRow

    'Transfer array to one dimension
    ReDim vListTarget(LBound(vListSource) To UBound(vListSource))
    For lRow = LBound(vListSource) To UBound(vListSource)
        vListTarget(lRow) = vListSource(lRow, LBound(vListSource, 2))
    Next lRow

    'Your check code
    For lRow = LBound(vListTarget) To UBound(vListTarget)
        If vListTarget(lRow) = Now() Then
            'Do something here
        End If
    Next lRow
End Sub

これにより、範囲/配列の最初の行が 1 次元配列にコピーされ、これがさらなる処理に使用されます。

ただし、コードと質問から、それを1次元に再縮小する利点はわかりません.2次元配列のループを簡単に実行でき、最初の唯一の列を見るだけです。

于 2013-02-14T10:53:36.923 に答える