2016-01-29 32 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)" 
相關問題