• ベストアンサー

VBA ループ条件の作り方

ループの使い方で質問です。 A1セル 1000 A2セル 2000 A3セル 2000 A4セル 5000 A5セル 40000 A6セル =sum(a1:a5) とあり、A1~A5(数字のセル)だけに順番に特定の処理を行い、A6(数式のセル)があったらそこで終了するようにしたいです。 Do Loop で作成しているのですが、数字セル→続行、数式セル→終了と判断する方法が知りたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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

tanakataiti
質問者

お礼

よく分かりました、ありがとうございます!

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 端に、コードを他人に作らせるだけではいけないと思います。 あえて、コードの勉強しているなら、コードを見せたほうがよいですね。 どの言語でも同じですが、 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 さんの、「仕様上の最大行数を超えてはならない」ということは、考えなくてよいと思います。一定の条件をクリアしていれば、非常識な使い方をすることは除外してもよいのではないか、と思います。

tanakataiti
質問者

お礼

よくわかりました、ありがとうございます!本を読みながら作っているんですが、わからないときは、今後はコードも載せて質問させていただくようにします。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.2

質問に対する完成度が上がると思うので > 最大値の求め方知らないんだよね・・・ RowMax = ActiveSheet.Rows.Count

tanakataiti
質問者

お礼

よくわかりました、ありがとうございました!

回答No.1

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

tanakataiti
質問者

お礼

よく分かりました、ありがとうございました!

関連するQ&A