• ベストアンサー

EXCEL VBA 行のコピー

お世話になります。 添付の表1のデータがあるのですが、これをボタンが押されたら自動で表2のようにしたいのです。 やりたい事・・・ 表1のA3から最下行までREADして品番(A??)と品名(B??)の空白セルを埋めたいのです。(表2黄色部分)各商品は最低でもデータ行が1行あり、各商品の行数は可変です。 最大でも10行程度だと思います。 どなたかご教授いただけますでしょうか? よろしくお願い致します。 環境 Windows XP SP3 Excel2003

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 色々やり方はあると思いますが、一例です。 Sub Sample1() Dim i As Long Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row If Cells(i, 1) = "" Then With Cells(i, 1) .Value = .Offset(-1) .Offset(, 1) = .Offset(-1, 1) End With End If Next i Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

yakkun2338
質問者

お礼

tom04さん、早速のご連絡ありがとうございます! そしていつもありがとうございます!! 諸事情によりご連絡が遅くなりまして大変申訳ありませんでした。 そして、ご教授いただきました方法でまたまた完璧に出来ました!!いつも本当にありがとうございます! 今回もお助けいただきまして誠にありがとうございました。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

全くループせずに一発でやっつけます。 sub maco1()  on error resume next  with range("A2:B" & range("C65536").end(xlup).row)   .specialcells(xlcelltypeblanks).formular1c1 = "=R[-1]C"   .value = .value  end with end sub

yakkun2338
質問者

お礼

keithiniさん、早速のご連絡ありがとうございました! そしていつもご連絡いただきましてありがとうございます! 当方の諸事情によりご連絡が遅くなりまして大変申訳ありませんでした。 ご教授いただきました方法で完璧に出来ました!! す、すごい・・ですね。 一度もループせずに実現できるなんて・・・ このようなシンプルなコードで実現できるのですね。 本当に勉強になります 。 このたびは本当にありがとうございました!

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

既に#1さん、#3さんが模範解答を下さっているので蛇足的に。 Sub sample() Dim MaxRow As Long, TagRow As Long, i As Long     MaxRow = Cells(Rows.Count, 3).End(xlUp).Row     TagRow = MaxRow         For i = MaxRow To 2 Step -1             If Cells(i, 1) > 0 Then                 Range(Cells(i, 1), Cells(TagRow, 1)) = Cells(i, 1)                 Range(Cells(i, 2), Cells(TagRow, 2)) = Cells(i, 2)                 TagRow = i - 1             End If         Next End Sub 皆さん同様、C列で最終行を判定出来ることを前提にしています。 下から攻めるやり方ですね。 とりあえず、参考までに。

yakkun2338
質問者

お礼

tsubuyukiさん、早速のご連絡ありがとうございました! そして当方の諸事情によりご連絡が遅くなりまして大変申訳ありませんでした。 ご教授いただきました方法で完璧に出来ました!! 詳細なコードありがとうございます。 大変勉強になりました。 このたびは本当にありがとうございました!

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

どこかでみかけて、Item(0)の使い方に感心したコードをアレンジしてみました。ご参考まで。 なお、C列で最下行が判別可能である事を前提にしています。 Sub test() Dim myArea As Range, targetRange As Range Dim i As Long Set targetRange = Range(Range("A1"), Range("C" & Rows.Count).End(xlUp)) For i = 1 To 2 For Each myArea In targetRange.Columns(i).SpecialCells(xlCellTypeBlanks).Areas myArea.Value = myArea.Item(0).Value Next myArea Next i End Sub

yakkun2338
質問者

お礼

mitarashiさん、早速のご連絡ありがとうございました! そして当方の諸事情によりご連絡が遅くなりまして大変申訳ありませんでした。 ご教授いただきました方法で完璧に出来ました!! 本当に助かりました。そして勉強させていただきました。 このたびはありがとうございました!

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

もし仮に、 空セルのある行は 例外なくどの行も 行丸々全て空セルである。 もしそうならば、 スペシャルセルズで空セルを選び出し 不可視にし、全体をコピーし 式コピーと書式コピーをすればいいのですかね? 如何ですか? お役に立てていたならば幸いです。

