• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

Excel中使用VBA進(jìn)行數(shù)據(jù)匹配并復(fù)制相應(yīng)行到另一個(gè)表

02/06 13:31
659
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

今天媳婦給我說(shuō):

我要在第一張表里面要同時(shí)要找出這個(gè)十個(gè)貨號(hào)來(lái)。不要一個(gè)個(gè)篩選,有沒有一次性,就是我直接復(fù)制這十個(gè)貨號(hào),我就直接把十個(gè)貨號(hào)里面的所有的資料

源數(shù)據(jù)表有16184行。

ctrl+f 一條一條復(fù)制,肯定不是我們程序員的風(fēng)格了, 下一次再讓我干這活呢(別人讓我干這活,我肯定不干的,呃,媳婦嘛,你懂的……)。

原想vlookup函數(shù),試了一下,再想想是不能用簡(jiǎn)單函數(shù)解決了。要寫VBA代碼宏。

工作步驟

在Excel中使用VBA進(jìn)行數(shù)據(jù)匹配并復(fù)制相應(yīng)行到另一個(gè)表的基本步驟如下:

打開Excel工作簿,并確保表1、表2和表3在不同的工作表上。

按下 ALT + F11 打開VBA編輯器。

代碼嘛,先AI試試

復(fù)制AI生成的代碼到VBA代碼編輯器。

AI寫的代碼還是手動(dòng)調(diào)整的,數(shù)據(jù)匹配不上,還有一個(gè)問(wèn)題落數(shù)據(jù)(別問(wèn)我是怎么知道的,試了就知道了,都說(shuō)AI會(huì)替代程序員,看來(lái)還是不能沒有我們程序員)。以下是我手動(dòng)調(diào)整的代碼:

Sub MatchAndCopyData()

' 定義工作簿和工作表對(duì)象
Dim wb As Workbook
Set wb = ThisWorkbook ' 使用當(dāng)前工作簿,或指定具體路徑 Set wb = Workbooks.Open("D:exlsxfile.xlsx")

' 定義表1、表2和表3工作表對(duì)象
Dim wsSource As Worksheet, wsMatch As Worksheet, wsTarget As Worksheet
Set wsSource = wb.Sheets("Sheet1") ' 表1的名稱 源數(shù)據(jù)表
Set wsMatch = wb.Sheets("Sheet2") ' 表2的名稱 匹配數(shù)據(jù)表
Set wsTarget = wb.Sheets("Sheet3") ' 表3的名稱 目的數(shù)據(jù)表

' 初始化變量
Dim iRowSrc As Long, iRowMatch As Long, iRowTgt As Long
iRowSrc = 2 ' 表1數(shù)據(jù)起始行(假設(shè)第一行為表頭)
iRowMatch = 1 ' 表2數(shù)據(jù)起始行(假設(shè)無(wú)表頭)
iRowTgt = 2 ' 表3數(shù)據(jù)起始行(假設(shè)第一行為表頭)

' 循環(huán)遍歷表2數(shù)據(jù)
While wsMatch.Cells(iRowMatch, 1).Value <> "" ' 假設(shè)以A列非空判斷是否有數(shù)據(jù)

' 從表1查找匹配項(xiàng)
Dim matchFound As Boolean: matchFound = False
Dim matchRow As Long
For iRowSrc = 2 To wsSource.Rows.Count ' 循環(huán)表1數(shù)據(jù)行
If wsSource.Cells(iRowSrc, 2).Value = wsMatch.Cells(iRowMatch, 1).Value Then ' 假設(shè)以匹配數(shù)據(jù)A列匹配數(shù)據(jù)源表的B列
matchFound = True
matchRow = iRowSrc
' 復(fù)制匹配到的表1數(shù)據(jù)行到表3
wsSource.Rows(matchRow).Copy Destination:=wsTarget.Rows(iRowTgt)
iRowTgt = iRowTgt + 1 ' 更新目標(biāo)表的下一行
iRowMatch = iRowMatch + 1 ' 移動(dòng)到表2的下一行
End If
Next iRowSrc

Wend
MsgBox "匹配并復(fù)制數(shù)據(jù)完成!"
End sub

寫完代碼保存

***
在使用此代碼之前,請(qǐng)確保:

工作表名稱與代碼中的名稱相匹配。

表1、表2和表3的數(shù)據(jù)范圍與代碼中的假設(shè)相符(例如,都是從A2開始,并且都有列A作為匹配依據(jù))。

如果表1或表2有標(biāo)題行,請(qǐng)確保在代碼中的范圍中正確地表示出來(lái)(例如,"A2:C2" 而不是 "A1:C1")。

運(yùn)行此宏將會(huì)把表2中匹配到的行從表1復(fù)制到表3。你可以根據(jù)實(shí)際需求調(diào)整代碼中的工作表名稱、數(shù)據(jù)范圍和復(fù)制的列。

***

運(yùn)行:

運(yùn)行結(jié)果

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