• ベストアンサー

結合したセルのある行のコピーについて(エクセル)

Excel2000を使って下のような表を作りました。 約500行ほど入力されています。 本の題名(日本語)│本の題名(英語)│値段 花                     10 樹          MOK         20 ・・・          ・・・           ・・・ これを下のような表に作り変えたいのです。 本の題名(日本語)│本の題名(英語)│値段 花                       10 花(貸出日)                  10 花(借りた人)                 10 樹            MOK         20 樹(貸出日)       MOK        20 樹(借りた人)      MOK        20 ・・・            ・・・          ・・・ このように1行につき各2行増やしたいのです。 日本語の題名と値段は必ず入力されていますが、英語の題名は必ずしも入力されていません。 問題はこの各項目(本の題名(日本語)、本の題名(英語)、値段)がそれぞれ(8,8,2)個のセル結合をしていることなのです。 その表の上下との関係もあって、この結合をしないわけにはいきません。 ここの過去ログを見たのですが、(テキストファイルで入力してはりつける、.csvファイルを作るなど)、それらの方法ですとセルの結合がとかれてしまいます。 そうしますとまたひとつひとつセルの書式設定をしないといけなくなるので、その方法は避けたいと思っています。 一行ずつセルのコピーをして貼り付ける以外のやり方がありましたらご教授ください。 またどうしても無理だ,ということでしたら、そうお答えいただけると幸いです。 よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

全部が分かると、かえって分かりやすいものができたのかもしれません。 コードを見やすくして、補足の要件を取り込んでみました。 試してみてください。 Sub insRow91()   Dim kmk As Integer   '項目数カウンタ(結合された7項目)   Dim colTTL As Integer  '列の総数   Dim rw As Long     'セル   'B列を基準に一番下から7行目まで2行の挿入と、貼り付けを実行する   ' (5行目が表題。6行目が1件目なので7行目が最後の挿入行)   For rw = Range("B65536").End(xlUp).Row + 1 To 7 Step -1     '2行挿入     Rows(rw).Insert     Rows(rw).Insert     With Range("B" & rw)       For kmk = 1 To 7         '各項目のそれより前の列総数をカウントする         ' (Offsetを使用しているため、B列が0列目としてカウントする)         Select Case kmk           Case 1: colTTL = 0       'ナンバー           Case 2: colTTL = colTTL + 2  '本の題名(日本語)。ナンバーの2列分追加           Case 3: colTTL = colTTL + 8  '本の題名(英語)。本の題名(日本語)8列分追加           Case 4: colTTL = colTTL + 8  '値段。本の題名(英語)8列分追加           Case 5: colTTL = colTTL + 2  '係名。値段2列分追加           Case 6: colTTL = colTTL + 2  'キー。係名2列分追加           Case 7: colTTL = colTTL + 2  '備考。キー2列分追加         End Select         '結合状態で貼り付ける         ' 挿入位置から、上に1行上の、colTTL列分右の結合セルをコピーする         .Offset(-1, colTTL).Range("A1").Select: Selection.Copy         ' コピーしたセルを2行に貼り付ける         ActiveCell.Offset(1, 0).Range("A1:A2").Select: ActiveSheet.Paste       Next     End With   Next End Sub

manbou-r
質問者

お礼

たびたびの回答、本当にありがとうございます。 お返事が遅くなってすみませんでした。 早速試したところ、この方法で見事できました! 後は(貸出日)と(借りた人)をどんどん入れていくだけです。 最初から詳しくご説明すればよかったですね。 今はとりあえずこのコードをコピー&ペーストして使っただけで、中身を理解できていません。 くわしくコメント等いれて頂いたので、これからじっくりコードを見たり自分で調べて中身もきちんと理解できるようがんばります。 とても助かりました。本当にありがとうございました。

その他の回答 (5)

  • ADEMU
  • ベストアンサー率31% (726/2280)
回答No.5

