• ベストアンサー

EXCEL2010 VBAで空白行以外をコピー

EXCEL2010を使用しています。 シートAではセルA1からA10に順にデータを入力していきます。 A1からA10のすべてにデータを入力する場合やA1からA4のみデータを入力する場合等があります。 このA1からA10のデータをシートBのA1からJ1にコピーしたいと思っています。 空白以外のデータをコピーして、コピー後はシートBのA1:J10で空白の列は削除したいと 思っています。 (例) シートA A1 ○ A2 ○ A3 × A4以降すべて空白 シートB A1 ○ B1 ○ C1 × D1からJ1までは列ごと削除 これをVBAで作成したいのですがどなたか詳しい方押してください。

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

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

作成例: sub macro1() ’行列を入れ替える  worksheets("SheetA").range("A1:A10").copy  worksheets("SheetB").range("A1").pastespecial _   paste:=xlpasteall, operation:=xlnone, skipblanks:=true, transpose:=true ’空白を削除する  on error resume next  worksheets("SheetB").range("A1:J1").specialcells(xlcelltypeblanks).delete shift:=xlshifttoleft end sub 貼り付け先はA1:J1ですが,もしもホントに「列ごと削除して良い削除したい」なら  worksheets("SheetB").range("A1:J1").specialcells(xlcelltypeblanks).entirecolumn.delete shift:=xlshifttoleft とします。 #あなたの言う「空白」がホントは「空っぽ」の意味じゃなく「空白に見えるけど実はこれこれが入ってました」の場合,正しい具体的な内容を添えてご相談を投稿しないとダメな場合があります。

Not_Pro
質問者

お礼

回答ありがとうございます。 さっそく試してみたいと思います。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 シートAタブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キー押下でマクロ実行してみて下さい。 Sub sample() With Worksheets("シートB") For i = 10 To 1 Step -1 If Cells(i, 1) = "" Then .Columns(i).Delete Else .Cells(1, i).Value = Cells(i, 1) End If Next End With End Sub

Not_Pro
質問者

お礼

回答ありがとうございます。 このような方法もあるのですね。助かります。

