• ベストアンサー

VBA マクロを使って、コピー ソートしたいです

画像でシート1の状態を、マクロでシート2のようにしたいです。 なにぶん初心者なので、効率のいいスクリプトがかけません。 よろしくお願いします。 条件としては シート1には大きく分けて3つ表がありますが、実際は10個あります。 10個目までシート2上でデータがつながっている感じです。 B,G,L列の連番はデータの個数です。 シート1にあるように、表ごとに入ってる個数はばらつきます。 シート2 のA列はシート1のB,G,Lの2行目の番号が入っています。

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

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

淡々と順繰りに転記していくだけの作業です。 sub macro1()  dim c as long  dim r as long  worksheets("Sheet1").select  worksheets("Sheet2").range("A:E").clearcontents  worksheets("Sheet2").range("A1:E1") = array("Gr","Num","V1","V2","V3")  for c = 2 to 12 step 5   if cells(4, c + 1) <> "" then    r = cells(65536, c + 1).end(xlup).row    range(cells(4, c), cells(r, c + 3)).copy _     destination:=worksheets("Sheet2").range("B65536").end(xlup).offset(1)    worksheets("Sheet2").range("A65536").end(xlup).offset(1).resize(r - 3, 1).value = cells(2, c).value   end if  next c end sub

iguigu_n
質問者

補足

ありがとうございます。 A1に array("Gr","Num","V1","V2","V3") の内容が入っているのですが、こちらを削って、A1から結果が表示されるようにするにはどうすればいいでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

ん? 要らない行は削除します。 sub macro1r1()  dim w1 as worksheet  dim c as long  dim r as long  set w1 = worksheets("Sheet1")  worksheets("Sheet2").select  range("A:E").clearcontents  for c = 2 to 12 step 5   if w1.cells(4, c + 1) <> "" then    r = w1.cells(65536, c + 1).end(xlup).row - 3    w1.cells(4, c).resize(r, 4).copy _     destination:=range("B65536").end(xlup).offset(1)    range("A65536").end(xlup).offset(1).resize(r, 1).value = w1.cells(2, c).value   end if  next c  range("1:1").delete shift:=xlshiftup end sub などで。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

私も基本はNo.1さんと変わりませんが、 一例となれば幸いです。 Sub Macro() Dim i As Integer Dim j As Integer Dim lngEndRow As Long j = 1 'Sheet2の1行目 For i = 3 To 13 Step 5 'Sheet1の3,8,13列目 lngEndRow = 0 lngEndRow = Sheets("Sheet1").Cells(65536, i).End(xlUp).Row If lngEndRow >= 4 Then Sheets("Sheet1").Range(Sheets("Sheet1").Cells(3, i), Sheets("Sheet1").Cells(lngEndRow, i + 2)).Copy Sheets("Sheet2").Cells(j, 1).PasteSpecial j = j + lngEndRow End If Next End Sub

iguigu_n
質問者

補足

