- ベストアンサー
Excel コピーしたセルの範囲を取得するには?
お世話になっております。 現在作成しているソフトでわからない点がありますので 質問させてください。 ExcelのVBAなのですが、 とあるセルをコピーし貼り付ける際に、そのコピー元のセル情報(Range等)を取得したいと考えています。 その場合に、コピー元のセル情報はどのように取得すればよいのでしょうか。 イベントでは取れなさそうに見えましたので、Worksheet_changeイベントで取得しようと考えております。 つたない説明で申し訳ございませんが、よろしくお願いいたします。
- みんなの回答 (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 でも >通常は不要ですが、データ貼り付けを行った際に、データの内容をチェックし、 >別のセルに値をセットするため、セルのコピー範囲の情報が解除され、 >連続して貼り付けできない状態になっております。 ...という事であれば、作業用シートにでも一旦コピーし、 そこから再コピーするような仕様でも良いような気もしますね。
その他の回答 (6)
毎回コピー範囲が変わると難しいのですが、 http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page7.htm のサイトは参考になりませんか?
お礼
回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 毎回コピー範囲が変わるのですが、リンク先のサイトは 参考になりました。 いろいろ試させていただきます。
- merlionXX
- ベストアンサー率48% (1930/4007)
> 確かにいただいた内容ではアドレスの取得ができるのですが、 > それがコピーされたセルなのかどうかが判別できません。 何をしたいのかがわからないので適切なアドバイスができませんが、では、イベントで取得するのは諦め、自前のコピーボタンを作ったらどうでしょう? そうすればコピーすると同時に選択範囲も取得できます。
お礼
回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 最終的にどうにもならなければコピーボタンを作成しようと思います。
- merlionXX
- ベストアンサー率48% (1930/4007)
コピーのイベントってないんですね。 コピーするためにはまず範囲をSelectしなくてはならないでしょうからSelectionのアドレスを取得してみたらどうでしょう? Dim x Private Sub Worksheet_SelectionChange(ByVal Target As Range) x = Selection.Address End Sub Sub aaaa() MsgBox x End Sub
お礼
回答ありがとうございます。 確かにいただいた内容ではアドレスの取得ができるのですが、 それがコピーされたセルなのかどうかが判別できません。 やはり難しいのでしょうか?
内容を書いてる間に質問者より補足が有りましたけど、 具体的に何の情報を取得したいのですか? 又は、何を(どんな事)をしたいのですか?
補足
仮にA1:Z10までデータが入っていたとして、 B1:B5までを選択してコピー、 C3:C8に貼り付け を行う際に、「B1:B5」という情報が取得したいです。 通常は不要ですが、データ貼り付けを行った際に、データの内容をチェックし、 別のセルに値をセットするため、セルのコピー範囲の情報が解除され、 連続して貼り付けできない状態になっております。 ご迷惑おかけし申し訳ございませんがよろしくお願いいたします。
>とあるセルをコピーし 何処までデータが入力されているか分からないけど、とにかくデータが入力されてる範囲を取得したい。と言う事ですか? セルA1から連続してデータが入っている範囲を選択させるだけなら Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select で、いいと思います。 後は、煮るなり焼くなり
お礼
回答ありがとうございます。 私の質問の仕方が悪かったのですが、 望んでいたこととは違っておりました。 ご回答いただいた内容は別件で使用させていただきます。
- n-jun
- ベストアンサー率33% (959/2873)
>とあるセルをコピーし この時のセルはどのように選択されているのですか?
お礼
すみません、説明不足でした。 セルのコピー、貼り付けは通常と同じです。 (Ctrl+C,Ctrl+Pなど) セルのコピー状態になった時に破線のようなもので囲われますが、 その範囲を何かしらの方法で取得できればと考えております。
お礼
回答ありがとうございました。 また、お礼が遅くなり申し訳ございません。 丁寧なアドバイスありがとうございます。 頂いた内容でいろいろやってみてなんとかいけました。