Windows XP Home Edition
Excel 2002
変更前は、全く問題なく動作しましたが、
下記のように1行だけ変更しただけで動作後に固まってしまいます。
このようなことは初めてなのですが、
何卒、ご教授お願い致します。
Sub 動作後に固まる()
'注意
Dim c As Range
Do
Set c = Range("A:A").Find(what:="No 01", LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then Exit Do
'c.Offset(-1, 0).Resize(3, 1).EntireRow.Delete '変更前
c.Offset(1, 0).FormulaR1C1 = "固まる" 'この1行だけこのように変更しただけです
Loop
End Sub
No.3ベストアンサー
- 回答日時:
提示されたコードでは、同じセルを無限に「Find」し続けます。
「Do~Loop」を使っているということは、複数の「No 01」をFindしたいのでしょうか?
それなら「FindNext」を使う必要があります。
その場合も気をつけないといけないのは、Find、FindNextは検索値を何度も巡回することです。最初見つけたアドレスと同じアドレスならLoopからExitするという条件が必要になります。
こちらを参考にしてください。
http://www.moug.net/tech/exvba/0050116.htm
ちなみに変更前のコードが動いたのは、「Delete」によってFindしたセルがなくなり新しいセルを見つけ続けたからです。
早速のご回答、誠に有難うございました。
勉強をおこたってました。
ほんのちょっとだけですが、解かってきたようです。
For Each ・・・
For r = 1 To x - 1
などと同じように、単純に解釈しておりました。
甘く見てました。
皆様が良回答でした。
No.4
- 回答日時:
>c.Offset(1, 0).FormulaR1C1 = "固まる"
は動くようだが普通は使わないとおもう。
ちなみに
Sub test01()
Cells(1, 1).Formula = "固まる"
End Sub
は可能にようだ。
普通は
Sub test01()
Cells(1, 2).Value = "固まる"
End Sub
とするとおもうが。
ーーーー
Sub 動作後に固まる()
Dim c As Range
Do
Set c = Range("A:A").Find(what:="No 01", LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then Exit Do
MsgBox c.Address
'c.Offset(-1, 0).Resize(3, 1).EntireRow.Delete '変更前
c.Offset(1, 0).FormulaR1C1 = "固まる" 'この1行だけこのように変更しただけです
Loop
End Sub
とMsgBox c.Addressを入れて実行すればわかるが、無限に繰り返す。
2番目のNo 01のセル位置を見つけるには、FindNextを使い
After指定を適当に指定しないとダメのはず。
該当が2つ以上ありえる場合は、Findをループの中に入れることは普通無い。
Sub test02()
Dim c As Range
Set c = Range("A:A").Find(what:="No 01", LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then Exit Sub
MsgBox c.Address
Set d = c
Do
'c.Offset(-1, 0).Resize(3, 1).EntireRow.Delete '変更前
'c.Offset(1, 0).FormulaR1C1 = "固まる" 'この1行だけこのように変更しただけです
Set d = Range("A:A").FindNext(after:=d)
If d.Address = c.Address Then Exit Sub
MsgBox d.Address
Loop
End Sub
のようになるのではないかな。
全般的に、何がしたいのか、データの情況が質問に書いてなくて、質問が判りにくいので、見当はずれかも知れないが。
No.2
- 回答日時:
「固まる」という意味はどういう意味ですか?
無限ループが起きているということでしょうか?
ご質問の最初のコードと、以下のように文字を入れることとは、コードの持つ役割として若干違います。
以下は、ヘルプを調べれば分かるコードですが、こんな風にしてみたらどうでしょう。
Sub FixedInfiniteLoop()
Dim c As Range
Dim FirstAdd As String
Set c = Range("A:A").Find(What:="No 01", LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
FirstAdd = c.Address
Do
c.Offset(1, 0).Value = "修正後"
Set c = Range("A:A").FindNext(c)
If c.Address = FirstAdd Then Exit Sub '文字に置く
Loop Until c Is Nothing
End If
End Sub
早速のご回答、誠に有難うございました。
>「固まる」という意味はどういう意味ですか?
>無限ループが起きているということでしょうか?
申し訳ありませんでした。
ずっと動作中なんですね!
固まったにしてはどうもいつもと違うとは思っておりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) excel でグループの最後に行を追加。 3 2022/06/14 13:14
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL 前回保存日時を変更する...
-
LINEのアイコンやプロフィール...
-
ACCESSの SELECT SUM
-
「振り替えする」の使い方を教...
-
ENEOSグローブエナジー株式会社...
-
どうして、VBA動作後に固まるの...
-
契約者固有IDと個体識別番号の違い
-
USJ入場日当日の日付変更は可能?
-
複合機のヘッダーの変更ができ...
-
IPアドレスを変更するプログラム
-
BD-REドライブの名前の変更が出...
-
教えて!gooに関して質問があり...
-
WZR-HP-G301NHのMACアドレス...
-
X(旧ツイッター)からバスワー...
-
複数アドレスにメール送信した...
-
どうしたらアドレスを青色で表...
-
@live.jpというメールアドレス...
-
failure notice について
-
オーバーライン  ̄の半角 をメ...
-
メールがエラーで戻ってきまし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「振り替えする」の使い方を教...
-
EXCEL 前回保存日時を変更する...
-
就職活動時のメールアドレス変...
-
USJ入場日当日の日付変更は可能?
-
ETCマイレージサービスのパスワ...
-
BD-REドライブの名前の変更が出...
-
IPアドレスを変更するプログラム
-
ヤフーのメールアドレスの変更...
-
ニコニコ動画のメアド変更がど...
-
外付けHDD 名前の付け方
-
どうして、VBA動作後に固まるの...
-
サブフォームのフィールドの幅...
-
横浜銀行の通帳を、茨城県で記...
-
JR西日本 wester会員 ...
-
ACCESSの SELECT SUM
-
マイクロソフトアカウントのメ...
-
Java1.3はJava1.4に移行
-
「月々の支払いをVISAデビット...
-
フレッツ光からdocomo光
-
教えて!gooに関して質問があり...
おすすめ情報