2017-03-05 93 views
-1

我有一个VBA代码,你可以看到下面,我记录它。在录制它时,它会以偏移量格式编写公式。所以我不知道如何更改范围我需要重新格式化我的Vlookup公式excel

如何转换; R3C[-3]:R[1488]C[2]这通常是B$3:G1489

到:

B $ 3:(列 “G” 最后一个活动单元格)

我怎么能这样做?

Sub duzenle() 

Columns("E:E").Select 
Selection.Copy 
Range("L1").Select 
ActiveSheet.Paste 
Range("E12").Select 
Application.CutCopyMode = False 
ActiveCell.FormulaR1C1 = _ 
    "=IFERROR(VLOOKUP(RC[-3],C.A.!R3C[-3]:R[1488]C[2],4,0),IF(ISBLANK('2017'!RC[7]),"""",'2017'!RC[7]))" 
Range("E12").Select 
Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.End(xlDown)), Type:=xlFillDefault 
Range(ActiveCell, ActiveCell.End(xlDown)).Select 
Columns("E:E").Select 
Selection.Copy 
Range("E1").Select 
ActiveSheet.Paste 
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ 
    False, Transpose:=False 
Columns("L:L").Select 
Application.CutCopyMode = False 
Selection.Delete Shift:=xlToLeft 
Range("A1").Select 
MsgBox "'C.A' Degerleri Guncellenmistir." 

End Sub 

回答

1

您可以删除你的一些不必要的SelectSelection并通过更换你的前几行代码:

Columns("E:E").Select 
Selection.Copy 
Range("L1").Select 
ActiveSheet.Paste 

有了:

Columns("E:E").Copy Range("L1") 

关于你的公式,你需要用Formula代替FormulaR1C1,见下面的代码:

With Worksheets("C.A.") 
    LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row '<--get last row with data in Column G from "C.A." sheet 
End With 

Range("E12").Formula = _ 
    "=IFERROR(VLOOKUP(B3,C.A.!B$3:G" & LastRow & ",4,0)...' <-- the rest of your formula 

编辑1:刚刚修正公式代码行:

Range("E12").Formula = "=IFERROR(VLOOKUP(B3,C.A.!B$3:G" & LastRow & ",4,0),IF(ISBLANK('2017'!L12)," & Chr(34) & Chr(34) & ",'2017'!L12))" 
+0

@efe可以tercan你读过我的回答上面?任何反馈 ? –

+0

我刚读和尝试,但它给了一个错误“范围(‘E12’)。公式= _“”,我不知道为什么,看到下面 ”子duzenle() 列(“ E:E “)复制范围(” L1 “) 范围(” E12 “)。选择 Application.CutCopyMode =假 随着工作表(” CA“) LASTROW = .Cells(.Rows。 (“E12”)。Formula = _(“E12”)。结束(xlUp)。行 End With 范围 “= IFERROR(VLOOKUP(B3,CA!B $ 3:G”&LastRow& “,4,0),IF(ISBLANK('2017'!L12),”“,'2017'!L12)) '' –

+0

使用'_'字符可以将长命令分成几行。它必须是该行中的最后一个字符。如果你不拆分语句,删除'_'字符。 – teylyn