• ベストアンサー

続質問 エクセルVBAで、行コピーを複数行にペーストする方法

先日した質問に追加があるのですが、 『A2:J100の範囲に顧客住所録データがあり、 それを別シートにペーストする時、 F列は、宛先シールの印刷枚数が入っているので、 Wordで差し込み印刷をする為のエクセルのデータを作る為 2行目のデータが3枚必要ならば、3行ペーストする方法。』 追加の質問: K列に『1/3、2/3、3/3』と、入れるにはどうしたら よいか、すみませんが御指導下さい。宜しく御願い致します。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

こんばんは。 #3です。 Cells(idx, 11) = "1" Cells(idx + 1, 11) = .Value Else Cells(idx, 11) = "1" の部分を追加されたのだと思いますが、前半の処理は複数の行に対して行わなければならないはずが、1行(とその次の行)にしか行っていませんし、代入している数字がご要望の「1/3」のような記述にもなっていませんね。 後半の部分は「複数でない場合」(=1行だけ)の場合なので、作成なさったように「1」と記述するか、他に合わせて「1/1」とするのかどちらでしょうか? さらに、エクセル特有のセルの書式というものも考慮しなければなりません。分数表記という書式がありますからそれを利用するか、文字列にするか・・・前者だと1/1という表記がうまくいかないですし、後者の場合、書式設定を文字列に指定しないでうっかり入れると、数字や日付として判断されちゃったりします。 とりあえず、その部分だけの例です。  For tmp = 1 To .Value '複製した行数回番号を入れる    '番号は "'"+順番+"/"+総数  (Str()は数字を文字化する関数です)   Cells(idx + tmp - 1, 11).Value = "'" & Str(tmp) & "/" & Str(.Value)  Next tmp Else  Cells(idx, 11).Value = "' 1/ 1"  '1枚の場合は固定値 *)1枚は1/1で表記するものとしています。また値は全て文字列で扱うことにしていますが、セルの書式を設定するのが面倒なので、'1/3のような文字列入力でまかなっています。 なお、tmpという変数が増えてしまいましたので、最初にDimで宣言しておく方が良いでしょう。(IntegerまたはLong)

NEWYORKERS
質問者

お礼

出来ました!思いどおりのものになりました!! 以前の質問のご回答のおかげで作業効率が大変良くなったのに 私の作った宛先シールを貼る部署の方から、 今回のような要望を受け、最悪自分が出来なければ また以前のようにコピペを繰り返すしかないと落胆していました。 これ以上要望がないかを確かめた後お礼を申し上げたいと思い、 お礼内容に時間がかかってしまってすみませんでした。 完璧に完成しました。 そして、コード内容が理解出来たことがなにより嬉しいです。 私が理解出来る様にして下さった事も含めて 本当に御指導どうもありがとうございました。

NEWYORKERS
質問者

補足

補足はありません。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>2行目のデータが3枚必要ならば、3行ペーストする方法。』 どの列に3行とか、繰り返す回数は入っているのかな。 前の質問と関連すすなら、この質問にも、前の質問番号を書くこと。回答者に載せてもらって読者はわかるというのはおかしい。 ーー それに書式等が移らないが、初心者は特に、Copy方ではなく、1行ずつ上行からの代入処理の方法を勧める。 例データ A列  B列  C列(重複回数) a x 3 b y 2 c z 1 d u 4 C列に重複行数指定とする。 コード Sub test01() d = Range("A65536").End(xlUp).Row For i = d To 1 Step -1 '下行から処理がミソ k = Cells(i, "C") 'C列から重複回数取得 For l = i + 1 To i + 1 + k - 1 - 1 '重複回数-1回だけ繰り返し Rows(l).EntireRow.Insert '行挿入 For j = 1 To 2 'A-B列代入 Cells(l, j) = Cells(i, j) Next j Next l Next i End Sub ーーー 結果 a x 3 a x a x b y 2 b y c z 1 d u 4 d u d u d u

NEWYORKERS
質問者

お礼

前回の質問番号をNo.1の方に載せていただきまして、 有難う御座いました。(本来ならば、No.1の方のお礼内容に書くべき ところをすみません。)おっしゃるとおりで恥ずかしかったです。 そして、コードも教えて下さって有難う御座いました。

NEWYORKERS
質問者

補足

補足はありません。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

勉強中ということでしたので、ヒントのみです。  Rows(idx + 1).Resize(.Value - 1).Insert shift:=xlDown でF列の数字分(.Value)の行の挿入をしています。 (1行は最初にあるので、実際は.Value-1行を挿入している) この時に(この後に)、挿入された行のK列に  行数番号(1~.Value)+"/"+全体行数(.Value) という文字列を入れてゆけばよいでしょう。 (数字を+演算しても文字の連結になりませんのでご注意)

