我有一个有4张表的excel文件。这些图纸分别命名为图纸1、图纸2、图纸3和图纸4。
每个工作表都有5列(产品、风险、类型、分区、名称),我要将它们复制到新工作表(工作表5)。每个工作表都有不同的结构,因此列也不一样。我想将Product列中的所有数据复制到表5的A列中,将Risk列中的所有数据复制到表5的B列中,依此类推。最终结果将有5列(产品、风险、类型、部门、名称)。表1到表4中的数据行数完全不同。
有人能帮帮忙吗?我不能附加文件,因为它是机密的。谢谢
发布于 2017-07-20 16:09:15
有一次,我不得不在一个单独的工作簿中汇总多个工作簿,每个工作表都有多个工作表。
因为我看不到代码,也看不到截图,所以我只能建议一些常见的东西。
1.)如果所需列的名称与每个工作表的名称相同,则可以使用.find确定列号并从中提取数据(从最后一行到第一行+1(因为第一行可能是标题))。
Set NeededColumn = ThisWorkbook.ws.Cells.Find(What:="ColumnName", _
LookIn:=xlValues, LookAt:=xlPart, _
after:=Cells(1, 1), MatchCase:=False, SearchFormat:=False)
ColumnNumber = NeededColumn.Column
其中ColumnName是新工作表中页眉的名称。
我会用更多的建议更新答案,更多关于这个文件结构的细节。
发布于 2017-07-20 17:25:45
如果你走运的话,我也有过同样的问题。希望这能对你有所帮助。
'Datum: 20.07.17
'Autohr: Moosli
'Definition: main
'Parameter: -
'
Option Explicit
Public Sub main()
Dim wb As Workbook
Dim wsDest As Worksheet
Dim wsSour As Worksheet
Dim i As Integer
Dim j As Integer
Dim intRowHeader As Integer
Dim intColHeader As Integer
Dim strSearch As String
Dim lngLastRowDest As Long
Dim lngLastRowSour As Long
Set wb = ActiveWorkbook
wb.Worksheets.Add
Set wsDest = ActiveSheet
wsDest.Move After:=Sheets(wb.Sheets.Count)
'Write Header in Sheet 5
wsDest.Cells(1, 1) = "Product"
wsDest.Cells(1, 2) = "Risk"
wsDest.Cells(1, 3) = "Type"
wsDest.Cells(1, 4) = "Devision"
wsDest.Cells(1, 5) = "Name"
For i = 1 To 4 'Loop for all Sheets
Set wsSour = wb.Sheets(i)
lngLastRowDest = wsDest.Range("A" & wsDest.Rows.Count).End(xlUp).Row
lngLastRowSour = wsSour.Range("A" & wsSour.Rows.Count).End(xlUp).Row
For j = 1 To 5 'Loop for all Col
strSearch = wsDest.Cells(1, j).Value
Call getHeaderRowAndCol(wsSour, intRowHeader, intColHeader, strSearch)
Range(Cells(intRowHeader + 1, intColHeader), Cells(lngLastRowSour, intColHeader)).Select
Selection.Copy wsDest.Cells(lngLastRowDest + 1, j)
Next j
Next i
End Sub
'Datum: 20.07.17
'Autohr: Moosli
'Definition: This sub returns Row and Col Index of the Par. strSearch
'Parameter: ws as Worksheet (Worksheet(Tabelle) in which is Seaching for the Par.)
' intRowHeader as Integer, Par for storing the Row Nr.
' intCol as Integer, Par for storing the Col Nr.
' strSearch as String, what you want to search... ^^
Private Sub getHeaderRowAndCol(ByVal ws As Worksheet, ByRef intRowHeader As Integer, ByRef intCol As Integer, strSearch As String)
'Get Header Row
ws.Activate
ws.Cells(1, 1).Select
'Zelle wird gesucht
On Error GoTo Err_Handler2:
ws.Cells.Find(What:=strSearch, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, searchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=True, SearchFormat:=False).Activate
'Spalte und Zeile werden Ausgelesen
intRowHeader = ActiveCell.Row
intCol = ActiveCell.Column
Err_Handler2:
End Sub
https://stackoverflow.com/questions/45208701
复制相似问题