ポストhereを利用することで、ワークシート間のセルを比較するためのVBAマクロを作成することができました。しかし、今まではA1で始まらない範囲でテストしなかった。ワークシート間のセルを比較すると、A1で範囲が開始しない
B1:X50のような範囲を指定すると、シート配列の列寸法のLBoundが1で、指定範囲の先頭の列が2(B)であるという問題が発生しました。それは、列Aから始まるかどう
'Define the range to be checked
strRangeToCheck = Summary_ws.Range("I2").Value
'Store the range to be checked on each sheet in an array
varSheetA = New_Data_ws.Range(strRangeToCheck)
varSheetB = Old_Data_ws.Range(strRangeToCheck)
'Clear current highlighted cells on data tabs
New_Data_ws.Cells.Interior.Color = xlNone
Old_Data_ws.Cells.Interior.Color = xlNone
'Initialize counter
Counter = 0
Counter_rng.Value = Counter
For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
On Error GoTo Err_Handler
If IsError(New_Data_ws.Cells(iRow, iCol).Value) Or IsError(Old_Data_ws.Cells(iRow, iCol).Value) Then
Counter = Counter + 1
Error_Flag = True
Call Flag_Changes
ElseIf varSheetA(iRow, iCol) = varSheetB(iRow, iCol) And _
Len(varSheetA(iRow, iCol)) = Len(varSheetB(iRow, iCol)) Then
'Cells are identical and lengths match
'Do Nothing
Else 'Cells are different
Counter = Counter + 1 'increment counter
Error_Flag = False
Call Flag_Changes
End If
Next iCol
Next iRow
は私が判断するためにstrRangeToCheckを評価することができるよ:ここでは私が働いているコードの一部です。その決定に基づいて、strRangeToCheckの開始列に一致するようにシートのLBoundを手動で設定することは可能でしょうか?
この行は、 'strRangeToCheck = Summary_ws.Range(" I2 ")という1つのセルであるため、問題が発生します。値'範囲は常に1つのセルか、複数のセルである可能性がありますか? – Ibo
そのセルには、A1:Z100のように、ユーザーが提供する文字列が含まれています。それらが無効な範囲を指定すると、エラーがスローされます。 – kschindl