再びADEMUです。 全てを選択した後、 エクセルのデータ(D)を選択して「並び替え」(S)を選択するとカラムが3つ出てくると思います。 最初のカラムにA列を選択し、2番目のカラムにB列を選択して並び替えを実行してみて下さい。

manbou-r
質問者

お礼

この後も試したんですが、結局結合セルがあると並び替えができないようで、できませんでした。 詳しく丁寧に教えてくださったのに役立てられず、申し訳ありません。 回答してくださって、ありがとうございました。

manbou-r
質問者

補足

たびたびの回答、本当にありがとうございます。 並び替えのやり方はよく分かりました。 早速やってみたところ、先程と同じ「この操作には同じサイズのセルが必要です」というエラーが出てしまいました。 試しに、同じデータを結合セルなしで作ってやってみたところ、きちんと思ったように並び替えができました。 ですので、並び替え用の数字とアルファベットも8つのセルを結合させて 数字、アルファベット、本の題名(日本語)、本の題名(英語)だけで並び替えさせてみたんですが、それでもやはりだめでした。 もしかして、エクセルで結合セルの並び替えはできないのでしょうか? それともまだ私が何かやり方を間違えているんでしょうか? ADEMU様のやり方で、後一歩というところまで来たのでとても悔しいです。 これから、もう少しいろいろやってみます。 もし何かお気づきの点でアドバイスいただければ、ありがたいです。 よろしくお願いします。

  • nintoku
  • ベストアンサー率16% (5/31)
回答No.4

う~ん。 私の頭が悪いのか、主旨がよくわからないので まちがっていたらメンゴm(_ _)m 統合したセルを同じフォーマットで下行へコピーだけなら、 セルの右下にでるマウスポインター(+)でドラッグすれば、 セルの統合は解かずにできますが... この場合、最初に行を挿入して 本の題名(日本語)│本の題名(英語)│値段 花                       10 花(貸出日)                  10 花(借りた人)                 10 樹            MOK         20 樹(貸出日)       MOK        20 樹(借りた人)      MOK        20 ・・・            ・・・    ここまでを作ります。後は範囲をドラックしてグループ化してから、(+)で下方へ1000セルぐらいドラッグすれば 一瞬でセルの統合は解かずに同じものがコピーされます。 ただしグループ化したデータだけすべて同じにコピーされますので、 データが全て違うのであればこの方法は出来ません。 なんか、違うような気もしますけど・・(--;)        

manbou-r
質問者

お礼

お気づきのように、今回の場合500件全てが違うデータなので、この方法は使えないようです。 せっかく回答していただいたのに役立てられなくて、すみません。 でも回答してくださって、ありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

ソートできれば簡単と思いますが、マクロを書いてみました。 結合セルの数の問題でソートできないかもしれません。その時は参考にしてみてください。 (1)A列から8列、8列、2列の結合で、 (2)1行目は表題 (3)2行目からデータの繰り返し (4)A列は最後まで連続して入力されている。 『本の題名(日本語)』の2、3行目は空白 『本の題名(英語)』、『値段』は元のセルを複写してそれぞれ結合しています。 Sheet1での例です。コピーしたBookでテストしてみてください。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示 Sheet1をダブルクリック。でてきたコードウインドウに下記コードを貼り付けます。 シートに戻り、ツール→マクロ→マクロで『insRow』を実行します。 ここから ↓ Sub insRow()   Dim rw As Long 'セル   For rw = Range("A65536").End(xlUp).Row + 1 To 3 Step -1     '2行挿入     Rows(rw).Insert     Rows(rw).Insert     With Range("A" & rw)       '最初の8列×2行を結合する。本の題名(日本語)       .Offset(0, 0).Range("A1:H1").MergeCells = True       .Offset(1, 0).Range("A1:H1").MergeCells = True       '本の題名(英語)は元のセルをコピーする       .Offset(-1, 8).Range("A1").Select: Selection.Copy       ActiveCell.Offset(1, 0).Range("A1:A2").Select: ActiveSheet.Paste       '値段は元のセルをコピーする       .Offset(-1, 9).Range("A1").Select: Selection.Copy       ActiveCell.Offset(1, 0).Range("A1:A2").Select: ActiveSheet.Paste     End With   Next End Sub

