前判断処理 Do untilの動作について

このQ&Aのポイント
  • Excel2010における前判断処理のDo Untilの動作について教えてください。
  • A7セルから順にA6セルにデータをコピーしてマクロを実行する場合、A9セルが空欄の時にマクロが実行される理由と対処法について教えてください。
  • Do Untilは、条件がそろったらそれ以降は実行されないという性質があるため、A9セルが空欄の場合でもマクロが実行されてしまいます。対処法として、Do Untilの条件文にA9セルが空欄でないことを追加することで、マクロの実行を制御することができます。
回答を見る
  • ベストアンサー

前判断処理 Do untilの動作について

excel2010 前判断処理 Do Untilの処理について教えてください。 A7セル,A8セル…とデータが入っていて、そのセルのデータをA6セルにコピーしてマクロを実行します。 このマクロは、ピポットテーブルのグラフを作成し、A6セルに入った文字列にシート名称を 変更するという内容になっています。 詳細内容は省きます。 A7セルのデータをA6セルにコピーしマクロ実行 A8セルのデータをA6セルにコピーしマクロ実行 … Anセルのデータが空欄であったらマクロ実行しない という様にしたいのです。 Sub tsumiage2() Dim 行番号 As Integer 行番号 = 7 Do Until Cells(行番号, 1).Value = "" If Cells(行番号, 1).Value = "" Then Exit Do Sheets("(5)人別積み上げ").Select Range("A6") = Cells(行番号, 1).Value macro41 行番号 = 行番号 + 1 Loop End Sub サンプルデータでA7セル,A8セルにデータが入っていて、A9セルが空欄の時、 A7セルをA6セルへコピーしてマクロ実行。 A8セルをA6セルへコピーしてマクロ実行。 A9セルをA6セルへコピーしマクロが実行されエラーのポップアップが出てしまいます。 Do Untilは、条件がそろったらそれ以降は実行されない というのを調べたのですが、A9セルが空欄でマクロが実行されるのは何故でしょうか? 対処法についても教えていただきたく。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 憶測ですが・・・ A9セルは空白に見えても何らかのデータが入っている可能性はないでしょうか? 仮にスペースが入っているとか。 試しにデータ範囲を選択して↓のマクロを実行してみてください。 Sub Sample1() Dim c As Range For Each c In Selection If c = "" Then Exit For Next c On Error Resume Next MsgBox c.Address(False, False) End Sub ※ A9セルも範囲指定できていてメッセージボックスに「A9」が表示されない場合は 何らかのデータが入っているコトになります。 ※ 余計なお世話かもしれませんが、 >Do Until Cells(行番号, 1).Value = "" としていますので、 >If Cells(行番号, 1).Value = "" Then Exit Do は不要だと思います。m(_ _)m

3620313
質問者

お礼

補足を入力した後に、ふと気づきました。 A8セルをA6にコピーした後のmacro41の動作で新規シートが作成され、そのシート上でA9セルにデータが入っているのが原因でした。 macro41の前に If Cells(6, 1).Value = "" Then Exit Do でもよかったのですが、かっこ悪いので Do Until Sheets("(5)人別積み上げ").Cells(行番号, 1).Value = "" としました。 ヒントいただきありがとうございました(*^。^*)

3620313
質問者

補足

回答ありがとうございます。 A7:A8セルを選択してSample1実行→変化なし A7:A9セルを選択してSample1実行→A9のポップアップメッセージが表示されます。 A9は空欄だと思います。 If Cells(行番号, 1).Value = "" Then Exit Do は、空欄だったらマクロを実行しないのを徹底したかったのです。 ※ tsumiage2マクロでmacro41をコメントにして実行すると、A6セルはA8の内容で終了します。 しかし、macro41を実行した場合、A6セルは空欄で終了します。 A9セルをA6セルへコピーしているからです。 不思議です? macro41の前に If Cells(6, 1).Value = "" Then Exit Do を追加したらエラー出なくなったので、とりあえずこれで運用します。

