%20%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
2 つの異なるシートの大きなテーブルに、データのスナップショットが 2 つあります。基本的に、シートの内容は同じですが、数字は異なる時点のものです。これらの時点間の差分を計算する必要があります。
デルタを簡単に計算するにはどうすればよいでしょうか (例: シート 1 の各セルをシート 2 から減算し、結果をシート 3 のそれぞれのセルに保存する)。数値以外のセルの内容は同一であるため、そのままコピーする必要があります。
LibreOffice Calc で動作するものが望ましいですが、MS Excel でも実行できれば問題ありません。
答え1
次のコードは比較しますシート1にシート2。 もしシート1テキストまたは空白が含まれている場合、これらのセルは直接コピーされますシート3。 もしシート1セルに数値が含まれている場合、コードはその値を減算しますシート2そしてその差をシート3:
Sub BigDelta()
Dim s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
Dim rng As Range, addy As String, v As Variant, cell As Range
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
Set s3 = Sheets("Sheet3")
Set rng = s1.UsedRange
For Each cell In rng
addy = cell.Address
v = cell.Value
If v = "" Then
ElseIf IsNumeric(v) Then
s3.Range(addy) = v - s2.Range(addy)
Else
s3.Range(addy) = v
End If
Next cell
End Sub