• ベストアンサー

隣り合わないセルを同時にコピーできますか?

いつも助けていただきましてありがとうございます。 例えばA1、C1、E1などの隣り合わないセルを同時にコピーすることはできるのでしょうか? 色々試してみたのですが私の知識ではできず(Ctrlキーを押しながらセルを選択してコピーして貼り付けようとしましたが、できませんでした。)、エクセルでそういうことができるのかどうかもわからないのですが、もしできるのであれば教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

簡単だと思って手を出したらはまった・・・(苦笑) もっときれいな書き方もあるでしょうけど、 ざっと書いてみました。われながらきたない コーディングで辟易ですがこんな感じでどうでしょう? コピー:macro1にctrl+qを ペースト:macro2にctrl+wを それぞれ振っておくとよいでしょうか? ソースがわかれば適当に改造してください。 (ちなみに今は値をコピーしてますが やる気になれば相対コピーとかも作れるかも・・・) Public thisarray Sub Macro1() Dim homecell, endcell Set selectcell = Selection For Each ThisCell In selectcell If Not IsObject(homecell) Then Set homecell = ThisCell Set endcell = ThisCell Else If ThisCell.Row < homecell.Row Then Set homecell = homecell.Offset(ThisCell.Row - homecell.Row, 0) If ThisCell.Column < homecell.Column Then Set homecell = homecell.Offset(0, ThisCell.Column - homecell.Column) If ThisCell.Row > endcell.Row Then Set endcell = endcell.Offset(ThisCell.Row - endcell.Row, 0) If ThisCell.Column > endcell.Column Then Set endcell = endcell.Offset(0, ThisCell.Column - endcell.Column) End If Next ReDim thisarray(endcell.Row - homecell.Row, endcell.Column - homecell.Column) For Each ThisCell In selectcell If IsEmpty(ThisCell.Value) Then thisarray(ThisCell.Row - homecell.Row, ThisCell.Column - homecell.Column) = "=""""" Else thisarray(ThisCell.Row - homecell.Row, ThisCell.Column - homecell.Column) = ThisCell.Value End If Next End Sub Sub Macro2() Set homecell = Selection.Cells(1, 1) If IsEmpty(thisarray) Then Exit Sub For i = 0 To UBound(thisarray, 2) For j = 0 To UBound(thisarray, 1) If Not IsEmpty(thisarray(j, i)) Then homecell.Offset(j, i) = thisarray(j, i) End If Next Next End Sub

noname#15190
質問者

お礼

ご回答ありがとうございます! マクロに初挑戦しました(笑) コピーと形式を選択して貼付をマクロに記録しました! 無知なもので、専門的なことがわからないのですが、Public thisarray以下は、関数でしょうか??

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

#4です。 Publicはマクロ(sub)間で値を受け渡すためのものです。 通常のコピーペーストは選択された状態(selection) で受渡ししますが、今回は通常のコピーではないので コピーしたものを一度配列(array)でとっておいて、 貼り付けのときに参照しているわけです。 VBAでいう関数(ユーザー関数)は一般にfunction のことなので、ちょっとご質問の意味は違うかなぁ という感じですが・・・ どうでしょ?意図した通りにうごきますか?

noname#15190
質問者

お礼

何度もありがとうございます。 勉強が足りなく、理解できずにいるので、マクロに関してもう少し勉強してから試してみます。 ありがとうございました。

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.3

こんばんは #2の方の回答への補足にあなたが書いたように、飛び飛びのセルをコピーしても、貼り付けるときは連続したセルに張り付いてしまいます。 これはそういう仕様なので、どうしようもないと思います。 特殊なケースしかできませんが、対処としてありうるのは、 1.シートの仕様にもよりますが、そもそも隣り合ったセルになるようにシートを組替える。 2.A1,C1をA3,C3に貼り付けたい場合で、もしB1が空白セルなら、「形式を選択して貼付」で「空白を無視する」をチェックする。 ぐらいですかねえ。 誰か他にいい案があったらヘルプ願います。

noname#15190
質問者

お礼

ご回答ありがとうございます。 >飛び飛びのセルをコピーしても、貼り付けるときは連続したセルに張り付いてしまいます。  ↓ やはりそうなんですね。 飛び飛びのセルの間が空白セルの場合は、No.3さんの言うようにできましたが、空白セル以外の場合はできないんですね・・・。 とても勉強になりました。ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>Ctrlキーを押しながらセルを選択してコピーして >貼り付けようとしましたが、できませんでした。 普通はこの方法でできます。 できないとはどのようにできないのでしょうか? a1をクリック、ctrlをおしてc1クリック,同ctrl+e1 クリック、そこで編集→コピーもしくはctrl+c 例えばa3をクリックして編集→ペーストもしくは ctrl+vで貼れるはず。 だめならどこで、どのようなエラーがでますか?

noname#15190
質問者

補足

ご回答ありがとうございます。 質問がわかりにくくても申し訳ありません。 会社のパソコンがWindows2000で、自宅がXPです。 会社のパソコンで試してみたところ、Ctrlキーを押しながらセルを選択してコピーしてもコピーされなかったのですが(右クリックで「貼り付け」しようとしてもその文字(?)がクリックできないようになっています。エラーメッセージは出ませんでした)、今自宅のパソコンで試してみたところ、同列・同行のセルであればコピーはできましたが、例えばA1とC1をコピーして、A3とC3に貼り付けたかったのですが、値はA3とB3(C3ではなく)に貼り付けになってしまいます。 複数選択でコピーした値はくっついて貼り付けになってしまうのでしょうか? また、A1、B2など列も行も違うセルを選択してコピーしようとすると「そのコマンドは複数の選択範囲に対して実行できません」となってしまいます。 列や行が違う場合は無理なのでしょうか?

  • violet430
  • ベストアンサー率36% (27472/75001)
回答No.1

コピーコマンドは複数の選択範囲に対して実行できません。

noname#15190
質問者

お礼

ご回答ありがとうございます。 やはり、できないですよね・・・。

関連するQ&A