NEWYORKERS
質問者

お礼

御指導ありがとうございます。 早速取り組んでみたのですが、 いきづまってしまって出来ませんでした。 本当に恐縮ですが、解答を教えて頂きたく御願い申し上げます。 現状のコードを貼り付けてみました。どうぞ宜しくお願いします。 Sub Macro1() Dim idx As Integer ActiveSheet.Copy after:=ActiveSheet For idx = Range("A65536").End(xlUp).Row To 1 Step -1 With Cells(idx, "F") If IsNumeric(.Value) Then If .Value > 1 Then Rows(idx).Copy Rows(idx + 1).Resize(.Value - 1).Insert shift:=xlDown Cells(idx, 11) = "1" Cells(idx + 1, 11) = .Value Else Cells(idx, 11) = "1" End If End If End With Next idx Application.CutCopyMode = False End Sub

NEWYORKERS
質問者

補足

補足はありません。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

(1)、Sheet1のA2:J2を選択コピー (2)、Sheet2のA1:A3に貼り付け (3)、K1に、'1/ と入力 (4)、K3までフィルコピー(選択枠の右下角の■をドラッグする) (5)、選択状態のまま、「置換」で、/ を /3 に「すべて置換」 といった手順を「マクロの記録」すれば必要なサンプルコードが得られます。 得られたコードを基にして 貼り付け行数の取得と反映 貼り付け先の決定 コピー&ペーストの繰り返し処理 等を加味すれば良いと思います。

NEWYORKERS
質問者

お礼

すみません。やっぱりわかりませんでした。 しかし、どうやって取り組んでいくかを理解しました。 御指導有難う御座います。

NEWYORKERS
質問者

補足

補足はありません。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>先日した質問 エクセルVBAで、行コピーを複数行にペーストする方法 http://okwave.jp/qa4373943.html >K列に『1/3、2/3、3/3』と 何に対して1/3とか2/3・3/3と決まっているのでしょう?

NEWYORKERS
質問者

お礼

質問を読んで下さってありがとうございます。

NEWYORKERS
質問者

補足

分母が総枚数で、分子がページ数とし、 ひとつの顧客に対して3枚(3行)なら、3を分母とする。 という感じです。変な書き方をしてすみません。

