今天媳婦給我說:
我要在第一張表里面要同時要找出這個十個貨號來。不要一個個篩選,有沒有一次性,就是我直接復制這十個貨號,我就直接把十個貨號里面的所有的資料
源數(shù)據(jù)表有16184行。
ctrl+f 一條一條復制,肯定不是我們程序員的風格了, 下一次再讓我干這活呢(別人讓我干這活,我肯定不干的,呃,媳婦嘛,你懂的……)。
原想vlookup函數(shù),試了一下,再想想是不能用簡單函數(shù)解決了。要寫VBA代碼宏。
工作步驟
在Excel中使用VBA進行數(shù)據(jù)匹配并復制相應行到另一個表的基本步驟如下:
打開Excel工作簿,并確保表1、表2和表3在不同的工作表上。
按下 ALT + F11 打開VBA編輯器。
代碼嘛,先AI試試
復制AI生成的代碼到VBA代碼編輯器。
AI寫的代碼還是手動調(diào)整的,數(shù)據(jù)匹配不上,還有一個問題落數(shù)據(jù)(別問我是怎么知道的,試了就知道了,都說AI會替代程序員,看來還是不能沒有我們程序員)。以下是我手動調(diào)整的代碼:
Sub MatchAndCopyData()
' 定義工作簿和工作表對象
Dim wb As Workbook
Set wb = ThisWorkbook ' 使用當前工作簿,或指定具體路徑 Set wb = Workbooks.Open("D:exlsxfile.xlsx")
' 定義表1、表2和表3工作表對象
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ù)起始行(假設第一行為表頭)
iRowMatch = 1 ' 表2數(shù)據(jù)起始行(假設無表頭)
iRowTgt = 2 ' 表3數(shù)據(jù)起始行(假設第一行為表頭)
' 循環(huán)遍歷表2數(shù)據(jù)
While wsMatch.Cells(iRowMatch, 1).Value <> "" ' 假設以A列非空判斷是否有數(shù)據(jù)
' 從表1查找匹配項
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ù)據(jù)A列匹配數(shù)據(jù)源表的B列
matchFound = True
matchRow = iRowSrc
' 復制匹配到的表1數(shù)據(jù)行到表3
wsSource.Rows(matchRow).Copy Destination:=wsTarget.Rows(iRowTgt)
iRowTgt = iRowTgt + 1 ' 更新目標表的下一行
iRowMatch = iRowMatch + 1 ' 移動到表2的下一行
End If
Next iRowSrc
Wend
MsgBox "匹配并復制數(shù)據(jù)完成!"
End sub
寫完代碼保存
***
在使用此代碼之前,請確保:
工作表名稱與代碼中的名稱相匹配。
表1、表2和表3的數(shù)據(jù)范圍與代碼中的假設相符(例如,都是從A2開始,并且都有列A作為匹配依據(jù))。
如果表1或表2有標題行,請確保在代碼中的范圍中正確地表示出來(例如,"A2:C2" 而不是 "A1:C1")。
運行此宏將會把表2中匹配到的行從表1復制到表3。你可以根據(jù)實際需求調(diào)整代碼中的工作表名稱、數(shù)據(jù)范圍和復制的列。
***
運行:
運行結(jié)果