1

個人の銀行口座に対して Excel ベースのツールを実行しようとしています。Import3 つの列 ( DateInformation、 ) を持つシートにいくつかの銀行業務をインポートしましたAmountImport各行を別のシートで既に確立されているコレクションと比較したいと思いDataます。

各行をテストする関数を作成し (日付、必要に応じて情報、必要に応じて金額に従って)、操作がデータ コレクションに存在しない場合は 0 を返し、データ コレクション内の行番号を返します。

Function CompareRows(SingleRng As Range, CollectionRange As Range) As Integer
    'SingleRange : Date / Info / amount in on line
    'CollectionRange : Date / info / amount / ....(others) on many rows
    'Return 0 if SingleRng is not in CollectionRange, row number of data 
                                                  'collection if present.

    Dim row As Range
    For Each row In CollectionRange
        MsgBox row.Value

       ' If SingleRng(1, 1) = Rng_1(1, 1).Value Then
       '     CompareRows = irw
       ' Else
       '     irw = irw + 1
       ' End If
    Next
End Function

この関数はImportシートの各行に対してループされますが、最初に各日付要素をループすることはできません。このループは、 の各要素に対して実行されますCollectionRange。やってみましFor Each row In CollectionRange.Rowsたが、MsgBoxアフターがうまくいきません。各行でこのループを作成するにはどうすればよいですか?

4

1 に答える 1

0

行の範囲をループするのFor Each row In CollectionRange.Rowsは正しいです。

MsgBox row.Valueうまくいかない理由row.Valueは配列です。配列内の値の 1 つを表示するには、次のようなものを使用しますrow.Cells(1,1).Value

とはいえ、このような範囲のループは非常に遅くなる可能性があることに注意してください。コードのパフォーマンスに満足できない場合は、AutoFilter、 、FindおよびVariant Arrays

于 2012-08-25T05:10:09.003 に答える