0

各行(ヘッダーを除く)が単一のエントリを表し、各列がフィールド(かなり標準的なもの)であるワークシートがあります。フィールドは列BBに移動します。

特定のエントリ(特定の識別フィールドの特定の値に一致するエントリ)を別のシートにコピーしたい。ただし、元のシートにあるすべてのフィールドは必要ありません。元のシートに隣接していない約10個のフィールドだけが必要です。

したがって、(有効な)行ごとに、次のようなことを行います。

for each origRow in origSheet.Rows
    if strcomp(origRow.cells(idCellNumber).value, myId, vbTextCompare) = 0 then
        copySheet.Row(copySheetRowNumber).value = origRow.Range(Cells(1), Cells(8), Cells(15), Cells(4))
        copySheetRowNumber++
    end if
next

明らかに、このコードは無効です。さらに、シートには削除される既存のデータが含まれているため、エントリ全体をコピーしてから無関係な列を削除することはできません。誰かがこれを達成するための最速の方法を提案できますか?

4

1 に答える 1

2
Dim arrSourceCols, arrDestCols
Dim x As Long

arrSourceCols = Array(1, 3, 5, 7)
arrDestCols = Array(2, 4, 8, 12)

For Each origRow In origSheet.UsedRange.Rows
    If StrComp(origRow.Cells(idCellNumber).Value, myId, vbTextCompare) = 0 Then

        For x = LBound(arrSourceCols) To UBound(arrSourceCols)
            copySheet.Cells(copySheetRowNumber, arrDestCols(x)).Value = _
                                  origRow.EntireRow.Cells(arrSourceCols(x)).Value
        Next x

        copySheetRowNumber = copySheetRowNumber + 1
    End If
Next
于 2012-11-09T19:58:01.453 に答える