manbou-r
質問者

お礼

お返事が遅くなりました。上の補足ではわけもわからず妙な事を言っていました。 戸惑われたかと思います。申し訳ありません。 nishi6さんの方法はすごいですね。 あっという間に複数列の挿入ができてびっくりしました。 ただ質問のときに示したものより実際はたくさんの項目があるのでそのままでは使えないようです。 (実際の表では4行目までが表のタイトル等、5行目は問題の表の項目等の行、 A列は空白、B6-C6が結合してナンバーが振ってある、D6-K6が本の題名(日本語) L6-S6が本の題名(英語)、T6-U6が値段、V6-W6が係名、X6-Y6がキー、Z6-AP6が備考、 こうした行が正確には482件分あります) nishi6さんの方法ですと、本の題名(日本語)が空白になるので、 わけもわからず、Offset(-1, 8)をOffset(-1, 7)としてみてその式を本の題名(日本語)の下の式と入れ替えてやってみました。 そうしたら、本の題名(日本語)も元のセルをコピーして出す事ができました。 この方が、後で入力するときに便利かなとも思いました。 ただそれ以外の場所の意味が全く分かりません。 こんな状態ではマクロを使うのは無理でしょうか。 これだけ時間をかけてやっていては、もう一つ一つ手で入力した方が速いかとも思うのですが、マクロを使った方がミスがなさそうなので、マクロを使いたいと思います。 ここをこうすればいい、などのアドバイスをしていただけたらと思います。 よろしくお願いします。

manbou-r
質問者

補足

回答ありがとうございます。 結合セルを使っているので、多分ソートはできないと思います。 (ソートを利用した行の増やし方があるんでしょうか?) 教えていただいた方法を試したいと思います。 ただ、マクロを組むのが初めてのため、ちょっと時間がかかりそうです。 下の方の方法も試すので、明日のお返事になってしまうかと思います。 素早く回答いただいているのに、申し訳ありません。

  • ADEMU
  • ベストアンサー率31% (726/2280)
回答No.2

(貸出日)と(借りた人)が別のセルであれば簡単なのですが、同じであればちょっとした技をつかわなければなりません。 まず、本の題名(日本語)のセルの前に2列増やします。 1列目に1~500まで連続付番(できますよね)します。 次に情報の入った全てのセルを選択し、コピーします。 これを501番目(1行開けた方がいい)と1001番目に2度張り付けます。そうすると同じものが3つずつできます。 次に501番目から1000番目までの一番後ろのセルに(貸出日)、1001番目から1500番目には(借りた人)を全てコピーしてはりつけます。 その後ろのセルは本の題名(日本語)と同じだけセルを結合しておいてコピーで全て同じようにします。 そして、後ろの列に関数で=CONCATENATE(A,B)として2つの文字を結合させます。これを全て選択してコピーして同じ場所に形式を「値」にして張り付け、更にそれを元の位置に張り付ければできあがり。 次に2列目に1~500までに「A」、501~1000まで「B」、1001~1500までに「C」を入れます。 これで全てをならびかえて「数字」「アルファベット」の順に並びかえれば希望通りに表ができます。あとは、必要でない列を削除すれば良いのです。 ちょっと面倒でしょうか。

manbou-r
質問者

お礼

ADEMU様、昨日から今日にかけてやってみました。 大変分かりやすい説明のおかげで途中まではできたのですが、最後の >これで全てをならびかえて「数字」「アルファベット」の順に並びかえれば希望通りに表ができます。あとは、必要でない列を削除すれば良いのです。 と言うところでつまづいています。 イメージはなんとなく分かるんです。 今、 1A 2A 3A … 1B 2B 3B … 1C 2C 3C … となっているものを入れ替えて自分の望むように並べたいんですよね。 これをどうやればいいのかが分かりません。 A列だけ選択して入れ替えると後のデータの入ってるセルは動かなくて、数字だけ変わってしまいます。 かといってデータのあるセル全てを選択して並び替えをしようとすると 「この操作には同じサイズのセルが必要です」というウメッセージが出てエラーになってしまいます。 ならびかえ、というものがよく分かってないのかもしれません。 申し訳ないんですが、そこのところをもう一度ご回答いただけますでしょうか? よろしくお願いします。