関連するQ&A

  • Do untilで判定されない

    office2010 WORKシートのI4802セルに2019/08/28という日付データが登録されています J2セルに2019/1/1の日付を設定し、その右セルに+1日ずつ設定するマクロ(カレンダ日付イメージ)で、上記WORKシートのI4802セルまでの日付を設定したい。 下記がそのマクロ Sub test() Rows("1:2").Select Selection.ClearContents Range("J2") = "2019/1/1" Dim i As Long Dim day As String day = Worksheets("WORK").Range("I4802").Value i = 11 Do Until Worksheets("Sheet2").Cells(2, i + 1) = day Worksheets("Sheet2").Cells(2, i) = Worksheets("Sheet2").Cells(2, i - 1) + 1 i = i + 1 Loop End Sub 上記を実行すると、ずっと計算して、2063/10/30までいって実行時エラーで停止します。 2019/08/28で終了しないのは何故でしょう? 日付判定になってると思うのですが、原因分からず。 また、その修正方法も教えて頂きたく

  • Excel VBA のDo Until Loopについて

    こんばんは Excel VBAの初心者です。 Do Until Loopを使って B列の値が変わるところ(下記の表だと、空白からコスモスに変わる、4行目。コスモスからチューリップに変わる6行目。チューリップから菊に変わる8行目。)に行を挿入させたいと思い、下記のマクロを組んだのですが、Do Until Loopが理解できませんでした。 どうしたら良いのか教えて頂けないでしょうか。 宜しくお願い致します。 Excelのシート B1  項目 B2  空白 B3  空白 B4  コスモス B5  コスモス B6  チューリップ B7  チューリップ B8  菊 Sub 行の挿入() Dim y As String Cells(2, 2).Select y = Cells(2, 2).Value Do Until Cells(2, 2).Value <> y ActiveCell.Offset(1).Select Selection.EntireRow.Select Selection.Insert shift:=xlDown Loop End Sub

  • VBA Do Until ~ Loop 内にif

    Excel VBAマクロにて、C列のセルのうちOKと書かれたセルのみ塗りつぶすコードを作成したつもりなのですが、動いてくれません。エラー表示も出ません。間違いを指摘して下さる方、あるいは別の書き方があるという方、教えていただけないでしょうか。 下記私が作成したものです。C列にAと書かれたセルが現れるまで処理をするようにしています。 Sub sample() Dim i As Long i = 1 Do Until Cells(i, "C").Value = ”A" If Cells(i, "C").Value = "OK" Then Cells(i, "C").Interior.ColorIndex = 5 End If i = i + 1 Loop End Sub

  • Do loopのマクロ

    以下のマクロの問題点を教えていただきたいのです。 A列を上から順番に調べて、値が10のときだけBに分岐して処理を行い(処理の内容は省略してあります)、またAに戻って、空白のセルが見つかったら処理をやめる、というマクロです。 ところが、これを実行すると空白のセルが見つかってもマクロが止まりません。何が問題でしょうか。 Sub A() Cells(1, 1).Select A: Do Until ActiveCell.Value = "" If ActiveCell.Value = 10 Then GoTo B End If ActiveCell.Offset(1, 0).Select Loop B: ActiveCell.Offset(1, 0).Select GoTo A End Sub

  • Do~Loopステートメント

    Do~Loopステートメントで使わな方が良いステートメントとは? Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが どれの事だか忘れてしまいました。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do While i < 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これは一般的だから使ってもよいと思います。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do Until i = 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これもよく見かけます。 Do While,Do Until以外にもloopステートメントってありますか? あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

  • エクセルの連続処理について教えてください。

    エクセルの連続処理について教えてください。 セルGに得点が入ってます。 G1 86 G2 77 G3 89 G4 93 G5 76 以下のマクロを走らせると Sub 連続処理 () 行=1 Do If Cells(行,7).Value = "" Then Exit Do If Cells(行,7).Value >= 80 Then Cells(行,8).Value = "合格" Else Cells(行,8).Value = "不合格" End If 行 = 行 + 1 Loop End Sub 結果はこうなります   G  H ------------ 1 86 合格 2 77 不合格  3 89 合格 4 93 合格 5 76 不合格 6行目にはデータがないので、キチンと止まります。 では以下の文の場合 行 = 1 Do If Cells(行, 7).Value = "" Then Exit Do Cells(行, 8) = Value n = Cells(行, 7) Select Case True Case= ....省略.... Value =....省略.... Case= ....省略.... Value =....省略.... Case= ....省略.... Value =....省略.... ----省略---- Case Else Value = n End Select 行 = 行 + 1 Loop これだとSelect Case で決められた値が セルG1の参照結果がセルH2に セルG2の参照結果がセルH3に セルG3の参照結果がセルH4に セルG4の参照結果がセルH5に セルG5の参照結果は表示されず セルH1は空白になります。 どこがいけないのでしょうか? よろしくお願いします。

  • マクロ実行で実行時エラー13発生

    office2016 AK24列から9行毎に元のセル値に+10するマクロでエラーになります。 実行時エラー13 型が一致しません AK列は見た目上は全てのセルが空欄で書式は標準となっています。 AK2626セルまで値を設定する行は存在しています。 G2632セルまで、空欄セル無くコメントが入っているのでG列をループさせる条件にしています。 動作させているマクロは次の通り Sub Macro4() ' Dim i As Long Sheets("計画").Select ' i = 0 Do Until Cells(i + 24, 7).Value = 0 Cells(24 + i, 37).Value = Cells(24 + i, 37).Value + 10 i = i + 9 Loop End Sub マクロ動作させると、AK294セルまで値は入るが、AK303セル以降の値が入りません。 デバッグモードで動作させて同じ結果(AK303セル以降値が入らない)になりますが、何故実行時エラー13になるかが分かりません。 計画シートのAK列を削除してマクロ動作させるとエラー発生しません。 何が原因でマクロが停止しているのか、原因を把握する手段を教えていただきたく。

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。

  • VBA エクセル #N/Aで実行時エラー 13 型が一致しません

    お世話になります。 あるマクロを実行しようとすると、#N/Aのセルに来ると「実行時エラー 13 型が一致しません」とエラーが出てしまいますので、#N/Aを?に書き換えようと下記のマクロを作りましたが結果は同じでした。たぶんとんでもなく初歩的なミスだと思うのですが、どう対処すればよいのでしょうか?よろしくご指導くださいませ。 セルの内容は縦にこんな感じで並んでいます。 755754 755754 #N/A #N/A 713512 713512 マクロは Sub reword() Dim i As Long i = 1 Do Until Cells(i, 1).Value = "" If Cells(i, 1).Value = "#N/A" Then Cells(i, 1).Value = "?" End If i = i + 1 Loop End Sub #N/AのところでLoopはとまり、エラーが出ます。

  • 2重のDo~Loopは?

    Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop

専門家に質問してみよう