VBA withの使い方についての質問

このQ&Aのポイント
  • VBAの参考書で学習している中で、withの使い方につまずいています。
  • 具体的には、Excel2002でよく使用される見積書の表で、withを使って横方向の掛け算を下方向に連続して行う方法を学びたいです。
  • 現在、ループ内にwithを使って計算処理を行いたいのですが、アクティブセルが永久ループに入ってしまう問題が発生しています。どこに問題があるかわかりません。助けてください。
回答を見る
  • ベストアンサー

VBA withの使い方

VBAの参考書で勉強をしていますが、withの使い方で引っかかっているので、どなたかご教授ください。Excel2002 よくある見積書の表で、横方向の掛け算を行方向下に連続して行おうとしています。 C列-数量 D列-単価  E列に、C列の数量×D列の単価 をVBAで行の先頭から下方向に順番に計算する。 その際に、C列の数量のセルが空白だったら何もせず終了という下記のループの方法が 参考書に書いてあります。(セルE14がE列の計算する最初のセル) Range("e14").Select Do Until ActiveCell.Offset(0, -2).Value = "" With ActiveCell .Value = .Offset(0, -2).Value * .Offset(0, -1).Value .Offset(1, 0).Select End With Loop 上記のwithの位置をDo~Loopの外に出して以下のように書き換えたら、 Range("e14").Select With ActiveCell Do Until .Offset(0, -2).Value = "" .Value = .Offset(0, -2).Value * .Offset(0, -1).Value .Offset(1, 0).Select Loop End With 最初のセルE14は正しく計算処理をするが、1つしたのセルにアクティブセルが移動した後、永久ループに入ってしまいます。 「デバック」ボタンをクリックすると[.Offset(1, 0).Select]の行が黄色くなっているのですが、どこに問題があるのかが分からない状態です。 お手数ですが、よろしくお願いします。

  • libu
  • お礼率100% (6/6)

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

'↓ここで セルE14 がアクティブになる Range("e14").Select '↓ここで ActiveCell の参照するセルが E14 (固定)になる With ActiveCell '~以降 の 「.」 では セルE14 を固定参照する~ Do Until .Offset(0, -2).Value = "" ということじゃないですか? つまり Loop しても With で参照しているセルは随時変わっていないので そのまま先に進めなくなると。

libu
質問者

お礼

ご返答ありがとうございます。 確かに、Loopの手前に.addressでセル番地を確認しましたら、 E14と帰ってきました。問題解決しました。ありがとうございます。

