VBA宏或函数,用于将基于条件的单元格值复制到母版页



假设我有一家租车公司,我有12张表,每张表有10列,行数未知。每张表格都有租车信息。以下是每个电子表格的列标题

- A.   Date rented 
- B.   Customer Name
- C.   Customer Address
- D.   Customer Phone
- E.   Customer email 
- F.   Car Year
- G.   Car Make
- H.   Car Model
- I.   Car Plate number
- J.   Car Vin

我有一个母版工作表,我想从所有工作表中获取特定信息,并将这些工作表的单元格值复制到母版工作中。我不熟悉VBA,所以下面是我想做的循环的sudocode:

For each sheet
For each row
Copy customer name, customer phone, car plate number into next available row on master sheet

在主表中,列将分别是我将它们放入sudocode 的方式

- A.   Customer Name
- B.   Customer Phone
- C.   Car Plate number

有人能告诉我VBA宏代码是什么吗?

免责声明:这不是我电子表格中的实际信息,因为我正在做的是保密的,所以我不能提供截图。这只是模拟我想做什么的示例信息

我试过了=HLOOKUP(B1,"表1(51)"!1:1048576,2:2,FALSE),但会得到一个值错误或NA错误,这取决于我在参数中尝试的范围或值。我理解HLookup功能的方式是:

  1. 查找值是我在源工作表中查找的列标题:对于客户名称,我愿意,但查找值为B2
  2. 表数组将是整个源表
  3. 行数组将是我从源工作表中获取单元格值的行
  4. 范围查找是T或F,或者什么都没有,因为它是可选的。如果我使用True或False,我会得到NA错误。如果我什么都不使用,我会获得值错误

我的想法是,一旦这个公式适用于一个单元格,然后将其扩展到一行,然后将它扩展到我的sudocode中的循环中,用于源工作表中的所有行,然后扩展它以查看或转到下一个源工作表。

通过循环所有可用的工作表(不包括主工作表)并设置每个工作表的相关范围,可以很容易地实现这一点。然后使用find函数获取主表中的最后一行数据,以便能够附加下一行。

这应该会产生所需的结果:

Sub MasterGrab()
Dim master As Worksheet
Dim subSheet As Range
Dim i As Integer
Dim lastRow As Long
Set master = Worksheets("MasterSheet")
x = Sheets.Count
lastRow = master.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'find last row on master sheet
lastRow = lastRow + 1
For i = 1 To x
If Not Sheets(i).Name = "MasterSheet" Then 'capture all sheets except MasterSheet
Set subSheet = Sheets(i).Range("A1:J" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row) 'set each sheet range to cover required data
For Each r In subSheet.Rows
master.Cells(lastRow, 1) = r.Cells(2) 'Customer name
master.Cells(lastRow, 2) = r.Cells(4) 'Customer phone
master.Cells(lastRow, 3) = r.Cells(9) 'Car Plate number
lastRow = lastRow + 1
Next r
End If
Next i
End Sub

最新更新