• ベストアンサー

エクセルVBAのコピー方法について。

セル結合された表を別シートコピーする方法を教えてください。 以下のように記述しましが、実行時エラーとなり 「結合されたセルの一部を変更することはできません。」となります。 Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") よろしくお願いします。

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

  • ベストアンサー
  • deecyan
  • ベストアンサー率38% (89/233)
回答No.8

納得しました シートにVBAを書いておられたのですね 私はシートに書かない人なのでエラーにならなかったのですね 先ず VisualBasicEditorの画面で 挿入->標準モジュール としたら  新しい画面が出てきますので そこで sub susu14() [Enter] End sub って出てきますので その間に Private Sub CommandButton1_Click() 以下の Set TgtSheet = Worksheets.Add TgtSheet.Name = "ワーク領域"  |  | 省略 End sub の前までコピーしてください。 次に Private Sub CommandButton1_Click() の後を call susu14() と入れて 以下End subまで消してください。 ----------------------------------------------------- >TgtSheet.activateとTgtSheet.Selectは何が違うのですか? selectはセル範囲の選択で activateは画面をActiveにするって... そのシートを前にもってくるってゆうか ちょっとうまく説明できません ごめんなさい ----------------------------------------------------- ところで ツール->マクロ->マクロの記憶って使った事あります? なければ1回使ってみてください 操作した通りにコードを作成してくれますよ  あとはちょこちょこって変更するだけで コードが出来ますよ

susu14
質問者

お礼

ありがとうございました!! 何とかできました。 VBAはまだまだですが、大体の流れは理解できたと思っています。 後は、印刷処理をがんばって考えてみます。 本当に何回もそして長く回答を頂きありがとうございました。 >ところで ツール->マクロ->マクロの記憶って使った事あります? >なければ1回使ってみてください 使用してみましたが、なかなかうまくいかなかったため質問しました。 なかなか難しいものですね。

その他の回答 (7)

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.7

>列幅もSheet1と同様にコピーしたい場合はどのようにすればよろしいですか。 A列から W列ですよね Sub susu14() Set TgtSheet = Sheets("sheet2") Set FrmSheet = Sheets("sheet1") ' 送り先(sheet2)の A列からW列まで クリアーする TgtSheet.Select Application.CutCopyMode = False Columns("A:W").ClearContents ' セルの結合をはずす Range("A1:W2").MergeCells = False ' 列の幅を変更 A列~W列 1~23 For ii = 1 To 23 TgtSheet.Columns(ii).ColumnWidth = FrmSheet.Columns(ii).ColumnWidth Next 'Sheet2 の A1:W2 を選択 FrmSheet.Select Range(Cells(1, 1), Cells(2, 23)).Select 'コピー Selection.Copy 'はりつけ TgtSheet.Activate TgtSheet.Select Range("A1").Select ActiveSheet.Paste 'Sheet2 の A3:W* を選択 FrmSheet.Select Range(Cells(3, 1), Cells(FrmSheet.UsedRange.Rows.Count, 23)).Select 'コピー FrmSheet.Select Selection.Copy 'はりつけ TgtSheet.Select Range("A3").Select ActiveSheet.Paste End Sub

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.6

納得いただくまで回答しますので 何度でも質問してね (夜ぐらいしか 回答できませんが) さて こっちから (回答を分けますね) >の部分のRange("A1").Selectでエラーとなり、 >「RangeクラスのSelectメソッドが失敗しました」 >となりますがこれはどのようなエラーなのでしょうか。 >この部分をはずしてコピーすることは可能となりました。 sheet2 の A1を選べなかった えら~です このRange("A1").Select が無ければ 表題がどこにコピーされるか わかりませんので必要です sheet2 の A1 に何か特殊な事をしていませんか? (セル結合以外で) オートフィルターをかけっぱなしにしているとか sheet2 は 白紙ではまずいのですよね (X列以降に何かあるのですよね) ちょっとこれをRange("A1").Select の前にいれてみてください TgtSheet.activate

susu14
質問者

補足

ありがとうございます。 >sheet2 の A1 に何か特殊な事をしていませんか? >(セル結合以外で) >オートフィルターをかけっぱなしにしているとか >sheet2 は 白紙ではまずいのですよね >(X列以降に何かあるのですよね) 新たにワーク領域を追加して、そのワーク領域にSheet1の見出し部とデータ部をコピーすることにしました。 (コピー後の処理が楽だと思ったので・・せっかく教えて頂いた 「送り先(sheet2)の A列からW列まで クリアーする」の部分から5行ぐらいが不要になってしまいますが・・) なので、マクロ内で新たにワーク領域のシートを追加しているので何もないはずなのですが・・ 同様のエラーとなってしまします。 以下のようにしました。 Private Sub CommandButton1_Click() Set TgtSheet = Worksheets.Add TgtSheet.Name = "ワーク領域" Set FrmSheet = Sheets("Sheet1") 'Sheet1 のA1:W2 を選択(見出し部分) FrmSheet.Select Range(Cells(1, 1), Cells(2, 23)).Select 'コピー Selection.Copy 'はりつけ TgtSheet.Activate TgtSheet.Select Range("A1").Select(ここでエラーとなる) ActiveSheet.Paste    ・    ・    ・ ちなみに TgtSheet.activate と TgtSheet.Select は何が違うのですか?

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.5

