- ベストアンサー
マクロの記録で任意の文字を検索してそのセルから範囲を選択したいのですが
マクロの記録で任意の文字を検索して、見つかったセルから範囲を選択して別なシートへ切り取りし、貼り付けたいですが何か方法はありますか?現在は検索をしたセル番号になってしまいます。 マクロはじめたばかりです。 検索→い→(A2:C5)選択&切り取り→sheet2貼り付け→検索(sheet2)→え→(A3:C4)選択&切り取り→sheet3貼り付け sheet1 →sheet2 →sheet3 ABC ABC ABC 1あかさ 1いきし 1えけせ 2いきし 2うくす 2おこそ 3うくす 3えけせ 4えけせ 4おこそ 5おこそ できれば検索で発見されたA2やA3を任意のアクティブセルにし、範囲はC列の一番下のセルを選択し切り取りたいのですができますでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
検索→い→(A2:C5) といった操作を「マクロの記録」すると下記のようなコードが得られます。 Sheets("Sheet1").Select Range("A1:A5").Select Selection.Find(What:="い", after:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate コードの最後に、Activateメソッドが記録されています。 Findの結果、最初に見つかったセルをアクティブにする命令です。 上記コードの次の行に MsgBox ActiveCell.Address といれてみてください。 アクティブセル(Findの結果Activateされた)のAddress(セル番地)が返されます。 記録された、Findメソッドは注意が必要です。 SearchFormatオプションは、Excel2000以前にはなかったものです。 上記コードをExcel2000で動かすとエラーが発生します。 SearchFormatの部分を削除すればExcel2000でも動くと思います。 Afterオプションは、ここで設定されたセルの、次のセルから検索が開始されます。 Range("A1:A5").Select の結果、ActiveCellはA1になります。 after:=ActiveCell と記録されていますから、A1セルは最後にFindの対象セルになります。 検索対象範囲に同じデータがあると、場合によっては問題になる可能性があります。 試しに Selection.Find(What:="い", after:=Selection.Cells(Selection.Count), LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate とすれば最初のセルからFindされるようです。 変数を利用すれば、Activateしなくても良くなります。 Dim c As Range Set c = Sheets("Sheet1").Range("A1:A5").Find(What:="い", _ LookIn:=xlFormulas, after:=ActiveCell, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False) MsgBox c.Address C列の最終行を取得する方法が、下記ページで詳しく解説されています。 No.8 ワークシートの最終行、最終列を取得する http://www.niji.or.jp/home/toru/notes/8.html 取りあえず、ここまでにします。
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
>できれば検索で発見されたA2やA3を任意のアクティブセルにし アクティブにする意味は? 検索結果の確認と言う事? 検索するのは各シートA列のみ?
補足
遅くなりました。説明不足ですみません。 アクティブの認識は、検索結果の確認ではなく、 検索結果(い)だったらA2~C列の最終行まで、 検索結果(え)であれば、sheet1の場合A4~C列の最終行まで 検索結果で見つかった場所から範囲を選択したいということです。 説明がへたくそですみません。 検索するのは各シートA列のみです。