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

问题描述 投票:2回答:2

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

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

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

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

enter image description here

excel vba excel-vba
2个回答
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),当您选择表格时,您可以通过单击功能区上的“表格”来执行此操作


1
投票

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

Sheets("Source").Columns(Sheets("Source").Rows(1).Find("Part #").Column).Copy Sheets("Dest").Cells(1,1)
© www.soinside.com 2019 - 2024. All rights reserved.