関連するQ&A

  • VBAで行のコピー

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

  • VBA 特定の行を別シートへコピー・削除

    下記のように、VBAで特定の行を抽出して別シートへコピーし、コピーした行については元リストデータを削除したいです。 具体的には、【出荷sheet】(C列注文番号は、出荷があった時に入力済)へ、注文番号に対応する行を【リストsheet】から抜き出してコピーし、コピー後は、【リストsheet】から該当行を削除したいです。 検索により調べてもうまく合致する回答が見当たらず困っています。 VBAの理解度は未熟ですが、何卒ご教授いただけると幸いです。 【リストsheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1   A111   鉛筆  ・ ・ ・ ・ ←コピー後、削除  2   1/2   B222   ペン  ・ ・ ・ ・ 3    1/5  C555 消しゴム・ ・ ・ ・ ←コピー後、削除  ・ ・   ⇓ 【出荷Sheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1 A111   鉛筆   ・ ・ ・ ・ 3   1/5   C555 消しゴム・ ・ ・ ・

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • VBAで検索して、行をコピー&追加したい

    Excel2010で以下のことをしたいのですが、VBAがあまりできないのでやれません。 どうか助けてください。 ・sheet1のA列に検索用の番号(例として商品番号)が入力されています。 ・sheet2はデータベースで、A列に商品番号B列に商品名、C列に国名、D列に価格・・~その後J列まで情報が入っています。(行数は1万行) ・sheet1に入っている商品番号でデータベースから行をピックアップし、該当の行をsheet1のB列以降にコピーしたいのです。 (シート3を新しく作っても構いません。やりやすい方で) ・ただし、同じ商品番号で複数の行がヒットしますので、複数の行がヒットしたら行を追加しながら、行をコピーしたいです。 どのように書いたら良いか参考になるURLだけでもご教授ください。 よろしくお願いします。

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • EXCEL2000でデータ行コピーしてコピーした列のセルを置換する作業をカンタンにする方法をご教授ください

    EXCEL2000を使っています。 データとしては、A~BC列(シートによって列数は違います)くらいまでのシートが複数あります。 これらのシートのA列には必ず西暦4桁が入力されています。 Sheet1シートのA列に2007と入力されている複数行をコピーして、最終行に貼り付けて、貼り付けた行のA列を2004から2008までのデータに置き換えていく作業を行ってます。 今はコピーして貼り付けて、貼り付けた範囲指定で2007から2004へ置換の作業を繰り返しておりますが作業しなければいけないシート数が沢山あって苦慮しております。 シート毎でもブック毎でも構いません。 VBA等の解決策や方法等を何卒ご教授願います。

  • VBAの構文で教えてください

    VBAの繰り返し処理 Do Until ~について教えてください。 シートの行列を全て書いてしまうと長くなるので 少し省略させていただきます。    A  B  C  D 1 2008 1 ○ 2008 2 2008 2 × 2008 このような羅列がデータ検索の際に何行になるかわからない状態のデータがあります。 C 列はBが1の場合○、2の場合は× D 列はAが数字があればそのままコピーするようにくみました。 ここで教えていただきたいのが、現在私はCとDの構文は AまたはBに数字があればC,Dに反映するという構文ではなく C、Dの列の最後まで全て数式を入力する構文にしています。 なので、A,Bに入力があってもなくても数式が飛ぶような構文になっています。 そこで、DO Until ~ を使用し A列が空白になるまで処理を繰り返すとすればいいのかなとおもうのですが、 Dim n as integer n=1 Do Until Sheets("sheet1").Cells(n, 1) = "" 空白までという構文(正しいかはわかりませんが)で行き詰っています。 これ以降のAが空白ならDに貼り付ける、 B列も同様に空白まで検索し○または×に置き換えるとは どのうように組み立てたらいいのでしょうか? また、申し訳ないのですが Cが×ならその列の背景を色づける(今回の場合なら2の列) とことまでしてみたいのですが・・・ このようなことが可能であれば教えていただければと思います。 VBAははじめたばかりで不勉強な点も多々ありますがよろしくお願いします。

  • "0"だけを空白で返すには?

    Excel2000を使用しています。VBAである文字列データ(数値)を必要な長さに分割してシートの1行目から順にセルに貼り付けています。 例)要素数が20個ならA1セルからA20セルまでに その際数値が”0”の時は空白に置換して貼り付けているのですが、「10.3」や「50.6」などの”0”までなくなってしまい、セルに貼り付けた際「1.3」や「5.6」になってしまいます。 純粋に”0”だけ空白に(置換)してセルに貼り付けるにはどうすればいいのでしょうか?教えてください。

  • 【Excel VBA】4つの条件を満たすデータを行ごと削除

    Excel2003を使用しています。 ある表の中のデータで、A列に次の条件に当てはまるデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか? (1) @(アットマーク)から始まる場合 (2) 数字から始まる場合 (3) ”キー”と入力がある場合 (4) 空白の場合 よろしくお願いします。

  • EXCEL2010 VBA 繰り返し処理

    EXCEL2010でVBAを使用してシートを作成しています。 シート1のA1にヘッダ数・A2に項目数を入力します。 VBAのコードを実行するとA1のヘッダ数が1ならシート2のA列には何も表示せず A2の項目数の分だけB列の14行目から数字を入力していきます。 (例)シート1   A1:1   A2:20  の場合はシート2のB14から20行下まで1~20の値を自動入力させる。   シート2   B14:1   B15:2     ↓   B33:20 シート1のA1が2以上の場合はシート2のA14から、シート1のA2の数値分アルファベットを表示させていきます。 (例)シート1   A1:2   A2:10  の場合シート2のA14:A23に「A」を表示させます。(シート1のA2の数分この場合は10行ずつ)               A24:A33に「B」を表示させます。               B列にはアルファベットごとに数字を1~表示させます。   B14:B23 1~10   B24:B33  1~10 シート1のA1が2なのでA・Bを表示 A1が3だとA・B・C A1が10だとA・B・C・D・E・F・G・H・I・JがA2の数字で区切りながら表示される。 このようなコードを書きたいのですが、どなたかご教示お願いします。

専門家に質問してみよう