標題:
[發問]
如何比對資料後將不同之數據於新增sheet上
[打印本頁]
作者:
cmo140497
時間:
2012-11-8 10:29
標題:
如何比對資料後將不同之數據於新增sheet上
Dear 各位達人 :
小弟有二個sheet的資料,互相比對後,將相同的維持原值,不相同的則以"0"取代,程式有點問題,煩請各位達人幫忙解決小弟的疑惑,感恩!
Option Explicit
Sub test1()
'測試資料E_Data01 / E_Data02工作表
Dim myRng1 As Range
Dim myRng2 As Range
Dim myCell1 As Range
Dim myCell2 As Range
Dim mySht As Worksheet
Dim i As Long
With Worksheets
'指定抓取來源範圍與鍵值欄
Set myRng1 = .Item("E_Data01").Range("A1").CurrentRegion.Columns(1)
Set myRng2 = .Item("E_Data02").Range("A1").CurrentRegion.Columns(1)
Set mySht = .Add(After:=.Item(.Count)) '工作表的新增
End With
i = 0
For Each myCell1 In myRng1.Cells
For Each myCell2 In myRng2.Cells
If myCell1.Value = myCell2.Value Then
i = i + 1
myCell1.EntireRow.Copy mySht.Cells(i, 1)
Else
myCell2.EntireRow.Copy mySht.Cells(i, 1)
End If
Next
Next
Set myRng1 = Nothing '物件的釋放
Set myRng2 = Nothing
Set myCell1 = Nothing
Set myCell2 = Nothing
Set mySht = Nothing
End Sub
複製代碼
[attach]13069[/attach]
作者:
Hsieh
時間:
2012-11-8 12:46
回復
1#
cmo140497
Sub ex()
Dim ar(), A As Range
With Sheet1
ar = .UsedRange.Value
For Each A In .UsedRange
ar(A.Row, A.Column) = IIf(A = Sheet2.Range(A.Address), A, 0)
Next
End With
With Sheets.Add(after:=Sheets(Sheets.Count))
.[A1].Resize(UBound(ar, 1), UBound(ar, 2)) = ar
End With
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/)