関連するQ&A

  • エクセルVBAでの関数

    下記、コードでセルに関数を入れるようにしてるのですが 関数で得られた値をセルに反映されるようにしたいのですが Dimを使用してもどう指定してよいのかわからず苦戦しております。 宜しくお願い致します。 Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Offset(1, 0).Select End With Loop Range("A1").Select Do Until ActiveCell.Offset(0, 2).Value = "" With ActiveCell .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" .Offset(1, 0).Select End With Loop

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

  • A2の値がA1の値と同じ場合はB2にB1の値+1をして

    A2の値がA1の値と同じ場合はB2にB1の値+1をして A2の値がA1の値と違う場合はB2に"1"を繰り返しさせて入力するように 以下としたのですが、A列の値がなくなる限り1が入力されるだけなのですが どうすれば、A列のセルに同じ値が続く場合連番とすることができるでしょうか。お願いします。 range("B1").value = 1 range("B2").select dim 番号 As varient 番号 = activecell.offset(-1, -1).value do until activecell.offset(0,-1).value = "" with activedell if offset(0, -1).value = 番号 then offset(0, 0).value = offset(-1, 0).value + 1 end if offset(0, 0).value = "1" offset(1, 0).select end with loop

  • VBAの記述あってますか?それともミスプリ?

    まちゅといいます。よろしくお願い致します。 昔買ったVBAの入門書をみながら、問題を解いていたのですが、どうにも納得いかない部分がありましたので質問させていただきます。 添付した画像のC列はA1×B1の答えが入るようになっています。 C17にはオートSUMなどは入っておらず、A1×B2の答えを計算すると C1に答えを記述、その都度C17に答えが加算されて最後に消費税と合計も記述されるというDo~Loopの問題なのですが、下記のマクロではどうしてもC列が計算されないんですがこれはミスプリントですか? それとも私が勘違いしてますか? ※インプレス「できるexcel2000マクロ&VBA編」P148より Sub test4() Range("C1") = 0 Range("C1").Select Do Until ActiveCell.Offset(0, -2).Value = "" With ActiveCell Range("C17").Value = Range("C17") + .Value .Offset(1, 0).Select End With Loop Range("C18") = Range("C17").Value * Range("D18").Value Range("C19") = Range("c17").Value + Range("C18").Value End Sub

  • ExcelのVBAについて教えてください

    ワークシートの1行目から、任意の行数(行数は毎回違う)を削除する方法を教えてください。 E1から下に見にいって空白でないセルが現れたら、 そのひとつ上の行までを削除する。 Range("E1").Select Do Until ActiveCell = "" If ActiveCell = "" Then Selection.Offset(-1).Select Loop ここまでできましたが、続きがわかりません。 よろしくお願いします。 あとVBAのコードについて詳しく載っているURLを ご存知でしたら教えてください。 よろしくお願いします。

  • エクセルでプロシージャが終了しません。

    ユーザーフォームのボタンをクリックしたら、特定のセルに現在の時刻を入力するマクロを作っています。 入力するところまではうまくいったのですが、プロシージャが終了しないので保存することができません。 どこが違うのかわからないので、わかる方よろしくお願いいたします。 Private Sub cmd1_Click() Dim hiduke As Date Dim hiduke2 As Integer hiduke = Now() hiduke2 = CInt(Day(hiduke)) If chk1.Value = True Then Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 2).Value = hiduke Else Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 8).Value = hiduke End If End Sub

  • エクセルVBAで無限ループ

    教えてください。 以下の2つのエクセルマクロはまったく同じことをさせようとしているのですが、test02の方は.Offset(1).Activateが働かないのか、無限ループに陥ってしまいます。 単にActiveCell.という記述をWith~End Withでまとめただけなのになぜこうなるのでしょうか? Sub test01() ActiveSheet.Cells(1, 1).Activate Do While ActiveCell.Value <> "" If Not IsNumeric(ActiveCell.Value) Then ActiveCell.Offset(0, 1).Value = "文字" ElseIf ActiveCell.Value > 0 Then ActiveCell.Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then ActiveCell.Offset(0, 1).Value = "負数" Else ActiveCell.Offset(0, 1).Value = "その他" End If ActiveCell.Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End Sub Sub test02() ActiveSheet.Cells(1, 1).Activate With ActiveCell Do While .Value <> "" If Not IsNumeric(.Value) Then .Offset(0, 1).Value = "文字" ElseIf .Value > 0 Then .Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then .Offset(0, 1).Value = "負数" Else .Offset(0, 1).Value = "その他" End If .Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End With End Sub

  • VBA Do Until内で値の貼り付けができない

    Excel2003を使用しております。 コピー&値のペースト作業をやってくれるマクロを作成しております。 具体的には、名簿に公がついていれば、その3つ左の名前をD27へ値のみコピペし、 D27がすでに値があれば、D28に書くことを、D37までループするようにしております。 しかし困ったことに、Do Untilコードを使用しておりますが、このコードではなぜか値の貼り付けが出来なくなります。 Sub Ns公() Dim work As Range Set work = Selection If Selection.Value = "公" Then ActiveCell.Offset(0, -3).Select Selection.Copy Do Until Range("D37").Select Range("D27").Select If Selection.Value = "" Then Selection.PasteSpecial paste:=xlPasteValues work.Select Else ActiveCell.Offset(1).Select End If Loop If Range("D36").Value <> "" Then Do Until Range("I37").Select Range("I27").Select If Selection.Value = "" Then Selection.PasteSpecial paste:=xlPasteValues work.Select Else ActiveCell.Offset(1).Select End If Loop work.Select End If work.Select End If work.Select ActiveCell.Offset(1).Select 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

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?