Excel 使用单元格值定义要选择的列数

Excel 使用单元格值定义要选择的列数,excel,vba,Excel,Vba,虽然我对Excel公式非常熟悉,但我对VBA还是完全陌生。我在一个临床管理岗位上工作,我将于明年初离职,我想让那些不懂IT的同事继续使用我的一些产品 我们面临的主要问题是,当我们从临床软件中提取数据时,默认情况下,它只会吐出门诊患者ID、姓名、地址、DOB等。如果我们要求软件输入任何附加细节,例如各种疾病的诊断日期,它会将这些数据放入患者左侧的新列中,这显然使我们不可能做一个vlookup。我使用的当前宏基本上选择导出数据的前3列或4列,然后将它们剪切/粘贴到电子表格的最右侧,然后将患者ID复制

虽然我对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

您可以使用索引和匹配而不是VLOOKUP。使用“索引”和“匹配”可以将值拉回到查找列的左侧

 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”

您可以使用“匹配”确定行,使用“索引”确定要回退的列


这可能会为您省去所有剪切和粘贴的麻烦。

谢谢您的帮助,这确实简化了事情!仍然需要弄清楚我将如何设置一个模板,该模板将自动创建具有此公式的列。我的角色分为IT和管理工作,所以我可能需要一段时间才能有机会对其进行适当的修补,但谢谢。