簡體   English   中英

更改 VLookup 時將數據從一張紙復制到另一張紙

[英]Copy data from one sheet to another while changing VLookup

嗨,我是 excel 宏的新手,我正在嘗試將數據從一張紙復制到另一張紙。 在第一張紙中,我有如下數據

Id  Name   Salary
1   AAA    1000
2   BBB    5000
3   CCC    6000

在另一個 sheet2 中,我有一個按鈕,單擊它我需要為 sheet1 中的所有記錄生成以下格式(某種形式)的數據。

Id
Date   (Today's Date)
Name
Salary
--Few More Specific Data

在我的情況下,單擊按鈕時,我需要在上面的表單中填寫來自 sheet1 的數據 3 次,例如,

Id    1
Date  21/OCT/2021
Name  AAA
Salary  1000

Id    2
Date  21/OCT/2021
Name  BBB
Salary  5000

Id    3
Date  21/OCT/2021
Name  CCC
Salary  6000

我使用了 VLOOKUP 並填寫了第一條記錄,並考慮在單擊按鈕時將第一個表單數據復制並粘貼到與 sheet1 中的記錄數一樣多的次數。 但是我不確定在使用 VBA 代碼復制和粘貼時如何使用 VLOOKUP 進行下一條記錄。

下面是我試過的代碼,

Dim destCell As Range
Set destCell = Worksheets("sheet2").Cells(Rows.Count, "B").End(xlUp)
If destCell.Row > 1 Then Set destCell = destCell.Offset(2)
Worksheets("sheet2").Range("B6:Q20").Copy
destCell.Worksheet.Select
destCell.Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormulas
destCell.Select

Application.CutCopyMode = False

我需要為 sheet1 中的許多記錄遍歷這個,並且在粘貼時我必須更改 Id 和 VLOOKUP 公式。

請測試下一個代碼。 它將在下一個工作表中返回。 您可以使用任何需要的工作表,但必須設置:

Sub testSummarizeSalaries()
  Dim sh As Worksheet, Destination As Worksheet, lastRow As Long, arr, arrFin, i As Long, k As Long
  
  Set sh = ActiveSheet      'use here the sheet you need
  Set Destination = sh.Next 'use here the sheet you need
  lastRow = sh.Range("A" & sh.rows.count).End(xlUp).row 'if not the range starts with column A:A, use the appropriate column
  arr = sh.Range("A2:C" & lastRow).Value 'place the range in an array for faster iteration
                                         'if the range to be processed is not in columns A:C, use there the real columns
  ReDim arrFin(1 To UBound(arr) * 4, 1 To 2):  k = 1 'reDim the final array and initialize k
   For i = 1 To UBound(arr)
        arrFin(k, 1) = "ID": arrFin(k, 2) = arr(i, 1): k = k + 1
        arrFin(k, 1) = "Date": arrFin(k, 2) = format(Date, "dd/mmm/yyy"): k = k + 1
        arrFin(k, 1) = "Name": arrFin(k, 2) = arr(i, 2): k = k + 1
        arrFin(k, 1) = "Salary": arrFin(k, 2) = arr(i, 3): k = k + 2 '2, to add an empty row after...
  Next i
  'drop the final array result, at once:
  Destination.Range("A1").Resize(UBound(arrFin), UBound(arrFin, 2)).Value = arrFin
  MsgBox "Ready..."
End Sub

我會直接訪問目標工作表中的單元格,而不是使用 vlookup 函數。

Set wsSrc = Worksheets("sheet1")
Set wsDest = Worksheets("sheet2")
idxRowDest = 1
' Not shown how to determine the number of source rows
For idxRowSrc 2 to n
    For idxColSrc = 1 to 3
        ' Copy column header in Src to fieldName in Dest
        wsDest.Cells(idxRowDest, 1).value = wsSrc.Cells(1, idxColSrc).value
        ' Copy column value in Src to fieldValue in Dest
        wsDest.Cells(idxRowDest, 2).value = wsSrc.Cells(idxRowSrc, idxColSrc).value
        idxRowDest = idxRowDest + 1

        ' Other specific data
        ' ...

    Next
Next

可能這會比使用范圍操作慢一點,但這是我為您的問題找到的更簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM