- ベストアンサー
VBA ループ条件の作り方
ループの使い方で質問です。 A1セル 1000 A2セル 2000 A3セル 2000 A4セル 5000 A5セル 40000 A6セル =sum(a1:a5) とあり、A1~A5(数字のセル)だけに順番に特定の処理を行い、A6(数式のセル)があったらそこで終了するようにしたいです。 Do Loop で作成しているのですが、数字セル→続行、数式セル→終了と判断する方法が知りたいです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
HasFormulaで判別する問題でしょう。 Sub test01() d = Range("A65536").End(xlUp).Row t = 0 For i = 1 To d If Cells(i, "A").HasFormula Then s = Cells(i, "A").Formula p = InStr(s, "=SUM") If p <> 0 Then MsgBox s t = t + Cells(i, "A") Else MsgBox s End If End If Next i MsgBox t End Sub ーー 例データA2:A14 A5とA11はsUM関数 A14は=A12+A13 上記ではSUM関数の入っている行の合計を出している 12 23 45 80 22 1 2 5 6 36 1 2 3
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 端に、コードを他人に作らせるだけではいけないと思います。 あえて、コードの勉強しているなら、コードを見せたほうがよいですね。 どの言語でも同じですが、 Do ~ Loop は、For ~To より難しいです。 数字セル(ただし、文字列は除く) VarType(Cells(i, 1).Value) And vbDouble 文字列の数字を含むなら、 IsNumeric(Cells(i, 1).Value) ※Value プロパティは常識的に入れたほうがよいです。 数式セル 終了条件として Cells(i, 1).HasFormula Or IsEmpty(Cells(i, 1)) なお、#1 さんの、「仕様上の最大行数を超えてはならない」ということは、考えなくてよいと思います。一定の条件をクリアしていれば、非常識な使い方をすることは除外してもよいのではないか、と思います。
お礼
よくわかりました、ありがとうございます!本を読みながら作っているんですが、わからないときは、今後はコードも載せて質問させていただくようにします。
- pbforce
- ベストアンサー率22% (379/1719)
質問に対する完成度が上がると思うので > 最大値の求め方知らないんだよね・・・ RowMax = ActiveSheet.Rows.Count
お礼
よくわかりました、ありがとうございました!
- himajin100000
- ベストアンサー率54% (1660/3060)
Option Explicit Private Sub CommandButton1_Click() Dim i As Long 'iがExcelの仕様上の最大行数を超えてはならない・・・んでストップかけたいんだけど, 'バージョンによって差異があるはず。最大値の求め方知らないんだよね・・・ '(なので最初から最後まで式が存在しないときオーバーフローで落ちます 'VBのIntegerの最大値は32767くらいなのでLongでないと駄目 i = 1 Do While Not Sheet1.Cells(i, 1).HasFormula Sheet1.Cells(i, 1).Interior.ColorIndex = 7 i = i + 1 Loop End Sub
お礼
よく分かりました、ありがとうございました!
お礼
よく分かりました、ありがとうございます!