Sub Main()
For nI = 1 To 12 '判斷12個月份
nR1 = FindMonth("Sheet1", nI & "月")
nR2 = FindMonth("Sheet2", nI & "月")
If (nR1 = 0 And nR2 = 0) Then '兩個工作表都沒有,不用處理
Else
If (nR1 * nR2 = 0) Then '只有一個工作表有,複製到 sheet3
Call CopyRow("Sheet1", nR1)
Call CopyRow("Sheet2", nR2)
End If
End If
Next nI
End Sub
'在 sheet 找特定月份,找到回傳列號,找不到回傳 0
Function FindMonth(ByVal sheet, ByVal month) As Integer
nRet = 0
For nI = 2 To 10
If Range(sheet & "!D" & nI).Value = month Then
nRet = nI
Exit For
End If
Next nI
FindMonth = nRet
End Function
'將 sheet 第 sourcerow 列複製到 sheet3 的第一筆空白列
Sub CopyRow(ByVal sheet, ByVal sourcerow)
If sourcerow = 0 Then Exit Sub
Worksheets("Sheet3").Select
Range("A100").End(xlUp).Offset(1, 0).Select
targetrow = ActiveCell.Row
Dim arrC
arrC = Array("A", "B", "C", "D")
For nC = 0 To UBound(arrC)
Range("Sheet3!" & arrC(nC) & targetrow) = Range(sheet & "!" & arrC(nC) & sourcerow)
Next nC
End Sub
非常感謝!試一下,有問題再來請教
不好意思,昨天在文章中表達的不明確
Sheet1和Sheet2各有11個欄位(A欄 ~ K欄)
是想讓Sheet1和Sheet2兩個工作表的D欄位互相比對
找出不一樣的資料貼至Sheet3 包括其他欄位資料
像是以下這樣:
(Sheet1和Sheet2的D欄互相比對)
Sheet1
Sheet2
Sheet3 比對出來結果
能在麻煩幫我看看嗎?
如果 Sheet2 沒有第6筆(12月)的話
Sheet3會有幾筆12月?
被這樣一問才發現示意圖不太對
同工作表的D欄資料是不重複的
剛剛只想到要用2個工作表要有不同月份 卻忽略這個問題
修改程式如上
再來好好研究,非常感謝幫忙!
不好意思,可以在請教下面這句話是什麼意思呢?
Range("Sheet3!" & arrC(nC) & targetrow) = Range(sheet & "!" & arrC(nC) & sourcerow)
假設 Sheet2 的第3列要複製到 Sheet3 的第4列
用寫死的方式,就會是
Range("Sheet3!A4") = Range("Sheet2!A3")
Range("Sheet3!B4") = Range("Sheet2!B3")
Range("Sheet3!C4") = Range("Sheet2!C3")
Range("Sheet3!D4") = Range("Sheet2!D3")
但是寫程式要改成有變化
用 arrC ("A","B","C","D")
targetrow 就是 4
sheet 就是 "Sheet2"
sourcerow 就是 3
感謝說明,這樣我懂了
不好意思,又來打擾了
是這樣子的,一樣是要比對2個不同資料表的D欄位
找出不一樣的資料貼至Sheet3 包括其他欄位資料
但是D欄位不是月份 而是一般的數字
按照您提供的程式修改了一下 如下
Sub Main()
nRow = 1
For nI = 2 To 300
A = Range("Sheet1!D" & nI)
B = Range("Sheet2!D" & nI)
If (A = 0 And B = 0) Then
Else
If A <> B Then
nRow = nRow + 1
Call CopyRow("Sheet1", A)
Call CopyRow("Sheet2", B)
End If
End If
Next nI
End Sub
Sub CopyRow(ByVal sheet, ByVal sourcerow)
If sourcerow = 0 Then Exit Sub
Worksheets("Sheet3").Select
Range("A300").End(xlUp).Offset(1, 0).Select
targetrow = ActiveCell.Row
Dim arrC
arrC = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K")
For nC = 0 To UBound(arrC)
Range("Sheet3!" & arrC(nC) & targetrow) = Range(sheet & "!" & arrC(nC) & sourcerow)
Next nC
End Sub
會出現錯誤訊息 執行階段錯誤 1004 Range方法(Global物件)失敗
修改了很久還是同樣的問題 不知道是哪邊出了問題
能再麻煩您幫忙看一下嗎,真是不好意思
你的程式跟原本的題目已經相去甚遠
我不知道要從何改起
原本程式是
用`1月..12月`分別到Sheet1,Sheet2去找,只有其中一個工作表有找到時,複製該整列到Sheet3
現在你的程式寫的內容是
Sheet1!D2跟Sheet2!D2比
Sheet1!D3跟Sheet2!D3比
...
Sheet1!D300跟Sheet2!D300比
兩個值皆為0時不做任何動作
否則就將Sheet1/Sheet2兩列
都複製到Sheet3去
還有
原本的nR1, nR2記錄的是「列號」
而你改寫成 A,B 記錄的是「儲存格裡的值」
兩者意義差蠻多的
就算解決了 Range(Global) 的錯誤
程式也不太可能跑出你要的結果....
最近才剛開始寫VBA 還沒有辦法融會貫通去運用
所以才都用拼湊的方式去寫程式
沒想到改出來的程式越差越多 ......