- ベストアンサー
EXELマクロ計算式
家計簿を作成中です。前の日にちの残高から収入をたし、支出を引き残高を計算したいのですが、 B列収入、C列支出、D列残高 Range("D3").Select ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-2]-RC[-1]" Range("D4").Select と言う計算式を"D3"などの数値ではなく変数など代入式をつかった式を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 以下でいかがでしょうか? Sub test() Dim Rng As Range Set Rng = Cells(Cells.Rows.Count, 4).End(xlUp).Offset(1) If Intersect(Rng, Cells(2, 4)) Is Nothing Then Rng.FormulaR1C1 = "=R[-1]C+RC[-2]-RC[-1]" Else Rng.FormulaR1C1 = "=RC[-2]-RC[-1]" End If End Sub
その他の回答 (4)
- gonta_goma
- ベストアンサー率50% (37/73)
D列に =R[-1]C+RC[-2]-RC[-1] という式を、下へ向かって入力していきたいのなら、下記がつかえます。 For i = 3 to 10 Cells(i,4).FormulaR1C1 = "=R[-1]C+RC[-2]-RC[-1]" Next i この例では10行目まで式をいれています。
補足
nishi6さんの補足とおなじです。宜しくお願いします。
- itohjin
- ベストアンサー率0% (0/1)
nishi6さんのSanshiki1と殆ど一緒です。 これの場合はCellsを使った書き方です。 Cellsの書式:Cells(行数,列数) Range("D3") = Cells(3,4) 。。D3セルは3行目の4列目 Dim tRow As Integer '行数の変数名 For tRow = 3 To 33 Cells(tRow, 4) = Cells(tRow - 1, 4) + Cells(tRow, 2) - Cells(tRow, 3) Next (この例だと、D2に前月末日の残高が入っているのが前提です。) 家計簿の記入方法に拠るかもしれませんが、マクロより式を使った方が良いかもしれません。 式の例:=D2+B3-C3 (これをD3に入れて、オートフィルをする) (この例だと、D2に前月末日の残高が入っているのが前提です。)
補足
nishi6さんの補足とおなじです。宜しくお願いします。
- nishi6
- ベストアンサー率67% (869/1280)
マクロ記録をした算式と思いますが、下のSanshiki1は質問にある、R1C1参照形式で書いた例です。マクロ記録で作られた、Selectなどは使用していません(削除しています) xを変数にして、D3から31個(下に向かって)算式を書く例です。 2つ目の式は直接書くならこんな感じかなと作ったものです。 マクロを書く場合、セル操作については、Range、Cells、Offsetを理解すれば、たいていの記録したマクロは汎用に書き換えることができると思います。 ご参考に。 Sub Sanshiki1() Dim x As Integer For x = 3 To 33 Range("D" & x).Formula = "=R" & (x - 1) & "C4" & "+R" & x & "C2" & "-R" & x & "C3" Next End Sub Sub Sanshiki2() Dim rg As Range For Each rg In Range("D3:D33") With rg .Formula = "=" & .Offset(-1, 0).Address & "+" & .Offset(0, -2).Address & "-" & .Offset(0, -1).Address End With Next End Sub
補足
説明が少し足りなかったようです。A列の日付、例えばA2の9/1のD2残高x円から コマンドボタンを押すと、B3の収入y円、C3の支出z円を計算し、D3残高x'円を出したいのですが、 コマンドボタンを押すたびD4、D5と計算したいのですが。 宜しくお願いします。
- holy_s
- ベストアンサー率20% (1/5)
こんばんは。 変数を使った代入式ということですが、 Sub test() Dim strWork As String Dim intI As Integer For intI = 1 To 10 strWork = "D" & intI Range(strWork).Select '----- '処理' '----- Next End Sub こういった感じでしょうか? はずしていたら、ごめんなさい。
補足
ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-2]-RC[-1]" この式を組み込めばよいのでしょうか。うまく動かなかったもので・・・
お礼
回答ありがとうございます。うまく動きました。式の方も、簡潔でわかりやすかったです。ホームページの方も参考に見てみたいと思います。