関連するQ&A

  • エクセルVBAで、行コピーを複数行にペーストする方法

    エクセルVBAでプログラミングしたいです。 A2:J100の範囲に顧客住所録データがあります。 それをコピーして、別シートにペーストしたいのですが、 F列は、宛先シールの印刷枚数を入れてあります。 例えば、2行目の客先の宛名シールは5枚必要という意味です。 Wordで差し込み印刷をする為のエクセルのデータを作るので、 2行目のデータが5枚必要ならば、5行ペーストしたいのです。 顧客によってシールの必要枚数が違います。 パソコン教室のVBAのコースに通っていますが、自分の作りたいものはまだ作れるようにはなれず、質問も教科書内の事に限られています。 どなたか助けて頂きたく宜しく御願い致します。

  • Excel 行を自動追加する方法

    どなたかご存知の方がいらっしゃいましたら御回答お願い致します。 現在A~C列に顧客情報が入っており、D列以降には月別の金額が入っております。 A~C列は別のシートから反映させている状態です。 今まで新規顧客が増えた場合は 末尾の行に追加していたので問題なかったのですが 複数取引のある顧客に関しては枝番を付け、まとめようという話になりました。 顧客データが入っている別のシートは当然行追加すれば問題ないのですが 金額を入れてるリストは今まで通り単純に参照すると 金額の行と顧客情報の行がバラバラになってしまう為困っています。 新しい行が増えた場合、参照している側も行が増えるような仕組みはExcelでは不可能なのでしょうか?

  • 【VBA】コピー&複数個所のペースト繰り返し

    前回と同じ質問ですが、説明が足りなかったので画像を添付いたしました。 添付画像のように、1つの値をコピーし、別シートの複数個所(同じ列の違う行)へ順次ペーストしたいのですが、貼付けデータやペーストする回数が増えた場合でも対応できるようなVBAを教えてください。 コピペする条件としては、MsgBox関数を使い「コピーするか?」で「はい」を選択すると、任意のセルにデータがコピペされます。 よろしくおねがいいたします。

  • エクセル クリップボードからペースト 行を削除

    エクセルについて質問です。 エクセル以外のソフトウェアから文字列をコピーして、エクセルにペーストするのですが、エクセル以外のソフトウェアからは自動的に3行に改行された文字列が、クリップボードにコピーされます。 必要なのは3行のうちの最後の一行で、前の二行は不要なので、一旦メモ帳などにペーストしてから3行目だけを切り出してペーストしていました。 しかし、そうすることなく、そのままエクセルへペーストして、3行のうちの前2行を自動的に削除できないものかと思いました。 そのような方法がありましたら教えて下さい。 宜しくお願い致します。

  • エクセルで複数のシートにあるものをひとつに

    お世話になっております。 似たような質問を検索してみましたが、いまいち要領がつかめませんので教えて下さい。 ブックに複数のシートがあり、それをを同じブックまたは、別のブックでもいいので一つのシートにまとめたいのですが何かいい方法はありますでしょうか? ブックにより、シート枚数が違います(多いものは30シート以上)。 同じブックでの各シートの列のタイトルは同じで、行はデータ量により違います。(多いものは1000行以上) イメージとしては、シートを全コピーして、新しいシートにペースト。 次のシートを全コピーしてそれを、今ペーストした下の行にペースト。 現在はこのコピー&ペーストで地道に作業しております。 かなり時間を取られております。 XPでオフィスは2007を使用しております。

  • エクセルVBA、数式の入ったセルのコピーについて質問です。よろしくお願

    エクセルVBA、数式の入ったセルのコピーについて質問です。よろしくお願いします。 シートのA列は日付の入ったセルがあり、データを更新する度に行が追加されていきます。 数式(1)~(3)は、それぞれ異なる計算式が入っており、日付データを参照して計算を行っています。   A    B    C    D 1 日付データ 数式(1) 数式(2) 数式(3) 2 日付データ 数式(1) 数式(2) 数式(3) 3 日付データ   4 日付データ   5 日付データ   A列にデータが追加したときに、B~D列の数式をA列の最終行までコピーしたいのですが、 どのようなコードを書けばよいでしょうか? ちなみに、1行目のB~D列には、データ更新の有無に関わらず、必ず数式が入っているものとします。 何かよいアドバイスがあればよろしくお願いします。 【補足】 単純に考えると、B1~D1をA列の最終行までAUTOFILLすれば良いのでしょうが、データ数がかなり多く、 この方法だと時間がかかってしまいます。A列のデータ追加前の数式セルの最終行から、追加後の最終行までとすると、処理は早くなるのでしょうか?

  • 差し込み印刷で宛名を追加できない。

    ワード2007の差し込み印刷機能で案内状に宛先氏名を入れ予定通りうまく印刷できた。データーベースにはエクセル2007で外部データー取り込みメニューで、CSV住所録ファイルを取り込んでデーターベースとしました。 次に、あて先が増えたので、エクセルの住所録に宛先を追加して、ワードに戻り差し込み印刷しようとしたが結果のプレビューに追加した宛名が出てきません。 念のため、文書とデーターの関連性を解除して、初めから差し込み印刷を始め、データーベースとしてエクセルの住所録を選択したが追加前の宛先は出てきますが、追加した宛先は結果ビューに出てきません。どうしたら追加宛先が印刷できるようになるかご教授ください。

  • ■VBAで条件による行挿入方法

    VBA初心者です。Excel2007、XPを使用しています。 A列からQ列、平均100行程度の顧客データがあります。 F列に型番(アルファベット+数字等)が記入されており、 その型番内に「半角もしくは全角スペース」が含まれている場合、 該当があった行の下へ、該当行をコピーした内容を追加したいです。 できれば、スペースがある数だけ挿入し、 かつ該当行、挿入行に色付け出来ればなお良いです。 ご教授頂けないでしょうか。 宜しくお願い致します。

  • エクセルのコピー&ペーストについて

    エクセル2010を使用しています。大量のエクセルデータを、指定された表に張り付けたいのですが、指定された表の行が2列ずつセルを結合されている為、うまくいきません。何か良い方法をご存じの方、教えて下さい。

  • excelで複数行を一行に並び変える方法

    関数を駆使すれば出来ると思うのですが・・・わかりません・・・。質問させて下さい。 excelの表を、 10 30 40 50 60 70 80 20 40 10 40 40 40 98 76 56 78 69 34 68 87 53 67 53 56 76 78 65 87 23 12 56 45 32 87 87 87 87 65 25 25 46 27 46 98 98 98 65 45 90 65 46 76 87 の様になっているのを、 10 30 40 50 60 70 80 20 40 10 40 40 40 98 76 56 78 69… と一行に並べ変えたいのです。 行数が200行とありコピーペーストだと時間がかかるため何か良い方法無いでしょうか? ご指導宜しくお願いします。

専門家に質問してみよう