假设我有一家租车公司,我有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
我有一张主表,我想从所有表中获取特定信息,并将这些表的cellValues复制到主表中。我不熟悉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,' Sheet1(51)'!1:1048576,2:2,FALSE)但是得到了值错误或NA错误,具体取决于什么我在参数中尝试的范围或值。我理解HLookup功能的方式是:
我的想法是,一旦我让这个公式为一个单元格工作,然后将它扩展为一行,然后将其扩展到我在sudocode中的源代码表中所有行的循环,然后将其展开以查看或转到下一张源表。
答案 0 :(得分:0)
您可以通过循环浏览所有可用的工作表(不包括主工作表)并为每个工作表设置相关范围来轻松完成此操作。然后使用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