使用单元格值来定义要select的列数

我完全是新的VBA,虽然我很好用Excel公式经验丰富。 我正在做一个临床pipe理的工作,我将在明年初离开,我想把事情放在一个没有IT知识的同事可以继续使用我所做的一些东西的状态。

我们面临的主要问题是,当我们从临床软件中提取数据时,默认情况下只会吐出患者ID,姓名,地址,DOB等。如果我们要求软件提供任何额外的细节,例如以各种疾病进行诊断,将这些数据置于患者左侧的新列,这显然使得不可能进行查找。 我使用的当前macros基本上select导出数据的前3列或4列,然后将其剪切/粘贴到电子表格的最右侧部分,然后将患者ID复制到一个单独的表中,在该表中vlookup执行其操作并填充桌子。

我正在寻找的是一种创build模板的方法,其中一个用途可以指定这些“额外”列将会有多less,可能使用下拉列表,因此macros可以很容易地调整为新的数据集。 我已经search了一下,但我还没有find任何合适的东西。

以下是当前select数据并移动它的代码位:

Sheets("Exported Data").Select Columns("A:E").Select Selection.Cut ActiveWindow.ScrollColumn = 2 Columns("N:N").Select Selection.Insert Shift:=xlToRight ActiveWindow.ScrollColumn = 1 Columns("A:A").EntireColumn.AutoFit Range("A2").Select ActiveWorkbook.Worksheets("Exported Data").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Exported Data").Sort.SortFields.Add Key:=Range( _ "A2:A1285"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Exported Data").Sort .SetRange Range("A1:M1285") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

您可以使用INDEX和MATCH而不是VLOOKUP。 INDEX和MATCH使您可以将值返回到查找列的左侧。

  ColA ColB Ref ColD ColE 12 111 aaa 3000 4001 13 122 bbb 3001 4002 14 133 ccc 3002 4003 =INDEX(A2:B4,MATCH(G1,C2:C4,0),2) 

该公式在Ref列中查找“bbb”,并从ColB中拉回“122”。

您使用MATCH来确定行和INDEX以确定要撤回的列。

这可以为您节省所有切割和粘贴的麻烦。