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

いつもお世話になっております。

Excel 2007
Windows XP Proffessional

サイズの異なる結合セル間において、
一括して多数のコピー&ペーストをしたい場合、
何か良い方法はありますでしょうか。
(ただし、それぞれの結合セルのサイズ等は一切変更できません)

どうぞアドバイスのほどよろしくお願いします。

A 回答 (10件)

下記で合っているでしょうか?


違っていたらその旨教えてください。
「コピー元左上セル」と「貼付け開始左上セル」のシート名、セル番地は実際に合わせてください。

Sub test横横複数行()
  Dim acell As Range
  Dim bcell As Range
  Dim i As Long
  Dim cn As Long

  Set acell = Sheets("Sheet1").Range("A1") 'コピー元左上セル
  Set bcell = Sheets("Sheet1").Range("A5") '貼付け開始左上セル
  Do While acell.Offset(0, i).MergeCells
    cn = cn + acell.Offset(0, i).Columns.Count
    i = i + 1
  Loop
  
  Do While bcell.MergeCells
    bcell.Resize(1, cn + 1).Value = acell.Resize(1, cn + 1).Value
    Set bcell = bcell.Offset(1, 0)
  Loop

  Set acell = Nothing
  Set bcell = Nothing
End Sub
    • good
    • 1
この回答へのお礼

朝早くにご回答ありがとうございます。
試させていただきました。
結果、うまく実行できることを確認しました。
(途中に結合されていないセルがあるとその手前で止まる仕様なのですね。)

非常に助かりました。
ありがとうございます。

お礼日時:2008/09/29 08:22

>コピー元 A B C D


>コピー先 A B C D
>コピー先 A B C D
>コピー先 A B C D
>コピー先 A B C D
上記のようになって欲しいのですか?

コピー元は1行
コピー先では、
同じ方向で
4行貼りつける
コピー先の行数は、コピー元のデータ数と同じ
ということですか?

今一度、コピー元とコピー先のレイアウト、結合セルサイズを説明していただけないでしょうか。
    • good
    • 0
この回答へのお礼

やりたいことをうまく説明できておらず、申し訳ありません。

>上記のようになって欲しいのですか?
はい。

>コピー先では、
>同じ方向で
>4行貼りつける
例では4行としていますが、100行以上あります。

>コピー先の行数は、コピー元のデータ数と同じ
>ということですか?
すみません。
こちらの意味はわかりませんでした。

次のようにしたいのです。

0 コピー元の値: A B C D
1 コピー先の値: A B C D
2 コピー先の値: A B C D
3 コピー先の値: A B C D
・ ・
・ ・
・ ・
・ ・
・ ・
100 コピー先の値: A B C D

※A、B、C、Dが格納されているコピー元のセルは、
A=3行2列、B=3行3列、C=3行3列、D=3行3列の結合セル。
※A、B、C、Dが格納されるコピー先のセルは、
いろいろなパターンの結合セルです。
(項番0、1、2、3それぞれで異なる行数の結合セルという意味)

お礼日時:2008/09/28 22:45

ANo.4の返事


>結合セルが横に複数ある場合、それを縦方向にコピーするには
ANo.7の返事
>コピー元 A B C D
>コピー先 A B C D
内容が異なっているのですが、新しい返事の方が正解なら余り考えなくても良くなります。
下記の部分で縦か横かを制御しています。
直し方は、ヘルプでOffsetプロパティを調べれば直ぐに分かると思います。

Set acell = acell.Offset(1, 0)
Set bcell = bcell.Offset(1, 0)
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
内容が異なっている認識はないのですが・・・
もし表現(Excelの言葉の定義を誤っている?)が異なっているので
したらすみません。

>新しい返事の方が正解なら
なおりました。
ただ、次のようにしかコピーできないようです。
コピー元 A B C D
コピー先 A
コピー先 A
コピー先 A
コピー先 A


教えてくださったコードを元に、
コピー元 A B C D
コピー先 A B
コピー先 A B
コピー先 A B
コピー先 A B

コピー元 A B C D
コピー先 A B C
コピー先 A B C
コピー先 A B C
コピー先 A B C

コピー元 A B C D
コピー先 A B C D
コピー先 A B C D
コピー先 A B C D
コピー先 A B C D

となるようにコードを検討すれば良いのかな?と
思って試行錯誤していますが、うまくいかないようです。

お礼日時:2008/09/28 21:51

取りあえずANo.5のコードを誤魔化してみました。


完璧とは言えません。
更に考えてみます。

Sub test縦横()
  Dim acell As Range
  Dim bcell As Range

  Set acell = Sheets("Sheet1").Range("D1")
  Set bcell = Sheets("Sheet2").Range("B1")

  Do While acell.Value <> "" Or bcell.Value <> ""
    If acell.Value <> "" And bcell.Value = "" Then
      bcell.Value = acell.Value
    ElseIf acell.Value = "" And bcell.Value <> "" Then
      acell.Value = bcell.Value
    Else
      Exit Sub
    End If
    If acell.Offset(1, 0).MergeCells Then
      Set acell = acell.Offset(1, 0)
      Set bcell = bcell.Offset(0, 1)
    Else
      Set acell = acell.Offset(0, 1)
      Set bcell = bcell.Offset(1, 0)
    End If
  Loop

  Set acell = Nothing
  Set bcell = Nothing
End Sub

