2014-09-02 23 views
0

虽然我用Excel公式调味,但我完全是VBA的新手。我正在担任临床管理职位,我将在明年年初离职,并且我希望将一些事情放在一个状况,在这种状况下,那些有信息素养的同事可以继续使用我所做的一些事情。使用单元格值来定义要选择多少个列

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

我在寻找的是一种创建模板的方法,其中一个用途可以指定将会有多少这些“额外”列,可能使用下拉列表,所以宏可以很容易地调整为新的数据集。我已经搜索过,但我没有找到任何合适的东西。

这里的代码目前选择数据和移动它的位:

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 

回答

1

您可以使用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以确定要撤回的列。

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

+0

谢谢你,这绝对简化了事情!仍然需要弄清楚我将如何设置一个模板,该模板将自动创建具有此公式的列。我的角色分为IT和管理工作,所以在我有机会正确地修改它之前可能会有一段时间,但谢谢。 – NotoriousVBA 2014-09-05 08:54:01

相关问题