使用设置格式在Excel中重新排列数据

时间:2014-03-12 20:00:12

标签: vba excel-vba excel

以下是录制的宏:

 Range("A5:E11").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("A61:E77").Select
    Selection.Copy
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("[SHEET NAME]").Select
    ActiveWindow.SmallScroll Down:=15
    Range("A80:B88").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet3").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("[SHEET NAME]").Select
    ActiveWindow.SmallScroll Down:=12
    Range("A91:J114").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet2").Select
    ActiveSheet.Paste
    Sheets("[SHEET NAME]").Select

我想知道如何以大写字母更改工作表名称,以便宏在任何工作簿上运行相同。也就是说,我如何根据其位置参考表格?

作为次要且更复杂的问题,上述代码将三个表复制到三个单独的工作表。但是,表的数量和这些表的大小是可变的。如何告诉Excel停止突出显示一个范围,例如,找到两个没有文本的单元格,然后将选定范围的固定数量的单元格复制并粘贴到新工作表中,并根据它即将到来的工作表命名从。此外,如何在此之后让宏向下移动直到它看到文本,然后开始突出显示另一个要复制和粘贴的表?

1 个答案:

答案 0 :(得分:1)

我同意@simpLEMAn,您应该重写以删除SelectActive语句。

要回答您的第一个问题,请设置目标工作表,如下所示:

Dim wk As Worksheet
Set wk = Worksheets("MySheetName")

现在,您可以使用该表格执行以下操作,而无需通过代码SelectActivate

wk.Range("A1").value = "Test"

如果工作表是运行宏时的当前工作表但在不同工作簿中名称可能不同,则可以将定义更改为:

Dim wk As Worksheet
Set wk = ActiveSheet

第二个问题涉及查找范围中的最后一个单元格。有很多与此相关的帖子,并且取决于您的数据格式。基本上,您将创建一个新变量并为其分配最后一个单元格的值,然后在您的代码中使用此变量。

例如,列E中包含内容的最后一行可以像这样找到:

lngLastRow = Cells(Rows.Count, "E").End(xlUp).Row

现在你可以复制这样的动态范围:

wk.Range("A5:E" & lngLastRow).Copy

根据您在评论中提出的问题,以下是如何在A列中查找关键短语然后从该短语选择所有内容到A列中丢失行的示例。

Dim wk As Worksheet
Set wk = Worksheets("Sheet1")

FirstRowColA = Application.WorksheetFunction.Match("keyphrase", wk.[A:A])
LastRowColA = Cells(wk.Rows.Count, "A").End(xlUp).Row

wk.Range("A" & FirstRowColA & ":A" & LastRowColA).Copy

Worksheets("Sheet2").Paste