View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
GS[_6_] GS[_6_] is offline
external usenet poster
 
Posts: 1,182
Default range does not return limits correctly every time

Lots of errors in my aircode, so here's tested code...


Sub CompareSheets()
Dim vData1, vData2, vDataOut(), n&, j&, r&
Dim lMaxRows&, lMaxCols&, wksSrc1 As Worksheet, wksSrc2 As Worksheet

Set wksSrc1 = Sheets("Sheet1"): Set wksSrc2 = Sheets("Sheet2")

vData1 = wksSrc1.UsedRange: vData2 = wksSrc2.UsedRange

lMaxRows = UBound(vData1)
lMaxRows = IIf(UBound(vData2) lMaxRows, _
UBound(vData2), lMaxRows)

lMaxCols = UBound(vData1, 2)
lMaxCols = IIf(UBound(vData2, 2) lMaxCols, _
UBound(vData2, 2), lMaxCols)

'Match the array sizes
vData1 = wksSrc1.UsedRange.Resize(lMaxRows, lMaxCols)
vData2 = wksSrc2.UsedRange.Resize(lMaxRows, lMaxCols)

'Set output array size
ReDim vDataOut(1 To (lMaxRows * lMaxCols), 1 To 3)

'Since your loop compares all columns row by row...
For n = 1 To lMaxRows
For j = 1 To lMaxCols
r = r + 1
vDataOut(r, 1) = wksSrc1.Cells(n, j).Address
vDataOut(r, 2) = wksSrc1.Cells(n, j).Value
vDataOut(r, 3) = wksSrc2.Cells(n, j).Value
Next 'j
Next 'n

Worksheets.Add After:=wksSrc2
ActiveSheet.Cells(1).Resize(UBound(vDataOut), UBound(vDataOut, 2)) =
vDataOut
End Sub

--
Garry

Free usenet access at http://www.eternal-september.org
Classic VB Users Regroup!
comp.lang.basic.visual.misc
microsoft.public.vb.general.discussion