2016-01-29 33 views
0

在Excel中,我写了一个简短的脚本,它应该删除每个包含“*”符号的单元格的第一个字符。我至今是在VBA中,写入相对于范围的公式的语法是什么?

Sub Macro5() 

Dim Rng As Range 
Dim i As Long 
i = 1 

While i <= 20000 
Set Rng = Range("A" & i) 

    If InStr(Rng, "*") > 0 Then 
     Rng.Offset(0, 1).Formula = "=Right(Rng,LEN(Rng)-1)" 
     i = i + 1 
    Else: i = i + 1 

End If 
Wend 
End Sub 

调用脚本似乎工作线,但公式得到放入列B是“=右(RNG,LEN(RNG)-1)”,这给'名称?'错误。如何定义LEN公式以将Rng用作范围,而不是电子表格中的“单词”?

+1

没有测试过,但尽量将其更改为: “=右(” &RNG& “LEN(” &RNG &')-1)“ – sous2817

+2

将''=右(Rng,LEN(Rng)-1)”'改为'“=右(”&Rng.address(0,0)&“,LEN(”&Rng。地址(0,0)&“)-1)”'Vba需要位于引号的外部。 –

+0

太棒了。我知道这会很简单。非常感激! :) – user1996971

回答

1

使用R1C1 type formulae在这种情况下使生活更容易。

Sub RemoveFirstStar() 
    Dim rng As Range, c As Range 

    Set rng = Range("A1:A2000") 

    For Each c In rng.Cells 
     If Left(c, 1) = "*" Then 
      c.Offset(0, 1).FormulaR1C1 = "=mid(rc[-1],2,1000)" 
     End If 
    Next c 
End Sub 

为您的特定代码示例中,IF后更改行:

Rng.Offset(0, 1).FormulaR1C1 = "=Right(RC[-1],LEN(RC[-1])-1)" 
相关问题