Windows XP Home Edition
Excel 2002
下記1のマクロの実行後に必ず、
編集→置換をクリックしますと、画像の画面が出ます。
そしてExelを再起動すると、編集→置換をクリックしても問題なく使用できます。
しかし、再度、下記1のマクロを実行後、
●編集→置換をクリック→画像の画面が出ます。
何回、行ってみても同じです。←このような事はよくあるのでしょうか?
下記1のマクロ自体は、正常に動作します。
しかし、
次の作業で、別のマクロを実行しますと、動作はするのですが、
下記2の一部のコードの「置換」が行われなくなります。
素通りしてしまいます。非常に困ります。
しかし、この「別のマクロ」に On Error Resume Next を追記すると
動作します(コードの「置換」も行われます)。
しかし、この直後も必ず、●編集→置換をクリック→画像の画面が出ます。
下記1の「いい」マクロだけを除いて実行するマクロは問題はありません。
ですから、次の作業で、下記2の一部のコード(置換)も、
On Error Resume Next を追記しなくても正常動作してくれます。
どうも、「下記1」の「いい」に問題があるように思いますが・・・
つなぎ合わせ過ぎでしょうか・・・
原因がはっきり解かりませんが、ただ、今までに、マクロの実行作業中にあまり、
「編集→置換をクリック」の操作はしたこはないので、発覚することがなかったのかもしれません。
●をなんとか解決できませんでしょうか?
参考:下記2の#DIV/0! #VALUE! は、数値以外の空白セル 、0 、文字等の為になります。
(これは直接的な原因ではないと思います)
何卒、よろしくお願い致します。
Call 下記1
Private Sub 下記1()
Call いい
Call うう
Call ええ
Call おお
End Sub
Private Sub いい()
Dim i As Integer
Dim nin As Range
Windows("123.xls").Activate
Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1
For i = 1 To Worksheets.Count - 1
Worksheets(i).Activate
With Worksheets(i)
For Each nin In .Range("B4", .Range("B4").End(xlDown))
If nin.Cells.Value = 1 Then
nin.Offset(0, -1).Copy Cells(2, 6)
End If
Next nin
End With
Call かか
Range("A23", Range("A23").End(xlDown)).Copy _
Destination:=Worksheets(Worksheets.Count).Range("IV3").End(xlToLeft).Offset(0, 1)
Next i
End Sub
Private Sub かか()
Dim fWord As Integer, fAdd, c
fWord = Cells(2, 6).Value
Range("L3").Copy Range("A23")
With Range("G:G")
Set c = .Find(fWord, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
fAdd = c.Address
Do
c.Offset(0, 5).Copy
Range("A65536").End(xlUp). _
Offset(1, 0).PasteSpecial Paste:=xlAll, _
Transpose:=True
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> fAdd
End If
Set c = Nothing
End With
'次に、同様にH列にも動作させる
With Range("H:H")
Set c = .Find(fWord, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
fAdd = c.Address
Do
c.Offset(0, 4).Copy
Range("A65536").End(xlUp). _
Offset(1, 0).PasteSpecial Paste:=xlAll, _
Transpose:=True
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> fAdd
End If
Set c = Nothing
End With
End Sub
ーーーーーーーーーーーーーーーーーーーーー
'下記2
With Range(Range("A2").End(xlDown).Offset(3, 6), Range("A65536").End(xlUp).Offset(0, 25))
.Replace What:="#DIV/0!", Replacement:="0.0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:="#VALUE!", Replacement:="0.0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
No.4ベストアンサー
- 回答日時:
#ぁー…失礼。
なかなかhitしなかったもので...orz『[XL2002] プログラムから Range.Find 操作を実行した後に置換機能が機能しなくなる』
http://support.microsoft.com/kb/322007/
強制終了の現象ではありませんが、関連しているのかもしれません。
Service Pack 2 で解消されているようです。
XPはService Pack 3 が最新ですか。それを適用すれば解消する可能性が高いです。
>Excel2002のアップデートは定期的に実行してますか?
XPはService Pack 3でしたが、
Office は全く行っておりませんでした。
ズバリのサポートページがあったんですね!
私の不慣れでページ検索等に時間がかかりましたが、
Service Pack 2でばっちり解決できました。
私側の何かのトラブルの原因だろうと思っており、
解決できるとは思っておりませんでした。
きっちりコードまでも提示して頂き、
この度は、誠に有難うございました。
No.3
- 回答日時:
Excel2002のアップデートは定期的に実行してますか?
修正プログラムをチェックし、最新の状態にしておいたほうがいいですよ。
Microsoft Updateで確認してみてください。
それで解消しない場合、以下のコードではどうでしょう。
Private Sub test()
Dim fWord As Variant
Dim fAdd As String
Dim c As Range
fWord = Cells(2, 6).Value
If Not IsNumeric(fWord) Then MsgBox "error data": Exit Sub
Range("L3").Copy Range("A23")
With ActiveSheet.UsedRange.Columns("G:H")
Set c = .Find(What:=CStr(fWord), _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchByte:=False)
If Not c Is Nothing Then
fAdd = c.Address
Do
Cells(c.Row, "L").Copy
Range("A65536").End(xlUp). _
Offset(1, 0).PasteSpecial Paste:=xlAll, _
Transpose:=True
Application.CutCopyMode = False
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> fAdd
End If
End With
Application.CutCopyMode = False
Set c = Nothing
'Cells.Find ""
End Sub
効果なければ最後の
'Cells.Find ""
を非コメントにして活かしてみてください。
Findメソッドの設定を引きずる点に障害があるような気がしますね。
What:=CStr(fWord)...で文字列として明示してみてどうなるか、
Cells.Find ""...で検索値をクリアしてみてどうなるか、
試してみてください。
No.2
- 回答日時:
>>何回、行ってみても同じです。
←このような事はよくあるのでしょうか?>よくある事ではないと思いますが。
私にも、VBAとしてのある組み合わせで起こる、同様のアプリケーションレベルのハングがあります。
その組み合わせをしないようにすればよいのですが、時々、失敗してしまいます。
ご質問の件で、こちらの考えを単刀直入に言うと、個々のコードは統合すると全体的に無理がでるようです。コードは、めまぐるしくオブジェクトが移動しているようです。たとえでいうなら、大型車で、町中をあちこちを郵便配達でもするような感じです。勢いで走ってはいても、途中でガソリン(メモリ)がなくなって、次の始動では、動かなくなってしまうのかもしれません。たぶん、ガソリンタンクの大きなもの(上位バージョン)なら、問題は起こらないかもしれません。
ある程度の大きさのシートを扱うのに、VBのようにつなげてしまいますと、個々の問題はでなくても、サブルーチンで扱ったオブジェクトの痕跡を残したまま、次につなげていますから、それが累積して、問題が発生するのだと思います。理屈では、そうやってつなげれば続いていくように思うかもしれませんが、Excel VBAの数メガの、限られたメモリの中でやりくりしているわけですから、そう思い通りになりませんね。
具体的なコードは示しませんが、Findメソッドをやめて、オートフィルタなどを使って、それをコピーしたほうがよいです。Find メソッドと、検索・置換コマンドは、同じエンジンを使いながら直結していませんから、もしかしたら、そこにバグが存在しているかもしれません。もう、ここらになると、ご自身で解決していかなくてはならないと思います。
それに、個々のコードには甘さが残っています。たぶん、それぞれはエラーはでないし、個々のコードとしては、掲示板としては、合格ランクに入るけれども、ワンランク上のコードにするには、もう少し、きちっと親オブジェクト(Bookやシート)を明示して、書いたほうがよいですね。それで、エラーが発生しなくなるということではありませんが。
もし、現状のままなら、ともかく、サブルーチンで全部つなげようとしないことですね。
それと、以下は問題ありませんが、このように範囲を限定する必要があるのでしょうか?
また、私のほうでは、Replaceメソッドでは置換は出来ません。Versionの違いだと思います。
それに、0.0 としても、書式が、0.0になっていなければ表示しません。数字を入れると数値に変わるという、型のキャスティングが起きてしまい、セルの書式に反映されてしまいます。
> With Range(Range("A2").End(xlDown).Offset(3, 6), Range("A65536").End(xlUp).Offset(0, 25))
> .Replace What:="#DIV/0!", Replacement:="0.0", LookAt:=xlPart, _
> SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
> ReplaceFormat:=False
私なら、こう書きます。
ただし、エラー値は、数式であることが条件です。.Range("A2").End(xlDown) ここは微妙です。(= 甘さが残っています。→エラーや失敗の可能性があります。)
'-------------------------------------------
Dim r As Range
With ActiveSheet
With .Range(.Range("A2").End(xlDown).Offset(3, 6), _
.Range("A65536").End(xlUp).Offset(0, 25))
On Error Resume Next
Set r = .SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
End With
End With
If Not r Is Nothing Then
r.Value = 0
End If
'-------------------------------------------
p.s.OkWaveの改編に伴ない、掲示板の雰囲気も変わり、今までの常連は肩身も狭くなりましたね。もう前のような発言をしていくことはやめることにしました。
よく見ますと、
回答を締め切った後でも「お礼をつける」ことができたのですね。
本ページの各投稿欄の記載が長文かつ画面が長くなってたこともありまして、
Wendy02様の投稿を見落としてしまいました。
私が、あわてていて、せっかくご回答して頂いたのに、「お礼をつける」ことがもおできないと思っておりました。
遅ればせながらですが、
ご回答、どうも有難うございました。
No.1
- 回答日時:
>●編集→置換をクリック→画像の画面が出ます。
>何回、行ってみても同じです。←このような事はよくあるのでしょうか?
よくある事ではないと思いますが。
ちょっと似た事例だと
http://oshiete1.goo.ne.jp/qa5526385.html
例えば新規Bookに各シートのセル範囲をコピーして
VBAコードもコピーして移設し、試した場合どうなるか調べてみてはどうでしょう。
(Bookやシートのコピーではなく、データやコードのみコピー)
それでも発生するなら
同PCに別ユーザーでログインして試してみるとか
可能なら別PCで試してみるとか。
特定のシートやBookの現象なのか、
特定のユーザー環境での現象なのか、
特定のPCでの環境なのか、
それによって解決のアプローチも変わってくるかと思います。
他PCのExcel2002で、かつ移設した新規Bookでも発生するなら
データかVBAコードに原因があるのかもしれません。
その場合、現在ご提示の情報だけでは判断は難しいです。
>どうも、「下記1」の「いい」に問題があるように思いますが・・・
との事ですが、
>しかし、再度、下記1のマクロを実行後、
>●編集→置換をクリック→画像の画面が出ます。
この下記1のマクロではなく
Private Sub いい() を単独で実行後『編集→置換』でも強制終了しますか?
検索がらみなのでコードをちょっと見直してみてもいいかもしれませんが。
Private Sub かか()
Dim fWord As Variant
Dim fAdd As String
Dim c As Range
fWord = Cells(2, 6).Value
If Not IsNumeric(fWord) Then MsgBox "error data": Exit Sub
fWord = CLng(fWord)
Range("L3").Copy Range("A23")
With ActiveSheet.UsedRange.Columns("G:H")
Set c = .Find(What:=fWord, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not c Is Nothing Then
fAdd = c.Address
Do
Cells(c.Row, "L").Copy
Range("A65536").End(xlUp). _
Offset(1, 0).PasteSpecial Paste:=xlAll, _
Transpose:=True
Application.CutCopyMode = False
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> fAdd
End If
End With
Application.CutCopyMode = False
Set c = Nothing
End Sub
もしくは、メニューがらみという事もあり、『xlbファイル』の再構築を試みてもいいかも。
http://support.microsoft.com/kb/880939/JA
また、
>下記2の一部のコードの「置換」が行われなくなります。
>素通りしてしまいます。...
こちらのほうは、検索対象が数式の結果の#DIV/0!や#VALUE!のままで、値化されていないので
検索にひっかかっていないという可能性はないですか?
素通りした時に、念のため確認してみてください。
この回答への補足
早速のご回答誠に有難うございます。
単独で実行等してみました。
そして
>例えば新規Bookに各シートのセル範囲をコピーして
>VBAコードもコピーして移設し、試した場合どうなるか調べてみてはどうでしょう。
>(Bookやシートのコピーではなく、データやコードのみコピー)
も行ってみました。
が、必ず、●編集→置換をクリック→画像の画面が出ます。
現時点では、
Call かか
だけに、間違いなく原因があると思われます。
必ず、●編集→置換をクリック→画像の画面が出ます。
ただ、上記●の直前に★編集→検索→置換をクリック→閉じる をしてから
○編集→置換をクリック と行いますと全く問題はありません。
>同PCに別ユーザーでログインして試してみるとか
やり方がよくわかりませんので、調べてみます。
>可能なら別PCで試してみるとか。
これから、行ってみます。
どうも有難うございます。
>可能なら別PCで試してみるとか。
別PC(Excel 2003)は全く問題ありませんでした。
別PC(Excel 2002、ExcelがインストールされていないPCへ、私のPCと同Excel 2002を純正ソフトからインストールしました)
は、必ず●となり、●の直前に★編集→検索→置換をクリック→閉じる をしてから
○編集→置換をクリック と行いますと全く問題はありません。
私のPCと全く同じ結果でした。
ご提示して頂きましたコードも同様に、●となりました(私のPCだけで行いました)。
でも、このコードのほうがきっちり安全安心、かつ早いので使用させて頂きます。
現時点の結論は、Excel 2002自体に問題があり、そして「Call かか」との相性に問題があるように思われます。
恐れ入ります。
現時点でおわかりになる範囲で結構ですので、原因であろう箇所がおわかりでしたら、
簡単にその箇所だけで結構ですので、教えて下さればと思っております。
お時間のおありの時で結構でございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word文書、取り消し線部分の一...
-
excelマクロ ボタンを押して文...
-
word である文字をすべてイタリ...
-
Wordの脚注を,1)・・2)・・3)...
-
ワードで半角英数の文字だけ選...
-
word ある文字色の部分のみ別の...
-
エクセルでシートにある赤文字...
-
ワードの隠し文字を空白(スペ...
-
wordの置換の技について教えて...
-
一遍に強制的に改行し、一遍に...
-
Wordデータから,特定の単語を...
-
「WORD」での作業 日本語・英...
-
Word2000で括弧の中の文字だけ...
-
word置換で改行は置換できますか?
-
コピペ 改行記号を空白に置換
-
エクセル内の文字列をワードで...
-
化学記号の置換
-
ワードで上付き文字に置換
-
ワードの箇条書き機能が使われ...
-
ワードで特定の文字列だけを太...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでシートにある赤文字...
-
Excelの表中,数字の「1」をす...
-
ワードで赤字のみを削除する方法
-
Wordでカッコで括った文字を一...
-
ワードで半角英数の文字だけ選...
-
箇条書きのアタマに一括で「・...
-
ワードの表の中の値の表示形式...
-
Wordデータから,特定の単語を...
-
excelマクロ ボタンを押して文...
-
「WORD」での作業 日本語・英...
-
Wordの脚注を,1)・・2)・・3)...
-
wordで特定の色だけ印刷しない方法
-
エクセルで、コンマをピリオド...
-
word 2003で、赤い文字(あるい...
-
Word相互参照の文字を一括で変...
-
EXCEL2010のハイパーリンク先の...
-
英数字のフォント「Century」に...
-
ワードで太字になっているとこ...
-
セルの中の不要な文字を削除し...
-
word である文字をすべてイタリ...
おすすめ情報