繁体   English   中英

将基于列标题的数据从workbook1复制到workbook2。 空白单元格后不复制数据

[英]Copy data based on column header from workbook1 to workbook2. Does not copy data after blank cells

我天真地宏,我尝试下面的代码将基于列标题的数据从workbook1复制到workbook2。 但是它仅复制包含数据的行。 我之间有一些空白行。 任何帮助都感激不尽。

我认为End(x1Down).Copy正在停止以继续进行操作。 相反,我尝试使用EntireColumn.Copy,但它会刺破目标工作簿中的格式。

Sub CopyHeaders()
Dim header As Range, headers As Range
Set headers = Worksheets("ws1").Range("A1:Z1")

For Each header In headers
    If GetHeaderColumn(header.Value) > 0 Then
        Range(header.Offset(1, 0), header.End(xlDown)).Copy Destination:=Worksheets("ws2").Cells(2, GetHeaderColumn(header.Value))
    End If
Next
End Sub

Function GetHeaderColumn(header As String) As Integer
Dim headers As Range
Set headers = Worksheets("ws2").Range("A1:Z1")
GetHeaderColumn = IIf(IsNumeric(Application.Match(header, headers, 0)),Application.Match(header, headers, 0), 0)
End Function

在您的问题中,您提到了不同的工作簿,如果是这种情况,则可能还需要指定工作簿名称,以确保程序可预测地运行。

例如

Set headers = Workbooks("wb1").Worksheets("ws1").Range("A1:Z1")

假设这只是从一个工作表复制到另一个工作表,那么由于存在空白行,您可能想听Siddharth Rout关于使用End(xlUp)的建议。

例如

Worksheets("ws1").Range(Worksheets("ws1").Range("A1").Offset(1, 0), Worksheets("ws1").Range("Z1048576").End(xlUp))

请注意,我不太喜欢这种方法,因为它不是很动态,但是由于设置头的方式...以及工作表结构上信息的缺乏,我给出了这个示例来说明End(xlUp)

另请注意,如果您使用的是旧版Excel,请将1048576更改为65536(或您认为对工作表安全的任何行)

如果您位于一个非空单元格中, Range.End()会将您带到最后使用的单元格。

如果您位于非空单元格块的末尾, Range.End()会将您带到下一个使用的单元格或列的末尾。

Range(header.Offset(1, 0), header.Cells(Rows.Count).End(xlUp)).Copy Destination:=Worksheets("ws2").Cells(2, GetHeaderColumn(header.Value))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM