我在工作表中循环遍历表(Sheet4)并在每个原始列之间插入一个空列。在新的空列中,我想插入一个VLookup函数。
我已经成功插入了列,并且我已经成功地在一个名为FormulaRange的变量中保持了适当的范围(正确的行数)。
我遇到了VLookup的问题。我不知道这是我存储变量的方式,还是我需要在Vlookup之后使用粘贴功能。有人可以看看并帮我一把吗? *注意 - 我将FormulaRange存储为String因为范围不允许我将代码传递给变量。因此,我无法使用FormulaRange.Formula方法。
如果我要手动输入VLookup,我会把它写成= VLOOKUP(B1,RosettaStone_Employees!$ A $ 1:$ B $ 5,2,FALSE),然后复制范围。
Sub InsertColumnsAndFormulasUntilEndOfProductivityTable()
Dim ActivityRange As Range
Dim UserName As String
Dim FormulaRange As String
Dim i As Integer
Dim x As Long
Dim y As Long
Dim Startrow As String
Dim Lastrow As String
Sheet6.Activate
Set ActivityRange = Range("A1", Range("B1").End(xlDown))
Sheet4.Activate
Range("A1").Select
y = Sheet4.Cells(Rows.Count, 1).End(xlUp).Row - 1
x = (Sheet4.Cells(1, Columns.Count).End(xlToLeft).Column) * 2
For i = 1 + 2 To x Step 2
Columns(i).EntireColumn.Insert
Startrow = 2
Lastrow = y
UserName = Cells(1, i - 1)
FormulaRange = Cells(Startrow, i).Address & ":" & Cells(Lastrow + 1, i).Address
FormulaRange = "=VLookup(UserName, ActivityRange, 2, False)"
Next
End Sub
由于
乔纳森
答案 0 :(得分:1)
我稍微改变了你的代码以摆脱表单激活。此外,我将一些内容更改为范围并包含在块中。
这是未经测试的:
Sub InsertColumnsAndFormulasUntilEndOfProductivityTable()
Dim ActivityRange As Range
Dim UserName As String
Dim FormulaRange As Range
Dim i As Long
Dim x As Long
Dim y As Long
Dim Startrow As Long
Dim Lastrow As Long
With Sheet6
Set ActivityRange = .Range("A1", .Range("B1").End(xlDown))
End With
With Sheet4
y = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
x = (.Cells(1, .Columns.Count).End(xlToLeft).Column) * 2
For i = 1 + 2 To x Step 2
.Columns(i).EntireColumn.Insert
Startrow = 2
Lastrow = y
UserName = .Cells(1, i - 1)
Set FormulaRange = .Range(.Cells(Startrow, i), .Cells(Lastrow + 1, i))
FormulaRange.FormulaR1C1 = "=VLookup(R1C[-1],'" & ActivityRange.Parent.Name & "'!" & ActivityRange.Address(1, 1, xlR1C1) & ", 2, False)"
'If you do not want dynamic formulas and just want the value
'then comment out the above and use the below.
'FormulaRange.Value = Application.Vlookup(UserName,ActivityRange,2,False)
Next
End With
End Sub
R1C1
是一个相对的命名法。当它将公式填充到列中时,它将相对于将填充公式的单元格返回单元格。
例如,上面我使用R1C[-1]
。这表示将列的第一行直接放到左侧。因此,如果将公式输入B2
,则会返回A$1
。
[]
表示相对地址。如果没有[]
例如R1C1
,则表示绝对地址并返回$A$1
。因此R1C1:R4C2
会返回一系列$A$1:$B$4
。