yakkun2338
質問者

お礼

Noubleさん、早速のご連絡ありがとうございました! 当方の諸事情によりご連絡が遅くなりまして大変申訳ありませんでした。 本件を実現するためにVBAのコードばかり注力してしまっておりましたが、Noubleさんのご指摘いただきました方法で実現できるかもしれません。 試してみます! この度は誠にありがとうございました!

関連するQ&A

  • EXCEL VBA条件による行の上下段へのコピー

    EXCEL VBA 条件による上や下段への行コピー お世話になります。 質問させていただきます。 添付図ようなの表1があります。 この表は各商品につき6行あって[品名]と[区分]だけは6行すべてデータが入っていますが、その他の[納品日]や[担当者]フィールドには6行全てには入っていません。(ピボットテーブルで集計した表のため) このほうが表としては見易くて良いのですが、オートフィルターをかけると空白行が抽出されずに不便で困っています。 そこで表1を表2のように全ての行にデータを入れればオートフィルターでもうまく抽出できるので、このようにしたいのです。(表2の緑色セル部分) 以下表1の条件です (1)品名、区分は必ず入っている (2)品番は各商品データの2行目(1行目ではなく)に必ず入っている (3)納品日~問屋名までは同一データが続く場合、先頭データの2行目(1行目ではなく)にしか入っていない (4)商品データは1商品につき6行表示されていて、可変ですが1000行ほどあります やりたい事・・・ [データ挿入]というボタンを作成して、ボタンを押したら表1が表2の緑色セルを埋めるような動作をさせたいです お忙しいところ恐縮ですがどなたかお知恵をお借りできますでしょうか? 何卒よろしくお願い致します。 環境 Windows XP SP3 Excel2003

  • EXCEL VBA 自動で8行毎に行を挿入したい

    お世話になります。 添付左図のような表があります。 この表をボタンをクリックしたら右図の表の様にするためのVBAロジックをご教授いただけませんでしょうか?(右図の黄色部分の行を自動で挿入したいのです) この表は担当者一人に対して売上区分というものをA-Hまで設けているため、一人のデータが必ず8行になります。 担当者数は現在は100名程度ですが、その都度変わるため可変にしたいです。 この担当者毎に8行あるデータを、ボタンを押したら新規に下行を挿入して[A+B]、続けて下行を挿入して[C+D]、[E+F]、[G+H]という具合に行を挿入する動作を全担当者のデータに全てに対して実施したいのです。 どなたかご教授いただけますでしょうか? よろしくお願い致します。 環境 windows XP SP3 Excel2003

  • エクセルで数字が入力されている行の数を出したい

    エクセル2000を使用しています。 数百行くらいのデータがあります。 C列は数字の1、2、9、が入力、又は空白となっています。 最下行3行にそれぞれ1、2、9が入っている行の数を出したいの ですが、どのようにすれば良いのでしょうか? 1、2、9の和を求めているのでは無く、入力されている行数を 出したいのです。

  • VBAで行のコピー

    タイトルの通りなのですが、VBAで行のコピーを行いたいのですが、うまくいきません。教えて下さい。  あ 1 (空白)  い 2 A  う 3 (空白)  え 4 (空白)  お 5 B この様な表があるのですが、3列目に空白以外の文字があった場合その下に1行コピーをしたいのです。 上の表の場合は3列目にAがあるので"い"と"う"の間に"い"の行をコピーしてもう一行入れたいです。Bについても同様です。 すいませんが、教えていただければありがたいです。 よろしくお願いいたします。

  • Excel VBA フォームが異なるデータのコピー貼付けする

    マクロの初心者です。 会社で管理しているある表があります。 その表の形式を変えたので、新しい表に自動でデータを張りつけたいです。 元の表は1ページに入力できるデータは15行(あげくにセル結合が一部で使われています)、 新しい表は、1ページに34行入力できます。 同じ行数なら、変数でループをまわせるのですが、元のデータと貼り付け先のデータの行数が異なると、どうしたらいいのか…。 一度、#?にデータを吐き出してから、34行づつ貼り付けていけばいいのかしら?でも、それもどう記述すればいいのか漠然としかわかりません。 いい方法をご存知でしたらぜひ教えてください。 お願いします。

  • エクセルで表の相違確認をVBAでしたい。

    お世話になっております。 下記の様な表がシート1とシート2に有、 シート2がシート1と比較して、行が多かったり、または 数量だけが変わっていたり、行が減っていたり、 表の行数は100から200行くらいあるので、VBAでどこが 違うかをすぐ分かる様に確認したいと思っています。 下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。 どの様に記述していいか分からなく、ご教示下さいます様宜しくお願い致します。    記 A列  B列  C列   D列   E列    No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本

  • エクセルで空白行を挿入するには

    一つの列に200ほどデータがあるとします。 そこで1行おきに空白行を挿入していきたいのですが手でいちいち空白行を挿入していてはらちがあきません。 関数等も含めて、なにか良い方法はないでしょうか。 例 セルA1   セルA2   セルA3 以下続く    ↓   セルA1   空白行(セル)   セルA2   空白行(セル)   セルA3   空白行(セル) 以下続く   といった具合です。

  • 【Excel VBA】一定数以上の空白行を削除する

    お世話になります。 現在、見積用のVBAを作成していますが、行き詰った為、質問いたします。 <前提> ・作成する見積明細は横8列で、行数は入力する項目数により可変です。 ・印刷して提出する為に、カテゴリごとに小計をページ最下行に挿入します。 (1ページあたりの行数は見出しを含めず20行です。) ・各カテゴリ内の項目数により、項目の最下行と小計行の間に相応の空白行ができます。 (例1) 項目が5個の場合は14行の空白行、その下に小計が表示される(ページ数は1ページ) (例2) 項目が25個の場合は14行の空白行、その下に小計が表示される(ページ数は2ページ) <問題> ・19行以下の空白行はそのままにし、20行空白ができた場合に該当行を削除して、シートを整えることが目的です。(21行以上空白ができることはありません) ・20行の空白はランダムに発生し、数も不定です。 下から最下行を探して、その一つ上の行から更にその上を探して、 差分が20の場合に該当行を削除する・・・ を繰り返して、上に上がっていく処理をイメージしますが、力不足でまとめられません。 書き方のヒントだけでもご教示ください。 何卒、宜しくお願いします。

  • エクセルで5の倍数の行を参照したい。

    表Aと表Bがあります。Aには各支店の売り上げデータが4行分入っていて5行目ごとにその小計の行が入っています。 さて、表Bにその小計部分だけを抜き出してきたいのです。あまりに多いので手作業でやるのですが大変です。そこで他のセルにc1に5、C2に10、C3に15と5の倍数の数値を入力しておいてそのセルを読ませて行を指定したいのですが 例えば=A5*(C1)のようにセルの行数を式で指定できるのでしょうか。(この例は失敗です。本当はA25を指定したいのです。)相対参照が使えて作成の手間が大きく省けるのですが。おしえてください。

  • エクセルで、毎回違う行数をコピーするマクロ

    こんにちは Excel2003 を使用しています。 マクロを使って毎回行数が違うデータをコピー貼り付けをしたいのですが よく分かりません。コピー先の最終行そろえのコピーの方法もお願いします。 毎回データ行数が違う2つの表を、新しい表の上の部分と下の部分に分けてコピーしたいのです。 コピー元1 0~20行 コピー元2 0~20行  1と2の合計は、0~20行です。多くても20行まで。 コピー元1を1行目から、コピー元2の最下行を20行目に揃えて、 貼り付け先の表には、上部と下部の間に空白行が入っOKです。 (例) コピー元1          コピー元2  X   Y   Z         AA   AB   AC 1鈴木 千葉 男      1山本 大阪 男 2田中 東京 女      2高橋 京都 女 3                3  ↓↓ 貼り付け先  A   B   C 1鈴木 千葉 男 2田中 東京 女 3 ・ ・ 18 19山本 大阪 男 20高橋 京都 女 のように上部と下部に分けてコピーしたいのです。 行数は毎回ちがい、合わせて20行の場合は、空白行はなくなります。 説明が、つたなく申し訳ありませんが よろしくお願いいたします。

専門家に質問してみよう