• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excek VBA 上へ詰めてコピー)

Excel VBAでのデータのセル上詰めコピーの方法

このQ&Aのポイント
  • Excel VBAでデータのセル上詰めコピーをする方法について教えてください。
  • データのあるシートから別のシートに空行を詰めてコピーするVBAの書き方について教えてください。
  • VBAのRangeとCellsの使い分けやエラー行のスキップ方法について教えてください。

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

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

1行目は数字じゃないけどコピーしたいとかの例外もあるのはまぁ良しとして。 要するに「A列が数字(の生データを仮定)である」を拾ってコピーする、だけの事です。方策は山ほどあります。 sub macro1()  worksheets("Sheet1").select  rows(1).copy destination:=worksheets("Sheet2").range("A1")  on error resume next  range("A:A").specialcells(xlcelltypeconstants, xlnumbers).entirerow.copy _   destination:=worksheets("Sheet2").range("A2") end sub どーしても1行ずつ舐め回したいなら sub macro2()  dim h as range  worksheets("Sheet1").select  rows(1).copy worksheets("Sheet2").range("A1")  for each h in range("A2:A" & range("A65536").end(xlup).row)   if h <> "" and isnumeric(h) then    h.entirerow.copy destination:=worksheets("Sheet2").range("A65536").end(xlup).offset(1)   end if  next end sub 同じことを行番号で行うなら sub macro2r()  dim r as long  worksheets("Sheet1").select  rows(1).copy worksheets("Sheet2").range("A1")  for r = 2 to range("A65536").end(xlup).row   if cells(r, "A") <> "" and isnumeric(range("A" & r)) then    rows(r).copy destination:=worksheets("Sheet2").range("A65536").end(xlup).offset(1)   end if  next end sub

ketae
質問者

補足

ありがとうございます。 1行ずつ舐めるやり方を今後学ぶ必要がありそうです。 まずは教えていただいた記述を週末1つづつ勉強してみます。

その他の回答 (3)

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

>1行ずつ舐めるやり方を今後学ぶ必要がありそう どうしてそんな思い込みをしたのか、詳しい状況を添えて別途のご相談として投稿してみて下さい。

ketae
質問者

お礼

データは全体を操作するのと、列ごとに操作、提供データの行例(挿入場所も)を入れ替える、第三者からの提供データななどがある、などがあるのがわかっているので、いろいろ覚えていこうと思っています。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.1です。 > A~C列の各行はたぶん数千から万に達するデータがあるので(n行)、行数が確定していない場合のVBAの練習を現在しているのでした。 提示したコードはあくまでサンプルです。 ご自身の環境に合わせて修正してください。 ちなみに行数が不定なら Range("A1:C13").の部分を、Range("A:C")にするだけです。 「複数シートに展開」ってのは条件も何も書かれていないので回答は控えさせていただきます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

Excelは文字は数値より大きいと判断しますのでそれを利用してフィルターオプションで抽出しましょう。 添付の図の例では検索条件にE1:E2セルを使っています。 E1に検索条件の項目名「コード」。E2に不等号+コードの最大値より大きい数値、今回は「<999999」と入れました。 後は、以下のコードで2番目のシートに検索条件に合致した行だけ抽出されます。 Sub Sample()   Range("A1:C13").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( "E1:E2"), CopyToRange:=Worksheets(2).Range("A1"), Unique:=False End Sub

ketae
質問者

お礼

ありがとうございます。 A~C列の各行はたぶん数千から万に達するデータがあるので(n行)、行数が確定していない場合のVBAの練習を現在しているのでした。 この質問は今後複数シートに展開されますので、今後ともよろしくお願いします。

関連するQ&A