だいたいですが 言っておられる事をすると Sub susu14() Set TgtSheet = Sheets("sheet2") Set FrmSheet = Sheets("sheet1") ' 送り先(sheet2)の A列からW列まで クリアーする TgtSheet.Select Application.CutCopyMode = False Columns("A:W").ClearContents ' セルの結合をはずす Range("A1:W2").MergeCells = False 'Sheet2 の A1:W2 を選択 FrmSheet.Select Range(Cells(1, 1), Cells(2, 23)).Select 'コピー Selection.Copy 'はりつけ TgtSheet.Select Range("A1").Select ActiveSheet.Paste 'Sheet2 の A3:W* を選択 FrmSheet.Select Range(Cells(3, 1), Cells(FrmSheet.UsedRange.Rows.Count, 23)).Select 'コピー FrmSheet.Select Selection.Copy 'はりつけ TgtSheet.Select Range("A3").Select ActiveSheet.Paste End Sub >ちなみに、この見出し部分はオートフィルタにもなっています。 ↑これです原因は フィルターでどこかが選択されていた場合は 「結合されたセルの一部を変更することはできません。」のエラーが出ます もし Sheet2を全て消しても良い場合は Sub hoge() Sheets("Sheet2").Select Cells.Select Selection.ClearContents With Selection .MergeCells = False End With Sheets("Sheet1").Select Cells.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub でできます しかしなぜA1:A2~W1:W2 をセル結合したのか ▼の位置以外に理由がみつからないのです、 もしよかったら教えてください 

susu14
質問者

お礼

ありがとうございました。 最近VBAを始めたばかりなので、非常に勉強になりました。 ところで、 >'Sheet2 の A1:W2 を選択 >FrmSheet.Select >Range(Cells(1, 1), Cells(2, 23)).Select >'コピー >Selection.Copy >'はりつけ >TgtSheet.Select >Range("A1").Select >ActiveSheet.Paste の部分のRange("A1").Selectでエラーとなり、 「RangeクラスのSelectメソッドが失敗しました」 となりますがこれはどのようなエラーなのでしょうか。 この部分をはずしてコピーすることは可能となりました。 >しかしなぜA1:A2~W1:W2 をセル結合したのか >▼の位置以外に理由がみつからないのです、 >もしよかったら教えてください 実は全てがA1:A2~W1:W2とセル結合されてるわけではありません。 F1からI1までセル結合され、F2とG2、H2とI2がセル結合されています。 

susu14
質問者

補足

さらに教えて頂きたいのですが、 列幅もSheet1と同様にコピーしたい場合はどのようにすればよろしいですか。 何回もすみませんがよろしくお願いします。

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.4

セル結合は↓です Sheets("Sheet2").range("A10:C20").MergeCells = true もしかして? 単に A1の中身を Sheet2の A1にコピーしたいだけでしょうか? それなら 今までのを全てわすれて ↓ だけです Sheets("sheet2").Range("A1") = Sheets("sheet1").Range("A1")

susu14
質問者

補足

具体的に説明します。 Sheet1にはRange("A1:W2")の範囲までセル結合されています。この部分が見出し部分です。 (A1とA2がセル結合、B1とB2がセル結合、C1とC2がセル結合・・のように何個もセル結合されています。) ちなみに、この見出し部分はオートフィルタにもなっています。 Range("A3:W*")までの範囲にデータがあり、データ部です。 3行目から何行目までセルにデータが入るかはファイルによって異なります。 これらすべてをSheet2にコピーしたいのです。 見出し部分は必ずSheet2にコピーします。 データ部分もデータをすべてSheet2にコピーします。 その後Sheet2にコピーしたデータ部のデータをソート等の処理を行い、見出し部とデータ部の印刷処理をしたいのです。 私が色々と勘違いをしていました。 すみません。 セル結合されていた場合、別のシートにコピーできないと思っていたので・・ さらに、セル結合を戻したかった理由としまして、印刷処理をその後Sheet2で行うためです。 長くなりましたが、Sheet2にSheet1の見出し部とデータ部をコピーするよい方法がありましたら、教えてください。 本当に何度もすみませんがよろしくお願い致します。

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.3

全て結合を外すには 後に↓を入れてください Sheets("Sheet2").Cells.MergeCells = False ↑は sheet2の全ての結合を外します 特定の範囲なら Sheets("Sheet2").range("A10:C20").MergeCells = False とします。

susu14
質問者

補足

回答何度もありがとうございます。 セル結合の外し方はわかりました。 私の補足内容が説明不足でした。 セル結合を外し、コピーします。(ここまではできました。) その後、セル結合した状態に戻すことは可能でしょうか? コピー後は元のセル結合した状態にしたいのですが。 何度も申し訳ありませんが、よろしくお願いします。

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.2

送り先がセル結合されているのでは? 前に↓を入れてください Sheets("Sheet2").Cells.MergeCells = False ↑上は全てのセル結合を外しています 必要に応じセルの範囲を変更してください。

susu14
質問者

補足

なんとか実行できました。 ありがとうございました。 ところで、コピー後にセル結合を元に戻したいときは どのようにすればいいのでしょうか? 1個や2個ならいいのですが、10個以上セル結合されていた場合に元に戻すよい方法はあるのでしょうか?

  • kumadayo
  • ベストアンサー率31% (9/29)
回答No.1

Sheets("Sheet2").Cells.Clear を前に入れたら動いたよ^-^?

susu14
質問者

補足

回答ありがとうございます。 前に入れて実行してみましたが、 まだエラーとなります。 セル結合されていないセルを指定しても コピーができません。 同様のエラーとなってしまいます。

関連するQ&A

専門家に質問してみよう