Board logo

標題: [發問] 如何比對資料後將不同之數據於新增sheet上 [打印本頁]

作者: cmo140497    時間: 2012-11-8 10:29     標題: 如何比對資料後將不同之數據於新增sheet上

Dear 各位達人 :
    小弟有二個sheet的資料,互相比對後,將相同的維持原值,不相同的則以"0"取代,程式有點問題,煩請各位達人幫忙解決小弟的疑惑,感恩!
  1. Option Explicit
  2. Sub test1()
  3.     '測試資料E_Data01 / E_Data02工作表
  4.     Dim myRng1 As Range
  5.     Dim myRng2 As Range
  6.     Dim myCell1 As Range
  7.     Dim myCell2 As Range
  8.     Dim mySht  As Worksheet
  9.     Dim i      As Long
  10.     With Worksheets
  11.         '指定抓取來源範圍與鍵值欄
  12.         Set myRng1 = .Item("E_Data01").Range("A1").CurrentRegion.Columns(1)
  13.         Set myRng2 = .Item("E_Data02").Range("A1").CurrentRegion.Columns(1)
  14.         Set mySht = .Add(After:=.Item(.Count))  '工作表的新增
  15.     End With
  16.     i = 0
  17.    
  18.     For Each myCell1 In myRng1.Cells
  19.         For Each myCell2 In myRng2.Cells
  20.             If myCell1.Value = myCell2.Value Then
  21.                 i = i + 1
  22.                         myCell1.EntireRow.Copy mySht.Cells(i, 1)
  23.                 Else
  24.                         myCell2.EntireRow.Copy mySht.Cells(i, 1)
  25.             End If
  26.         Next
  27.     Next
  28.     Set myRng1 = Nothing                '物件的釋放
  29.     Set myRng2 = Nothing
  30.     Set myCell1 = Nothing
  31.     Set myCell2 = Nothing
  32.     Set mySht = Nothing
  33. End Sub
複製代碼
[attach]13069[/attach]
作者: Hsieh    時間: 2012-11-8 12:46

回復 1# cmo140497
  1. Sub ex()
  2. Dim ar(), A As Range
  3. With Sheet1
  4.   ar = .UsedRange.Value
  5.   For Each A In .UsedRange
  6.      ar(A.Row, A.Column) = IIf(A = Sheet2.Range(A.Address), A, 0)
  7.   Next
  8. End With
  9. With Sheets.Add(after:=Sheets(Sheets.Count))
  10. .[A1].Resize(UBound(ar, 1), UBound(ar, 2)) = ar
  11. End With
  12. End Sub
複製代碼

作者: cmo140497    時間: 2012-11-8 14:03

回復 2# Hsieh


    感謝版主僅用這麼短的程式即解決了小弟的問題,另程式中有一行,小弟不是很了解,關於.[A1].Resize(UBound(ar, 1), UBound(ar, 2)) = ar

'Resize(Rowsize,columnsize)調整指定的範圍,傳回Range物件,該物件代表調整後的範圍
'UBound(Arrayname,dimension),傳回Long值,表示指定陣列某維最大可使用的陣列索引

為什麼Resize:Rowsize就設定為1維,而Columnsize就必須設定為2維呢?
作者: Hsieh    時間: 2012-11-8 14:14

回復 3# cmo140497
ar是將範圍指定成的陣列,所以是二維陣列,各維的下標為1
Ubound(ar,1)指的是ar第一維的上飆
Ubound(ar,2)指的是ar第二維的上飆
作者: 198188    時間: 2012-11-9 17:21

請問如果想對比的是兩個不同的excel呢?怎樣做?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)