プロが教えるわが家の防犯対策術!

いつも助けていただきましてありがとうございます。

例えばA1、C1、E1などの隣り合わないセルを同時にコピーすることはできるのでしょうか?


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

A 回答 (5件)

簡単だと思って手を出したらはまった・・・(苦笑)


もっときれいな書き方もあるでしょうけど、
ざっと書いてみました。われながらきたない
コーディングで辟易ですがこんな感じでどうでしょう?

コピー: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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

マクロに初挑戦しました(笑)
コピーと形式を選択して貼付をマクロに記録しました!

無知なもので、専門的なことがわからないのですが、Public thisarray以下は、関数でしょうか??

お礼日時:2005/10/19 12:11

#4です。



Publicはマクロ(sub)間で値を受け渡すためのものです。
通常のコピーペーストは選択された状態(selection)
で受渡ししますが、今回は通常のコピーではないので
コピーしたものを一度配列(array)でとっておいて、
貼り付けのときに参照しているわけです。

VBAでいう関数(ユーザー関数)は一般にfunction
のことなので、ちょっとご質問の意味は違うかなぁ
という感じですが・・・
どうでしょ?意図した通りにうごきますか?
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

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

お礼日時:2005/10/20 14:34

こんばんは


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

ご回答ありがとうございます。

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

お礼日時:2005/10/19 12:14

>Ctrlキーを押しながらセルを選択してコピーして


>貼り付けようとしましたが、できませんでした。

普通はこの方法でできます。
できないとはどのようにできないのでしょうか?

a1をクリック、ctrlをおしてc1クリック,同ctrl+e1
クリック、そこで編集→コピーもしくはctrl+c
例えばa3をクリックして編集→ペーストもしくは
ctrl+vで貼れるはず。
だめならどこで、どのようなエラーがでますか?

この回答への補足

ご回答ありがとうございます。
質問がわかりにくくても申し訳ありません。

会社のパソコンがWindows2000で、自宅がXPです。

会社のパソコンで試してみたところ、Ctrlキーを押しながらセルを選択してコピーしてもコピーされなかったのですが(右クリックで「貼り付け」しようとしてもその文字(?)がクリックできないようになっています。エラーメッセージは出ませんでした)、今自宅のパソコンで試してみたところ、同列・同行のセルであればコピーはできましたが、例えばA1とC1をコピーして、A3とC3に貼り付けたかったのですが、値はA3とB3(C3ではなく)に貼り付けになってしまいます。
複数選択でコピーした値はくっついて貼り付けになってしまうのでしょうか?

また、A1、B2など列も行も違うセルを選択してコピーしようとすると「そのコマンドは複数の選択範囲に対して実行できません」となってしまいます。
列や行が違う場合は無理なのでしょうか?

補足日時:2005/10/18 19:56
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

やはり、できないですよね・・・。

お礼日時:2005/10/19 12:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!