首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宏将4个工作表中的5列复制到新工作表中的5列中

宏将4个工作表中的5列复制到新工作表中的5列中
EN

Stack Overflow用户
提问于 2017-07-20 15:55:01
回答 2查看 65关注 0票数 0

我有一个有4张表的excel文件。这些图纸分别命名为图纸1、图纸2、图纸3和图纸4。

每个工作表都有5列(产品、风险、类型、分区、名称),我要将它们复制到新工作表(工作表5)。每个工作表都有不同的结构,因此列也不一样。我想将Product列中的所有数据复制到表5的A列中,将Risk列中的所有数据复制到表5的B列中,依此类推。最终结果将有5列(产品、风险、类型、部门、名称)。表1到表4中的数据行数完全不同。

有人能帮帮忙吗?我不能附加文件,因为它是机密的。谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-07-20 16:09:15

有一次,我不得不在一个单独的工作簿中汇总多个工作簿,每个工作表都有多个工作表。

因为我看不到代码,也看不到截图,所以我只能建议一些常见的东西。

1.)如果所需列的名称与每个工作表的名称相同,则可以使用.find确定列号并从中提取数据(从最后一行到第一行+1(因为第一行可能是标题))。

代码语言:javascript
运行
复制
Set NeededColumn = ThisWorkbook.ws.Cells.Find(What:="ColumnName", _
    LookIn:=xlValues, LookAt:=xlPart, _
    after:=Cells(1, 1), MatchCase:=False, SearchFormat:=False)
ColumnNumber = NeededColumn.Column

其中ColumnName是新工作表中页眉的名称。

我会用更多的建议更新答案,更多关于这个文件结构的细节。

票数 1
EN

Stack Overflow用户

发布于 2017-07-20 17:25:45

如果你走运的话,我也有过同样的问题。希望这能对你有所帮助。

代码语言:javascript
运行
复制
'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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45208701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档