返回列表 上一主題 發帖

《發問》vba-名單比對相符合回寫資料

《發問》vba-名單比對相符合回寫資料

請教各位高手,關於比對名單的vba寫法,只要符合《資料來源》的A欄位符合《名單》摺頁的人名,即將特定的欄位回寫在另一個工作頁(比對後資料),
由於資料來源每日會有數千筆,所以,我寫了簡單的程式碼後,通常都要RUN很久~不知道有什麼方法可以再快些!

Sub 比對名單()

Sheets("比對後資料").Select
Cells.Clear


Sheets("資料來源").Select
k = Sheets("資料來源").Range("a65536").End(xlUp).Row
p = Sheets("名單").Range("a65536").End(xlUp).Row

Sheets("比對後資料").Cells(1, 1).Value = Sheets("資料來源").Cells(1, 1)
Sheets("比對後資料").Cells(1, 4).Value = Sheets("資料來源").Cells(1, 3)
Sheets("比對後資料").Cells(1, 5).Value = Sheets("資料來源").Cells(1, 4)
  c = 2
For n = 2 To k
       For m = 1 To p

  If Sheets("資料來源").Cells(n, 1) = Sheets("名單").Cells(m, 1) Then                     
        Sheets("比對後資料").Cells(c, 1).Value = Sheets("資料來源").Cells(n, 1)
         Sheets("比對後資料").Cells(c, 3).Value = Sheets("資料來源").Cells(n, 3)
        Sheets("比對後資料").Cells(c, 4).Value = Sheets("資料來源").Cells(n, 4)
         
               c = c + 1
              
               
   
   End If
    Next
  Next
  
  

End Sub

Book1.rar (1.65 KB)

Book1.rar (1.65 KB)

新人一枚

回復 2# Hsieh


    感謝!我套入後,資料來源符合名單的只會出現一次,如果,資料來源中,人名出現多次也會同樣會帶入比對資料的摺頁,要怎麼做?
    不好意思,我剛剛沒有表達清楚!
新人一枚

TOP

[版主管理留言]
  • Hsieh(2014-1-16 23:53): 這些都是基本問題,論壇中都討論過,新手就請多爬文

謝謝!可以套入了!但是
可請教幾個問題嗎?(我初入門不太了解,所以問了笨問題)

For Each A In .Range(.[A2], .[A2].End(xlDown))
為什麼  .Range前面會有個點,而(.[A2], .[A2].也都會有個點


If Not Rng Is Nothing Then  這句程序碼的意思?

s&  這是定義什麼?

如果,我想取的資料來源若不是連續欄位?(可能是A、B、C、G、I欄)是不是就不可以用
Ar(s) = Application.Transpose(Application.Transpose(c.Resize(, 4).Value))
新人一枚

TOP

謝謝版主提醒及指導,也謝謝 GBKEE!我會再加油的,每天認真爬文的!
真的很感謝!
新人一枚

TOP

我以GBKEE版主提供的進行了解後,要再調整將SHEETS("名單")的B欄位也同時回寫在SHEETS("比對後資料"),經改了一下後,結果帶出的資料不正確,請大家指導我!


Sub tt()
Dim rng(1 To 5) As Range, E, K As Range

Set rng(1) = Sheets("名單").Range("a2")

Set rng(3) = Sheets("資料來源").Range("a:a")

Do While rng(1) <> ""
Set rng(4) = rng(3).Find(rng(1), lookat:=xlWhole)

If Not rng(4) Is Nothing Then
       rng(3).Replace rng(1), "=book", xlWhole
       With rng(3).SpecialCells(xlCellTypeFormulas, xlErrors)
            .Value = rng(1)
            With rng(1)
             For Each E In .Cells
                For Each K In .Cells
               
                   With Sheets("比對後資料")
                         Cells(.UsedRange.Rows.Count + 1, "C").Value = K.Offset(, 1)
                        Cells(.UsedRange.Rows.Count, "A").Value = E
                        Cells(.UsedRange.Rows.Count, "B").Value = E.Range("B1")
                     
               
                   End With
                Next
             Next
             End With
       End With
      
      
End If
Set rng(1) = rng(1).Offset(1)


Loop




End Sub
新人一枚

TOP

回復 12# GBKEE


    先謝謝版主看到我的求救!
我說明一下~
原程式內容已可以回寫資料來源(我也弄懂了),但我嘗試要將名單摺頁的B欄(性別)也一併帶入比對後資料!
我試了好久,也上網查了好久,我實在能力不足,無法參透如何改!

名單比對練習.rar (8.39 KB)

新人一枚

TOP

謝謝版大
我懂我卡在哪了!
新人一枚

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題