2017-09-27 10 views
6

式を持つ既存のセルに値(たとえば10)を追加するマクロを設定しようとしています。私はセルに式を維持したいと思います。ここで 式を持つセルに値を追加するExcelマクロ

は、私がこれまで何をやったかである:これは私のために働いていない

Sub addvalue 
'Keyboard Shortcut: Ctrl+Shift+A 

ActiveCell.Formula = ActiveCell.Formula + 10 

End Sub 

。これは、セルが単なる数値ではなく、調整しようとしているセルが数式である場合には機能しません。

調整しようとしているセルに=A1 + 4が含まれていて、このマクロを実行している場合は、マクロ実行後に=A1 + 14にしたいと思います。

+2

これはあなたのファイルとまったく同じですか? 'Sub addvalue()'の後に '()'がありません... – BruceWayne

+0

'ActiveCell.Formula'によって返された文字列を解析し、' + 'や他のシンボルに基づいて分割する必要があります。あなたがする必要があるのは10を加えればいいのですが、@ ScottCranerの解決策は十分に簡単です。 – freginold

+1

ペースト・スペルは '= A1 + 4'を' =(A1 + 4)+ 10'に変えることができます – pnuts

答えて

5

数式自体を変更するには問題があります。しかし、あなたが最後に+10を追加するとして=A1 + 4 + 10を取得することができます:

ActiveCell.Formula = ActiveCell.Formula & "+ 10" 

問題がActiveCell.Formulaが文字列を返し、あなたは文字列に番号を追加することはできませんということです。文字列と新しい部分を連結する必要があります。


編集それが連結するのではなく、値を変更するよう

はそれを作るために:これはすべてのケースではなく、それがない簡単な式のために動作しない場合があります

Sub addvalue() 
'Keyboard Shortcut: Ctrl+Shift+A 
Dim strsplit() As String 
Dim i As Long 
Dim dn As Boolean 


dn = False 

strsplit = Split(Mid(ActiveCell.Formula, 2), "+") 
For i = LBound(strsplit) To UBound(strsplit) 

    If IsNumeric(strsplit(i)) Then 
     strsplit(i) = CDbl(strsplit(i)) + 10 
     dn = True 
     Exit For 
    End If 
Next i 

ActiveCell.Formula = "=" & Join(strsplit, "+") & IIf(dn, "", "+ 10") 

End Sub 

+0

これは何度も何度もやるので+10を付けるのではなく、可能であれば、+ 4を+14で置き換えることをお勧めします。 – Nate

+0

@nate問題は、 '+'で分割して10を足してみると '+ C8 'になったときに発生します。適切な値に '10 'を適切に追加していることを確認するために、コードに多くのチェックを入れる必要があります。最後の値が常に '+ somenumber'であることを保証できれば、それはより簡単になります。 '= A1 + 4'から '= A1 + A2'から '= A1 + 4 + A2'から '= A1 + 4 * A2'までの値は、 '= 4 +あまりにも多くの可能性があります。すべてのケースが考慮されるようにするには、コードを大量にする必要があります。 –

+0

@Nate編集を参照してください。それはほとんどの簡単な数式のために働くはずです。 –

関連する問題