虽然我很熟悉Excel公式,但我对VBA完全陌生。我将从事临床管理工作,我将在明年初离职,并且我希望将事情留在一个IT知识较少的同事可以继续使用我所做的一些事情的状态。
我们面临的主要问题是,当我们从临床软件中提取数据时,它默认只会吐出患者ID,姓名,地址,DOB等。如果我们要求软件输入任何其他详细信息,例如各种疾病的诊断日期,它将这些数据放在患者左侧的新栏目中,这显然使得不可能进行vlookup。我使用的当前宏基本上选择导出数据的前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
答案 0 :(得分: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以确定要撤回的列。
这可能会为你节省所有切割和粘贴的麻烦。