[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索した行を移動するには』(naomi)
マクロ初心者です。自分なりにいろいろなサイトを参考にしながら作ってみたのですが、最後にエラーが出てしまいます。どうしてなのでしょうか?
【やりたいこと】
メッセージボックスに入力した文字をA列で検索し、検索にマッチした行を1行目へ移動(カット&ペースト)する。
Sub test() Dim i As Long Dim gyo As Long Dim ret As String
ret = InputBox("検索文字を入力して下さい。") If Len(ret) = 0 Then MsgBox "キャンセルされました" Exit Sub End If
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Range("A" & i) <> "" Then Range("A" & i).Select Cells.Find(What:=ret, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ .Activate gyo = ActiveCell.Row Rows(gyo).Select Selection.Cut Rows("1:1").Select Selection.Insert Shift:=xlDown 'ここでエラーが出る
End If Next i
End Sub
よろしくお願いします。
取りあえず目的を達成するには、 sub test() on error resume next ・ ・
とOn Error resume next
と入れておけば、目的の処理は実現できます。
直接エラーの原因は、 例えば、 セルC1に「あああ」と入力しておいて、 セルC1を選択し、右クリック----切り取り そのまま 再度、右クリック----切り取ったセルの挿入 とすると、エラーになりますね!! コードがエラーになるのは、これが原因です。
他には、検索した結果見つからない文字列を指定した時もエラーになります。
上記の一行の挿入でエラーはなくなりますが、もっと良い方法があります。
それは、別の方の投稿を待ってください。
ichinose@これからハイキング
ありがとうございます!
おかげさまでエラーが出なくなりました!!
エラーの原因も対処法も教えてくださってありがとうございました!!
naomi
一応補足しておきますが、 OnError Resume Next はエラーが出ても無視するということなので、エラーそのものが解決したわけでは ありません。
場合によっては、表示だけで処理ができている場合もありますが(今回はそう?)、 期待の処理ができないことも多いので、乱用しない方がよいと思います。
一応下記のように変更してみましたが、これではエラーは出ません。 Sub test() Dim ret As String ret = InputBox("検索文字を入力して下さい。") If Len(ret) = 0 Then MsgBox "キャンセルされました" Exit Sub End If
Dim dstRow As Long dstRow = 1 Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, "A").Value = ret Then '---比較対象は A列だけ? If i <> dstRow Then '---同じ列でないことを判定 Rows(i).Cut Rows(dstRow).Insert Shift:=xlDown dstRow = dstRow + 1 End If End If Next End Sub (Mook)
Mookさま
ありがとうございます! 書いて下さったマクロを実行してみましたが、確かにエラーが出ずに処理ができました!すごいです。
比較対象はA列だけです。 A列の「変数retを含む文字列」を対象にしたい場合は、どのようにすればよろしいでしょうか?
例)
A列 1 子ネコ 2 ネコ 3 親ネコ
メッセージボックスには「ネコ」と入力し、完全一致ではなく、 「子ネコ」「ネコ」「親ネコ」とも対象にしたい場合
教えていただけるととても嬉しいです。 よろしくお願いします!
naomi
文字を含むという条件の書き方はいろいろありますが、 If Cells(i, "A").Value = ret Then '---比較対象は A列だけ? を If Instr( Cells(i, "A").Value, ret ) > 0 Then '---比較対象は A列だけ? のように変えるのも、一つの方法です。 詳細は InStr を調べてみてください。 (Mook)
Mookさま
If Instr( Cells(i, "A").Value, ret ) > 0 Then '---比較対象は A列だけ?
で試しました。 完璧です!この処理をやりたかったんです!
大変勉強になりました。 ご親切に教えてくださって、本当にありがとうございました!!
naomi
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.