manbou-r
質問者

補足

回答ありがとうございます。 書き方が分かりにくくてすみません。(貸出日)と(借りた人)は別のセルになります。 ------(セルの区切り) 花 ------ 花(貸出日) ------ 花(借りた人) ------ ADEMU様はこう思われたんでしょうか。 ------(セルの区切り) 花 ------ 花(貸出日) 花(借りた人) ------ 書いてくださった方法は、同じ場合を想定されているんでしょうか? ざっと読んだだけではよく分からないので、これから試してみます。 お返事できるのが明日になるかもしれません、申し訳ありません。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんにちは。 セルをコピーし、右クリックの「形式を選択して貼り付け」-「値」でできませんか? 主旨が違っていたら補足お願いします。

manbou-r
質問者

補足

回答ありがとうございます。 主旨は違っていないと思います。 ただそうしますと500件×2行で1000回同じことを繰り返しますよね。 もうすこし、簡単な方法がないかなと思っていたんです。 また、教えていただいた方法を試してみたんですが 既に入力してある行の下に1行挿入し、「形式を選択して貼り付け」-「値」すると 「この操作には、同じサイズの結合セルが必要です」というエラーが出てしまいました。 ただ普通に貼り付けした場合にはこのエラーは出ませんでした。 私がnoopee様の思っているのとは違う方法でやってしまっているのでしょうか? もしまたアドバイスいただけましたら幸いです。

