• ベストアンサー

セルの場所

エクセルVBAにて、 指定した列から「検索」を使って該当のセルを選び出し、(1)そのセルの行をコピーして別シートに貼り付けるマクロを組みたいのですが、(1)以降の処理がどうしても組めません。officeは2000を使っています。 宜しくお願いします。

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

  • ベストアンサー
  • mk227
  • ベストアンサー率100% (3/3)
回答No.7

見つかったセルを fcell とすると fcell.EntireRow.Copy Destination:=ActiveSheet.Next.Range("A1") のようにすればできると思います。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.6

ActiveCell.address と書いても全く意味ありませんよ? msgbox(ActiveCell.address) とすればダイアログで確認できたりしますが、これはあくまでもデバック用ですし。 実際的には変数を一つ作ってそこにこのアドレスを入れて使いまわすことになるかと思いますが。 何かそれ以前のところで戸惑われているようなので、まず初心者レベルの参考書を一通り読まれることをお勧めします。 変数とか型とかを自分の言葉でかまわないから理解できる程度の知識はないと質問者さんのやりたいことはちょっと難しいかと。

すると、全ての回答が全文表示されます。
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.5

Selection.Find(What:=[指定した文字], After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate まぁこれだけでも十分にセルの位置は分かります。 上の処理で該当のセルがActivateになる訳ですから ActiveCell.address でアドレスが取れます。ただスマートの方法ではありませんが。 Findを使う場合、4番さんの指摘通り、色々と面倒なことも多いので、For Eachでループをぐるぐる回した方が分かりやすいコードになります。 以下のA1からA10間で"hoge"という文字列を検索するサンプルコード For Each C In Worksheets(1).Range("A1:A10") If C.Value = "hoge" Then MsgBox ("hogeのアドレス=" & C.Address) End If Next C

rie3816
質問者

お礼

・・・・False).Activate の次の行に ActiveCell.address を付けたのですが、「プロパティの使い方が不正です」というエラーが出ます。また For Each C In Worksheets(1).Range("A1:A10") If C.Value = "hoge" Then MsgBox ("hogeのアドレス=" & C.Address) End If Next C ですが、この「C」は何を指しますか? 初心者の為、細かいところまで聞いてしまい、申し訳ありません。

rie3816
質問者

補足

・・・・False).Activate の次の行に ActiveCell.address を付けたのですが、「プロパティの使い方が不正です」というエラーが出ます。また For Each C In Worksheets(1).Range("A1:A10") If C.Value = "hoge" Then MsgBox ("hogeのアドレス=" & C.Address) End If Next C ですが、この「C」は何を指しますか? 初心者の為、細かいところまで聞いてしまい、申し訳ありません。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

(1)>「検索」を使って FINDメソッドを使うでしょう。 しかし下記(2)(3)が難しい。既回答にも触れていない。下記コードを参考に。 (2)見つかった後、2個目はFindNextを使う (3)最後に見つかったあと、次は見つからないのですが、その察知はどうなるか?。 Sub test01() Range("A1:A16").Select Set x = Selection.Find(What:=Cells(1, "E"), After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False) If Not x Is Nothing Then f = x.Address x.Offset(0, 1) = Cells(1, "E") Do x.Offset(1, 0).Activate Set x = Worksheets(1).Range("a1:a16").FindNext(x) x.Offset(0, 1) = Cells(1, "E") Loop Until x Is Nothing Or x.Address = f End If End Sub(例データ) E1に東京 東京の文字のある行のB列にに「東京」といれる。 東京都田無市 東京 愛知県名古屋市 大阪府大阪市 埼玉県川口市 東京都千代田区 東京 大阪府河内長野市 愛知県豊田市 兵庫県西宮市 千葉県木更津市 神奈川県藤沢市 神奈川県相模原市 神奈川県茅ヶ崎市 東京都中野区 東京 埼玉県和光市 東京都府中市 東京

rie3816
質問者

お礼

ありがとうございます。 とても難しそうですね・・・。もう少し簡単に出来る方法を探してみますが、一段落したら教えて頂いたものでも挑戦してみようと思います。1つの処理をするにも人それぞれ色々な方法があるんですね。勉強になりました!

すると、全ての回答が全文表示されます。
回答No.3

#1です。 回答が不親切でしたね。すみません。 コピーする部分の操作を記録して、作られたコードを 改良して、貴方が書かれた検索コードを足せばいいと思うのですが。

rie3816
質問者

お礼

度々の回答、ありがとうございますm(_ _)m コピーをするセルの位置が分かればその後は楽に組めると思うのですが、検索で引っかかったセルの位置の出し方がわかりません。何か方法はありますか?

すると、全ての回答が全文表示されます。
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

マクロの記録で手順を保存して、 行数の部分を変数にしてSelectionの部分を適当なものに置き換えると簡単にできます。 まぁどの辺が分からないのかも分からないのであれですが。

rie3816
質問者

お礼

ありがとうございます。質問が不十分で申し訳ありません。 マクロの登録で、検索をさせると Selection.Find(What:=[指定した文字], After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate のようになります。 これでセルは検索できます。次に、このセルの場所を指定させて行全体ををコピーし、他のシートに張り付けをするという一連の流れをマクロで組みたいのです。わかりずらくて申し訳ありません。。。

すると、全ての回答が全文表示されます。
回答No.1

「行をコピーして別シートに貼り付ける」の部分を、記録してみては?

rie3816
質問者

お礼

行をマクロで検索し、コピー→貼付け という動作をさせたいと考えています。 わかりにくい質問で申し訳ありません。。。

すると、全ての回答が全文表示されます。

関連するQ&A