-1

20 を超えるスプレッドシートを含む Excel シートがあり、各スプレッドシートには 1000 行を超える行が含まれています。Linux環境でpythonプログラムを使用してこのExcelシートを生成しています。しかし、これらのファイルを Windows 環境に持ち込むこともできます。2 つの Excel シートをスプレッドシート データと比較することはできますか? Windows、Linux、Excel プロパティ、または Python のツールを使用して、スプレッドシート シートとデータを比較する人はいますか

4

2 に答える 2

1

VBA は最も明白なソリューションです。
各シートの使用範囲を配列にロードし、配列をループします。
時間がかかるため、範囲をループしないでください。

それがどのように機能するかの基本的な例として、オンザフライで書かれたいくつかのコード。比較する方法と内容に応じて、カスタマイズを行う必要があります。とにかく、これは単なる一般原則です。

Dim lCnt_A as Long
Dim lCnt_B as Long 
Dim vArray_1 as variant
Dim vArray_2 as variant
Dim oRange_1 as Excel.range 
Dim oRange_2 as Excel.range
Dim lCnt_Rows as Long
Dim lCnt_Cols as Long

'Don't do this: 
for lCnt_A = 1 to 5000 
    for lCnt_B = 1 to 100
        if thisworkbook.sheets(1).cells(lCnt_A, lCnt_B).value <> Thisworkbook.sheets(2).cells(lCnt_A, lCnt_B).value Then 
            Msgbox ("Difference spotted in cell" & thisworkbook.sheets(1).cells(lCnt_A, lCnt_B).Address)
        end if
    next lCnt_B
next lCnt_A


'But rather this, it's faster: 
set oRange_1 = thisworkbook.sheets(1).usedrange 
set oRange_2 = thisworkbook.sheets(2).usedrange
lCnt_Rows = oRange_1.rows.count 
lCnt_Cols = oRange_1.rows.count 

redim vArray_1(1 to lCnt_Rows, 1 to lCnt_Cols)
redim vArray_2(1 to lCnt_Rows, 1 to lCnt_Cols)

vArray_1 = oRange_1
vArray_2 = oRange_2    

for lCnt_A = 1 to 5000 
    for lCnt_B = 1 to 100
        if vArray_1(lCnt_A, lCnt_B) <> vArray_2(lCnt_A, lCnt_B) then
            Msgbox ("Difference spotted in row " & lCnt_A & " and column " & lCnt_B)
        end if
    next lCnt_B
next lCnt_A
于 2013-09-27T10:28:05.757 に答える