1

我有 vba 问题,我一直试图找到答案很长时间。我有来自众多客户的大量电子表格,我在这些电子表格上运行宏,我是编码新手,并且能够大致弄清楚我需要做什么。我的客户每月向我们发送数据,并且每个月的行数都在变化。列不会改变,但数据量会改变。我之前的宏我刚刚选择了整个列来复制并粘贴到我们的公司模板上。这对必须的东西很好,但创建了一些非常长的代码,宏需要很长时间。我想编写一个代码来计算某一列中有多少行,然后从那里复制并粘贴它在每列中计数的行数。每行只有几列包含数据,所以我需要它来计算一个特定列中的行并将其应用于每一列。任何帮助,将不胜感激。谢谢托尼

嗨,伙计们,仍然有这个问题,下面我粘贴了我正在使用的代码,如果有人能看到它为什么无法运行,请帮忙。

Windows("mmuworking2.xlsx").Activate
 Workbooks.Open Filename:= _
        "C:\Users\I53014\Desktop\QC DOCS\Sample_Data_Import_Template.xlsx"
 Windows("mmuworking2.xlsx").Activate
    Dim COL As Integer
    COL = Range("A:DB").Columns.Select
    **Range(Cells(2, COL), Cells(Range("E" & Rows.Count).End(xlUp).Row, COL)).Copy Destination:=Windows("Sample_Data_Import_Template.xlsx").Range("A2")**
    Range("A2").Paste
    Range("A5000").Formula = "='C:\Users\I53014\Desktop\[Import_Creator.xlsm]sheet1'!$B$2"
    ActiveWorkbook.SaveAs Filename:="Range (A5000)", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

我在它不断停止的地方加粗。

4

1 回答 1

9

这应该为您提供包含数据的最后一行:

ActiveSheet.UsedRange.Rows.Count

这将为您提供特定列中的最后一行:

Range("B" & Rows.Count).End(xlUp).Row

这是我如何复制工作表前三列中的每一行的示例

Sub Example()
    Dim LastRow As Long

    LastRow = ActiveSheet.UsedRange.Rows.Count
    Range(Cells(1, 1), Cells(LastRow, 3)).Copy Destination:=Sheet2.Range("A1")
End Sub

您必须小心,因为这两种方法都有一些警告。

ActiveSheet.UsedRange如果未正确清理单元格,则可能包括没有任何数据的单元格。

Range("A" & Rows.Count).End(xlUp).Row只会返回指定列中的行数。

Rows(Rows.Count).End(xlUp).Row只会返回第一列的行数。

编辑添加了一个示例
Edit2将示例更改为更清晰

对于这个例子,假设我们有这个数据
在此处输入图像描述

您可以使用以下方法将任何其他列复制到 A 列中的行数:

Sub Example()
    Dim Col as Integer
    Col = Columns("C:C").Column

    'This would copy all data from C1 to C5
    'Cells(1, Col) = Cell C1, because C1 is row 1 column 3
    Range(Cells(1, Col), Cells(Range("A" & Rows.Count).End(xlUp).Row, Col)).Copy Destination:=Sheet2.Range("A1")
End Sub

最终结果将是这样的:
在此处输入图像描述

于 2013-07-24T19:28:52.757 回答