タイトル1 文1 100 タイトル1 文1 タイトル2 文2 200 タイトル2 文2 タイトル3 文3 300 タイトル3 文3 タイトル4 文4 400 タイトル4 文4 タイトル1 文1 2 2 222 タイトル2 文2 2 3 333 タイトル3 文3 タイトル4 文4 111 タイトル1 文1 タイトル5 文5 222 タイトル2 文2 タイトル6 文6 333 タイトル3 文3 タイトル1 文1 444 タイトル4 文4 タイトル2 文2 555 タイトル5 文5 タイトル3 文3 666 タイトル6 文6 11 タイトル1 文1 22 タイトル2 文2 33 タイトル3 文3 ありがとうございます。 しかしためしたところ、結果が違うようでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数シートを通して連番を振るマクロ

    マクロ初心者です エクセルワークシートが6枚あります。 シート1枚目のA列にB列データがある行まで連番を振ります(可変)1-100 シート2枚目のA列にはB列データがある101-195 シート3枚目のA列には196-305など ...... となるようにしたいです。 1枚目の最終行を取得して連番を振ることは出来たのですが、2枚目の始まりをどのように書いたらよいのか分かりません。 宜しくお願いします。

  • VBAのマクロに詳しい方!!

    初歩的なことですが、マクロ初心者なので 教えて下さい。 A,1に分類、B,1に商品名、C,1にH店の売上個数、D,1にK店の売上個数が入っている時、 sheet1のB列の抜き出したいセルをマウスでドラッグすると、そこの行がコピーされ、sheet2にその行がペーストされる仕組みのマクロを作りたいのですが、どうすればいいのでしょうか(´・_・`) 例えば、マクロボタンを押して、mainを選択したら、"商品を選択してください"といったinputboxが出てきて、B4:B8を選択したら、4行目から8行目までが、sheet2の2行目から6行目にコピーされているようにしたいということです。 詳しい方、教えて下さい!

  • VBAについて

    はじめまして、以下のVBAについて質問させてください。 A列にデータの個数だけ連番を振りたくて、以下のVBAを入力しました。 連番を振るシートは複数あり、そのシートによってデータの個数は異なります。 しかし、以下のVBAだと最初のシートの個数に応じて、後のシートの連番も振られてしまいます。データの個数に応じてシートごとに連番を振るには、どうすればよいのでしょうか…?!どうか迷える子羊をお助け下さい(T_T) '一番はじめのシートを選択 Sheet "一番".Select 'A列に連番を振る Dim sh As Variant For sh = 3 To Worksheets.Count Dim number As Integer Dim 行2 As Long number = 1 '2行目~最終行までループ For 行2 = 3 To Cells(Rows.Count, 2).End(xlUp).Row Worksheets(sh).Cells(行2, 1) = number number = number + 1 Next 行2 Next sh

  • ピポットテーブルをVBAで組む方法

    B列~L列に並んでいるデータがあり、 商品が何個ずつ売れているかピポットテーブルで出したいと思っています。 データは1000を超えると想定しておりますので マクロで処理ができればと思っているのですが、 初心者のため、どういう風にマクロを組めばいいかわかりません。。。 ピポッドフィールドは 行 ・商品番号 ・商品 ・価格 値 ・個数 が入るようにしたいです。 ご教授いただければ幸いです。 どうぞよろしくお願いいたします。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセルでマクロを使用してシート2の表から行単位でシート1の表の指定位

    エクセルでマクロを使用してシート2の表から行単位でシート1の表の指定位置に値を表示させたい シート2の A列に番号(連番) B列に商品名(数字とアルファベットの組み合わせ) C列に仕入先(数字4桁) D列にメーカー(数字4桁) E列に区分(数字とアルファベットの組み合わせで3ケタ) が入っていて約5,000行のデータが有ります。 シート1にレイアウトした表があって シート1のB4にシート2のA2の値(番号連番) シート1のB5にシート2のB2の値(商品名) シート1のB6にシート2のC2の値(仕入先) シート1のB7にシート2のD2の値(メーカー) シート1のB8にシート2のE2の値(区分) が表示されるようにしてあります。 マクロを利用して、作成したシート1のボタンを押すと シート1のセルB4の番号欄が1から2(シート2のA3の値)に繰り上がり、 シート1の表のA列の番号と同じ行のそれぞれの値を 上記の規則で表示させるようにできますか? シート1のB4が2になるとシート1の3行目をさしますので シート1の表には、 シート1のB4にシート2のA3の値(連番) シート1のB5にシート2のB3の値(商品名) シート1のB6にシート2のC3の値(仕入先) シート1のB7にシート2のD3の値(メーカー) シート1のB8にシート2のE3の値(区分) が表示されます。 シート1のボタンをクリックするごとにB4のセルは3,4,5,6と繰り上がり シート2のA列の番号と一致した行のそれぞれの値を表示させていく。

  • VBAでソートして、貼り付けのやり方

    (条件及び操作) 1 シートが2つあります。(元データ と 名簿シート)という名前。 2 名簿シートのH2に数字を入力する。元データのシートの1行目にある、番号と一致する列を操作する。 3 元データの対象の列で、まずD列(組ごと)に、1組・2組をソートする 4 次に、対象の列(科目:国語や理科など)事に、○をソートする 5 ソート後に、番号、名前、出身と○をコピーする。 6 その後、名簿シート(1組でソートしたものは、B2、2組でソートしたものはE2)に貼り付ける 7 対象の列の科目名(国語なら国語を)をA1に貼り付ける 8 元データのソートを解除する (備考) 番号も科目も100ぐらいあります。 これらの(条件及び操作)を元に、名簿シートのH2に任意の数字を入力して、元データの対象の列を上記(1~8)の操作を行いたいと思います。 《シート名:元データ》 A列   B列   C列   D列   E列   F列   G列   H列   I列   ・・・                       1    2     3     4    5   ・・・   番号  名前   出身  組    国語  理科   英語   数学  社会  ・・・ 001 Aさん  東京    1     ○                ○   ○  002 Bさん  沖縄   1     ○                 ○   ○  003 Cさん  鹿児島  1     ○                     ○  004 Dさん  青森    1     ○                     ○  005 Eさん  北海道  2     ○          ○  006 Fさん  京都   2     ○          ○     ○ ・ ・ ・ 《シート名:名簿シート》      A列   B列   C列   D列   E列   F列   G列   H列    国語     1組              2組     番号   名前   出身  番号   名前   出身  番号入力      お忙しい中、大変申し訳ございませんが、どうぞよろしくお願いします。 また、質問の内容などがわかりづらいなどの事がありましたら、ご指摘ください。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • Excel2000マクロ記述について

    下記の条件で下記のようなマスターを参照してマクロを作成したいのですが、どのように記述したら良いでしょうか シート名 滞留在庫表 条件 c列の5行目からdataが入っています。data例(AD1200S0110000000P)18桁 dataの頭8桁目がBの場合はL221をV列に表示 dataの頭8桁目が、A又はM又Pの場合はL222をV列に表示 dataの頭8桁目がB、A、M、P以外の場合は、ブランクをV列に表示 シート名 表示再設定マスタ             A列    B列 5行目****************** 6行目*******B********** L221 7行目*******A********** L222 8行目*******M********** L222 9行目*******P********** L222

専門家に質問してみよう