# 余談を聞き入れていただきありがとうございました。
# 気分を害していることはありませんので気にしないでください。
# よろしくお願いいたします。
    • good
    • 1
この回答へのお礼

引き続きのご対応ありがとうございます。
ご親切にありがとうございます。
試させていただきました。
下記のように4つの結合セルが並んでいるのですが、
教えてくださったマクロを実行したところ、
次のようになりました。

コピー元 A B C D
コピー先 A A

実現したいのは、次のような動きなのですが、
使い方が悪いのでしょうか?

コピー元 A B C D
コピー先 A B C D

お礼日時:2008/09/28 20:38

>結合セルが横に複数ある場合、それを縦方向にコピーするには


ハードルが上げられましたね。
考えてみます。

この回答への補足

ご指摘ありがとうございます。

>何らかの返事を差し上げるべきではないでしょうか

実施することが不明瞭なため、試せずにおり、返答に困っていました。
もし気分を害したのであれば申し訳ありません。

補足日時:2008/09/28 19:46
    • good
    • 1

ANo.4のコードを見直してみました。



Sub test2()
  Dim acell As Range
  Dim bcell As Range

  Set acell = Sheets("Sheet1").Range("A1")
  Set bcell = Sheets("Sheet2").Range("B1")

  Do While acell.Value <> "" Or bcell.Value <> ""
    If acell.Value <> "" And bcell.Value = "" Then
      bcell.Value = acell.Value
    ElseIf acell.Value = "" And bcell.Value <> "" Then
      acell.Value = bcell.Value
    Else
      Exit Sub
    End If
    Set acell = acell.Offset(1, 0)
    Set bcell = bcell.Offset(1, 0)
  Loop

  Set acell = Nothing
  Set bcell = Nothing
End Sub
    • good
    • 0

試しにマクロを組んでみました。


結合セル・非結合セルを問いません。

Sub test()
  Dim acell As Range
  Dim bcell As Range
  Dim myccell As Range
  Dim mypcell As Range

  Set acell = Sheets("Sheet1").Range("A1")
  Set bcell = Sheets("Sheet2").Range("B1")

  If acell.Value <> "" And bcell.Value = "" Then
    Set myccell = acell
    Set mypcell = bcell
  ElseIf acell.Value = "" And bcell.Value <> "" Then
    Set myccell = bcell
    Set mypcell = acell
  Else
    Exit Sub
  End If

  Do While myccell.Value <> ""
    mypcell.Value = myccell.Value
    Set mypcell = mypcell.Offset(1, 0)
    Set myccell = myccell.Offset(1, 0)
  Loop

  Set acell = Nothing
  Set bcell = Nothing
  Set mypcell = Nothing
  Set myccell = Nothing
End Sub
    • good
    • 0
この回答へのお礼

アドバイス、コードのご教示ありがとうございます。
試してみました。
1つの結合セルをみごとに縦方向にコピーできました。
ありがとうございます。
結合セルが横に複数ある場合、それを縦方向にコピーするには
どのようにすればよろしいでしょうか?

お礼日時:2008/09/28 18:27

結合セルが連続している


コピー元、コピー先の結合セルサイズは異なる
コピー元の結合セルサイズは一定で同じ(例:2行1列)
コピー先の結合セルサイズも一定で同じ(例:3行2列)
といった前提条件が許される場合

仮に
コピー元:Sheet1のA列、結合サイズは2行1列
コピー先:Sheet2のA列、結合サイズは3行2列
とします。

コピー先結合セルの先頭に、#Sheet1!A1
コピー先結合セルの2番目に、#Sheet1!A2
と入力
入力した 2個の結合セルを選択
選択枠の右下角の■(フィルハンドル)を下方にドラッグ&ドロップ
そのまま範囲選択状態で
「置換」で
検索する文字列を、#
置換後の文字列を、=
として「すべて置換」
続けて、そのままの範囲選択状態で
Ctrl+Cで、コピー
「形式を選択して貼り付け」の「値」で貼り付け

といった操作を試してください。

この回答への補足

アドバイスありがとうございます。
実施する内容がいまいちよくわかりませんでした。

補足日時:2008/09/28 20:02
    • good
    • 1

サイズや結合を変えられないということは、値だけをコピーするという意味だと解釈できますが、個別セルの値を転記する形のループにすれば、エラーにはならず、コピーすることが可能です。

(コードは1行では済みませんが・・・)

ただし、セルの結合の形が違うので、どの値が生きてどの値が無視されてしまうかは、それぞれの結合の対応関係によります。
(結合セルの値は左上のセルが代表となっているため)

 サンプルを示すまでもないでしょうが、一応・・・
For col = 1 To 10
 For rw = 1 To 5
  Cells(rw + 5, col + 10).Value = Cells(rw, col).Value
 Next rw
Next col
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
試してみようとしたのですが、試し方が判りませんでした。

お礼日時:2008/09/28 19:58

そのままは無理だと思います。



コピー元のデータを一旦別のところにペーストして、結合を解除し、コピー先の結合と同じサイズに結合しなおしてから、それをコピー先にコピー&ペーストする、という方法はどうでしょうか?
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
どのような内容をご指摘されているのか?を少し考えました。
せっかくなのですが、
アドバイスくださった内容ですと、数が膨大なため、あまり
手入力からのメリットがないように思います。

お礼日時:2008/09/28 19:51

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

このQ&Aを見た人はこんなQ&Aも見ています