関連するQ&A

  • エクセルで、結合したセルへのコピーに困っております。どうかお助けください。

    過去のログを調べてみたのですが、わかりません。どうか教えてください。 エクセル2000を使っています。今 sheet1にある名簿のデータをsheet2の表にコピーしたいのですが、sheet2の表は、3つの行を1つに結合しております。すなわちsheet1のA1、A2、A3、A4、A5、A6.....にあるデータをsheet2のA1、A2、A3を一つにしたセルにコピーしますと、セルが結合が解除されてコピーされてしまいます。 また、sheet2のA1、A2、A3を一つにしたセルのところで、「=sheet1!A1」と数式を入力しますと、そのセルはうまくデータが入力(コピー?)されるのですが、そのセルをそのままドラッグしますと、2番目のセル(sheet2のA4、A5、A6をひとつにしたもの)には、sheet1のA4が入力されてしまいます。sheet2の結合されたセルにsheet1の未結合のセルのデータを簡単に入力またはコピーする方法はないでしょうか。どうかよろしくお願いします。

  • エクセル2007 結合セル

    エクセル2007 結合セル 下の画像のようなエクセルシートを 練習用に2枚作成しました。 上段が月の入力フォームで、 下段が各個人の営業成績表です。 ここで、下段の成績表の1行目が B列からI列まで、セル結合されており その中に表題の( 月分)が表示されています。 ここの月の前の空白部分に上段の入力フォームの黄色で 入力した月の数字をを自動的に表示させることはできるのでしょうか。 結合させなければ、簡単にできたと思いますが、 結合している前提で、教えていただけるとありがたいです。 よろしくお願いします。

  • Excel VBAで結合セルに連番を振っていくには?

    Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。

  • エクセルで結合セルがあるため最終行が解りません。

    エクセルで結合セルがあるため最終行が解りません。 A列2行目と3行目が結合セル(見出し)のためA列の最終行(罫線を除きデータが入ってる行)を求めれなくて困ってます。データは4行目以降から入力していく予定ですが Range("A" & Rows.Count).End(xlUp).Row は2となるため+1で入力行を求めてると3となってしまいます。A4からAの最後の行の範囲で罫線を除く最終行を出せればよいのですが  最初は4 以下順次5 6 7 ‥ どなたかご教示頂けないでしょうか?

  • エクセル2003 セルの結合について

    エクセル2003で、セルを結合して中央揃え(またはセルの結合)をした行を選択し、行の挿入をした場合の疑問なのですが… 例えば、B2:D2、B3:D3、B4:D4をそれぞれセルを結合して中央揃えをしたとします。 次に、3行目を選択して行を挿入した場合、「セルを結合して中央揃え」が反映されません。 (※挿入オプションで、上と同じ書式を適用または、下と同じ書式を適用をしても反映されません。) ちなみに、上記のセルに、セルの結合をし、塗りつぶしをしてから3行目を選択して行を挿入すると、「塗りつぶし」の書式は反映されます。 なぜ、この場合、セルを結合して中央揃え(またはセルの結合)の書式は反映されないのでしょうか? ご存知の方、ご教示いただけないでしょうか? よろしくお願い申し上げます。

  • エクセルで結合したセル同士のコピー、貼り付けを教えてください。

    エクセルで4列を結合したもの(1つのセルは1行ですが、それが5列、5行くらいの表になっています)にある数字を別のファイルの同じような表にコピー、貼り付けをしたいのですが、できません。 コピー元には計算式の答えが出てきているので、その値だけ貼り付けようとすると、「この操作には、同じサイズの結合セルが必要です」と出てしまうのです。 表は列幅、行の高さともに全く同じなので、「同じサイズ」という意味もわかりません。 どうすれば良いのか教えてください。 ※ちなみにコピー元のファイル自体をコピーして、そのコピー元からコピー先のファイルの表に値だけ貼り付ける作業は普通にできました。

  • エクセルの並び替えで、タイトル行があるときとセル結合があるときにうまくいかない。

    エクセルのデータ並び替えで2点質問がありますので、よろしくお願いいたします。 エクセル2007とエクセル2003で実行してみましたが、結果は同じでした。 1.並び替えをする際に、先頭行をタイトルとして認識させると思うのですが、タイトル行が2行とか3行ある場合にはどうすればいいでしょうか? 先頭行以外がデータとして認識されてしまい、一緒に並び替えされてしまいます。 2.並び替えをしたくてもデータ中にセルの結合をしていると並び替えしてくれないようです。実際の現場ではセルの結合をしている表は結構あると思うのですが、セルの結合があるとやはり並び替えはできないのでしょうか?

  • Excel2013のVBA最終行取得結合表複数あり

    いつもお世話になってます。表複数 Excel2013のVBAで質問です。 A1,A2セルは空欄です。そして、A3:A4は結合されています。その後、A5:A10、A11:A15・・・と結合セルが続いています。そして、A95:A100まで結合セルが続いているとして、A101は合計欄のような単体のセルになっています。 その下は、空白セルが10セル位続いており、またその下にも、上と同じような表があります。 結合セルには、何らかの値が入力されています。最終行のA101には入力されていません。 このようなシートの、上側の表の最終行にあたるA101を取得したいと思っているのですが、下の表の最終行は取得するのですが、上からいくと結合セルがあり思うように取得できないでいます。 何か方法があるでしょうか?

  • Excelで2行結合したセルに連続行参照させたい

    エクセルでシートAで2行づつ結合したセルにシートBにある連続の行を反映させたいのですが 結合したセルA1:A2に =シートB!A1 と入力して式のコピペをしても A3:A4のセルには =シートB!A3 となり2行とばしになってしまいます。 どのようにすれば上手くいくでしょうか? バージョンはExcel2010です。

  • エクセルで結合セルのコピー

    エクセルの表で不規則な行数になっている結合セルに、A1+1を下にコピーする方法はないのでしょうか? 割と良くあるパターンなので簡単な解決方法があるでのは?と思い少し調べてみたのですがマクロでの解決法しか見当たらないので質問させてもらいます。

専門家に質問してみよう