• ベストアンサー

Excel コピーしたセルの範囲を取得するには?

お世話になっております。 現在作成しているソフトでわからない点がありますので 質問させてください。 ExcelのVBAなのですが、 とあるセルをコピーし貼り付ける際に、そのコピー元のセル情報(Range等)を取得したいと考えています。 その場合に、コピー元のセル情報はどのように取得すればよいのでしょうか。 イベントでは取れなさそうに見えましたので、Worksheet_changeイベントで取得しようと考えております。 つたない説明で申し訳ございませんが、よろしくお願いいたします。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.7

http://homepage2.nifty.com/kmado/kvba.htm ▲こちらのTipsにAPIを利用する方法が書かれていますので、参考にしてみてください。 [E03M121 切り取り又はコピーされたセル範囲を取得する] 取得するタイミングが、『コピー後、次のセル範囲を選択した時』で良ければ Sheet の SelectionChange イベントが使えそうです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Static ad As String   If Application.CutCopyMode Then     MsgBox ad   Else     ad = Target.Address(0, 0, external:=True)   End If End Sub でも >通常は不要ですが、データ貼り付けを行った際に、データの内容をチェックし、 >別のセルに値をセットするため、セルのコピー範囲の情報が解除され、 >連続して貼り付けできない状態になっております。 ...という事であれば、作業用シートにでも一旦コピーし、 そこから再コピーするような仕様でも良いような気もしますね。

Shingoru77
質問者

お礼

回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 丁寧なアドバイスありがとうございます。 頂いた内容でいろいろやってみてなんとかいけました。

その他の回答 (6)

noname#63240
noname#63240
回答No.6

毎回コピー範囲が変わると難しいのですが、 http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page7.htm のサイトは参考になりませんか?

Shingoru77
質問者

お礼

回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 毎回コピー範囲が変わるのですが、リンク先のサイトは 参考になりました。 いろいろ試させていただきます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> 確かにいただいた内容ではアドレスの取得ができるのですが、 > それがコピーされたセルなのかどうかが判別できません。 何をしたいのかがわからないので適切なアドバイスができませんが、では、イベントで取得するのは諦め、自前のコピーボタンを作ったらどうでしょう? そうすればコピーすると同時に選択範囲も取得できます。

Shingoru77
質問者

お礼

回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 最終的にどうにもならなければコピーボタンを作成しようと思います。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

コピーのイベントってないんですね。 コピーするためにはまず範囲をSelectしなくてはならないでしょうからSelectionのアドレスを取得してみたらどうでしょう? Dim x Private Sub Worksheet_SelectionChange(ByVal Target As Range) x = Selection.Address End Sub Sub aaaa() MsgBox x End Sub

Shingoru77
質問者

お礼

回答ありがとうございます。 確かにいただいた内容ではアドレスの取得ができるのですが、 それがコピーされたセルなのかどうかが判別できません。 やはり難しいのでしょうか?

noname#63240
noname#63240
回答No.3

内容を書いてる間に質問者より補足が有りましたけど、 具体的に何の情報を取得したいのですか? 又は、何を(どんな事)をしたいのですか?

Shingoru77
質問者

補足

仮にA1:Z10までデータが入っていたとして、 B1:B5までを選択してコピー、 C3:C8に貼り付け を行う際に、「B1:B5」という情報が取得したいです。 通常は不要ですが、データ貼り付けを行った際に、データの内容をチェックし、 別のセルに値をセットするため、セルのコピー範囲の情報が解除され、 連続して貼り付けできない状態になっております。 ご迷惑おかけし申し訳ございませんがよろしくお願いいたします。

noname#63240
noname#63240
回答No.2

>とあるセルをコピーし 何処までデータが入力されているか分からないけど、とにかくデータが入力されてる範囲を取得したい。と言う事ですか? セルA1から連続してデータが入っている範囲を選択させるだけなら Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select で、いいと思います。 後は、煮るなり焼くなり

Shingoru77
質問者

お礼

回答ありがとうございます。 私の質問の仕方が悪かったのですが、 望んでいたこととは違っておりました。 ご回答いただいた内容は別件で使用させていただきます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>とあるセルをコピーし この時のセルはどのように選択されているのですか?

Shingoru77
質問者

お礼

すみません、説明不足でした。 セルのコピー、貼り付けは通常と同じです。 (Ctrl+C,Ctrl+Pなど) セルのコピー状態になった時に破線のようなもので囲われますが、 その範囲を何かしらの方法で取得できればと考えております。

関連するQ&A