根据特定文本字符串选择列

时间:2018-03-05 20:25:02

标签: excel vba excel-vba

我正在尝试组合一个宏,它将选择某些列并将它们粘贴到新工作表中。问题是列倾向于添加和删除,因为人们认为适合抛出绝对引用。

我一直在尝试修改使用宏录制器生成的基本宏,但我没有运气根据内容选择列。我有一张每天从我们的数据库生成的工作表,其中包含更改字段。例如,我想只选择Part#,Cost和Contact字段,但今天添加IDN会将我的旧宏关闭。

到目前为止,我已经尝试使用基本的excel查找函数,例如vlookup,针对常量列表的索引和下面的查找函数,但似乎都没有。我在这里找不到用我想要的文字选择列的东西吗?

  

列(查找(“部件号”))。选择

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要专门找到该列,然后您可以粘贴到目标位置,例如:

Sheets("Source").Columns(Sheets("Source").Rows(1).Find("Part #").Column).Copy Sheets("Dest").Cells(1,1)

答案 1 :(得分:1)

首先,be careful with .Select看起来您没有完全限定对工作表的引用,因此请注意下面的完整Workbook.Worksheet.Range类型引用。

以下是您的快速解决方法:

Public Sub Test()
    'the Range approach
    ThisWorkbook.Worksheets("Sheet1").Rows(1).Find(What:="Part #", LookAt:=xlWhole).EntireColumn.Copy
    ThisWorkbook.Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 'or xlPasteAll to include formulas
End Sub

使用整个列范围通常不是最好的主意。它会起作用,但只要你记得每次都将复制的列粘贴到目标工作表的第一行。

这是更好的选择(IMO):
通过单击功能区主页选项卡上的“format as table”,将数据转换为表(在VBA中称为ListObject)。现在,您可以更轻松地引用您的专栏 - 只需按名称进行操作,无需使用Find

Public Sub Test()
    'the ListObject approach
    ThisWorkbook.Worksheets("Sheet1").ListObjects("MyTable").ListColumns("Part #").Copy
    ThisWorkbook.Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 'or xlPasteAll to include formulas
End Sub

您需要知道表格的名称(我在这里称之为MyTable),您可以在选择表格时单击功能区上的“表格”来执行此操作