アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
VBAのループについて教えていただきたいです。
更新ボタンを押した際に自動で計算されるプログラムを組んでおります。
計算のモジュールは「Module_g.InputCalc」で引数は(ActiveCell.Row, "支出"または"粗利益")で呼ぶことができます。
現在のコードだと粗利益の部分も支出の計算で入ってしまうため、粗利益に入ったら粗利益の計算がされるようにしたいです。
その時の判定の取り方を教えていただきたいです。
また、支出・粗利益の中の項目は追加していくことがあります。

コード
Sub DateUpdate()

With Sheets("HOME")

Dim i As Integer

For i = 7 To .Cells(Rows.Count, 1).End(xlUp).Row
Call Module_g.InputCalc(i, "支出")
Next
End With

End Sub

「VBAのループ処理について」の質問画像

A 回答 (3件)

こんにちは



>粗利益に入ったら粗利益の計算がされるようにしたいです。
添付図の赤系のところと青系のところだと解釈しましたが、そもそも、ご提示のコードでループの終わりの行を
 .Cells(Rows.Count, 1).End(xlUp).Row
で算出している理由は何なのでしょうか?

ご提示の図から推測するところ、「支出」7~13行、「粗利益」は14~18行というのは固定ではないのでしょうか?
もしそうであるなら、

 IF i<14 Then kamoku = "支出" ELSE kamaoku = "粗利益"
 Call Module_g.InputCalc(i, kamoku)

みたいなことで良いのでは?

表の形式は同様だけれど、行数が可変で固定ではないというのであれば、 i 行のA列の値を見て(空白の場合は上方向に探す)引数を決定するような仕組みにしておけば良いのではないでしょうか?
    • good
    • 0

既に回答は出てますが、A列の最終行の取得方法から見て『粗利益』の各項目については計算されるようになっていると言う事でしょうか?



Sub DateUpdate_2()
Dim i As Integer
Dim komoku As String

With Sheets("HOME")
For i = 7 To .Cells(Rows.Count, "A").End(xlUp).Row
If .Cells(i, "A").Value <> "" Then
komoku = .Cells(i, "A").Value
Call Module_g.InputCalc(i, komoku)
End If
Next
End With

End Sub

それともその辺も検討中なのですか?

Sub DateUpdate_3()
Dim i As Integer
Dim komoku As String

With Sheets("HOME")
For i = 7 To .Cells(Rows.Count, "B").End(xlUp).Row
If .Cells(i, "A").Value <> "" Then komoku = .Cells(i, "A").Value
Call Module_g.InputCalc(i, komoku)
Next
End With

End Sub

こちらはB列で7~最終行を求めループさせてます。
B列の空白セルについては『Module_g.InputCalc』がどうなっているのかで違うかもですが。
    • good
    • 0

こんばんは!



回答ではありません。

>(ActiveCell.Row, "支出"または"粗利益")で呼ぶことができます。
というコトですが、分岐は二つだけでしょうか?
通常は「項目」も選ぶ必要があると思うのですが・・・

項目名があるのであれば、B列で行を選択することが可能になると思うのですが。

※ 具体的なアドバイスでなくてごめんなさい。m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!