
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL 前回保存日時を変更する...
-
フレッツ光からdocomo光
-
「振り替えする」の使い方を教...
-
就職活動時のメールアドレス変...
-
googleの@で始まる文字列を変更...
-
どうして、VBA動作後に固まるの...
-
X(旧ツイッター)からバスワー...
-
複数アドレスにメール送信した...
-
どうしたらアドレスを青色で表...
-
メール送信エラー。宛先アドレ...
-
failure notice について
-
アドレスの語尾 .com .co.jp ...
-
NHKプラス ある日からログイン...
-
yahoo!JAPANのログインができな...
-
スマホに来たメールをパソコン...
-
代理送信の迷惑設定
-
Yahooメールアドレスを変更した...
-
@live.jpというメールアドレス...
-
メールがエラーで戻ってきまし...
-
最近、嫌がらせで勝手に出会い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL 前回保存日時を変更する...
-
「振り替えする」の使い方を教...
-
IPアドレスを変更するプログラム
-
JR西日本 wester会員 ...
-
サブフォームのフィールドの幅...
-
USJ入場日当日の日付変更は可能?
-
オススメの銀行は?
-
教えて… マイカテゴリの変更は...
-
メールの回復がしたいと思います
-
BD-REドライブの名前の変更が出...
-
就職活動時のメールアドレス変...
-
契約者固有IDと個体識別番号の違い
-
フレッツ光からdocomo光
-
マイクロソフトアカウントのメ...
-
TikTokについてです! メアドで...
-
教えて!gooに関して質問があり...
-
ヤフーメールについて
-
カカオIDって変更できるんでし...
-
「月々の支払いをVISAデビット...
-
他日変更の意味をわかりやすく...
おすすめ情報