根据标题条件移动列的宏 MS Excel

根据标题条件移动列的宏 MS Excel

我将在 8 天后开始一份新工作,但对 Visual Basic 还不太熟悉。我能够跟随一位现任员工工作,在其中一份报告中,该员工筛选了大约 100 列,选择 8 列左右作为报告,然后将其复制并粘贴到新工作表中。

我想要实现的目标如下:

创建一个查看工作表 2 的宏,其中我将有报告的 8 列标题,查看工作表 1(主表)并找到 8 列并将数据(不是标题)移动到工作表 2。这将有助于加快报告速度,我希望它能够做其他事情,但这将是一个很好的起点。

例如:表 2 应该包含:承包商姓名、经理姓名、项目描述等。

答案1

尽可能基础。

1 |Sub copycolumns()
2 |Dim i As Integer, searchedcolumn As Integer, searchheader As Object
3 |
4 |For i = 1 To 8
5 |
6 |   set searchheader = Sheets(2).Cells(1, i)
7 |
8 |   searchedcolumn = 0
9 |   On Error Resume Next
10|   searchedcolumn = Sheets(1).Rows(1).Find(what:=searchheader.value, lookat:=xlWhole).Column
11|   On Error GoTo 0
12|
13|   If searchedcolumn <> 0 Then
14|      Sheets(1).Columns(searchedcolumn).Copy Destination:=searchheader
15|   End If
16|    
17|Next i
18|
19|End Sub
  • 第 4 行:使用 FOR 循环将变量从 1 移到 8。
    变量i代表工作表 2 中的当前列

  • 第 6 行:在这里我们将当前标题(单个单元格)保存为对象。此对象将在第 10 行和第 14 行中重复使用

  • 第 8 行:您必须searchedcolumn在进行新搜索之前重置搜索变量。如果不重置,搜索将失败(不存在于工作表 1 中),变量仍保留旧值。

  • 第 10 行:该find方法是整个宏的关键部分。它从 Sheet 2 中获取当前列的字符串,并在 Sheet 1 的第一行中搜索该字符串。如果搜索到结果,则将相应的列号存储在变量中searchedcolumn

  • 第 9 行和第 11 行:这将启动和停止错误处理程序。这样,如果第 10 行发生错误,您将不会收到内部 VBA 错误消息。相反,代码将继续运行。

  • 第 13 行:测试 find 方法是否找到了某些内容,并且值是否从零更改为有效的列号。

  • 第 14 行:如果是,则将工作表 1 中的整列复制到工作表 2 中的相应列


笔记:代码还可以进一步缩短。但是解释所有内容会更加复杂。

当然你必须手动删除每行开头的索引号。

相关内容