• ベストアンサー

マクロの記録で任意の文字を検索してそのセルから範囲を選択したいのですが

マクロの記録で任意の文字を検索して、見つかったセルから範囲を選択して別なシートへ切り取りし、貼り付けたいですが何か方法はありますか?現在は検索をしたセル番号になってしまいます。 マクロはじめたばかりです。 検索→い→(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列の一番下のセルを選択し切り取りたいのですができますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.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)
回答No.1

>できれば検索で発見されたA2やA3を任意のアクティブセルにし アクティブにする意味は? 検索結果の確認と言う事? 検索するのは各シートA列のみ?

matate7655
質問者

補足

遅くなりました。説明不足ですみません。 アクティブの認識は、検索結果の確認ではなく、 検索結果(い)だったらA2~C列の最終行まで、 検索結果(え)であれば、sheet1の場合A4~C列の最終行まで 検索結果で見つかった場所から範囲を選択したいということです。 説明がへたくそですみません。 検索するのは各シートA列のみです。