VBAを使ってシート1のデータをシート2に変換する方法

このQ&Aのポイント
  • VBAを使用して、シート1のデータをシート2の形式に変換する方法を教えてください。
  • シート1の2行目以降のデータをシート2のB列につなげ、A列にはシート1の1行目に記載されている番号を付けたいです。
  • シート1のA列には1、C列には2、E列には3と番号を付けたいのですが、どのようにマクロを書けば良いでしょうか?
回答を見る
  • ベストアンサー

A列にあったものには1、C列にあったものには2

シート1の内容をVBAをつかってシート2のようにしたいです。 つまり、シート1の2行目以降のデータをシート2のB列につなげて、 A列には シート1の1行目に記載している番号をふっていきます。 もともとA列にあったものには1、C列にあったものには2、E列にあったものには3と振りたいのですが、どのようにマクロを書けばいいでしょうか? [Sheet1]   A  B  C  D  E 1 1  2  3 2 aa aaa aaaa 3 bb bbb bbbb 4 cc cccc 5  dddd ----------------------------- [Sheet2] A B 1 1 aa 2 1 bb 3 1 cc 4 2 aaa 5 2 bbb 6 3 aaaa 7 3 bbbb 8 3 cccc 9 3 dddd

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

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

UsedRangeでそのシートで使用しているセル範囲が判りますので、For Eachでそのセル範囲をすべて見ていきます。 1行目、またはデータなしの時は処理なし、それ以外はSheet2のA列に列位置、B列に値を入れていきます。 最後にSheet1にソートをかけてお望みの並び方にして終了。 Sub Sample()   Dim rTarget As Range   Dim rOne  As Range   Dim nPos  As Long      Set rTarget = Sheets("Sheet1").UsedRange   With Sheets("Sheet2")     nPos = 1     For Each rOne In rTarget       If (rOne.Row <> 1) And (rOne.Value <> "") Then         .Cells(nPos, 1) = rOne.Column         .Cells(nPos, 2) = rOne.Value         nPos = nPos + 1       End If     Next rOne     If nPos > 1 Then       .Sort.SetRange Range("A1:B" & (nPos - 1))       .Sort.Header = xlNo       .Sort.Apply     End If   End With End Sub

iguigu_n
質問者

補足

ありがとうございます。 無事できました。 ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? 1 aaa 1 bbb 1 ccc 2 abc 2 abcd 3 aaaa 3 bbbb 3 cccc 3 eeee

その他の回答 (2)

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

> ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? マクロの中で最後にソートを行っているはずですが並び変わっていませんか? 並び変わっていないとしたらどのようになっていますか?

iguigu_n
質問者

お礼

すいません、もう1度実行してみたらうまくできました!

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

ANo.1です。 よくよく質問をみたら、Sheet2のA列に入れるのはSheet1の1行目に入っている値でしたね。 失礼しました。 以下のように変更してください。 .Cells(nPos, 1) = rOne.Column ↓ .Cells(nPos, 1) = Sheets("Sheet1").Cells(1, rOne.Column).Value

関連するQ&A

  • シート1とシート2のデータ一致 抽出方法

    エクセルのデータ抽出でお知恵をお貸し下さい。 シート1 A列  B列     C列 品名  製品番号  数量 AA    1AAAA    200 BB    1BBBB    250 CC    1CCCC    300 シート2 A列   B列     C列 品名  製品番号   数量 AA    1AAAA   200 BB    1BBBB   250 AB    AAAA    500 CC    1CCCC   300 上記のようなシートがあります。 内容は同じなのですが、シート2にはシート1にはない品名、製品番号、数量が含まれます。 シート1の品名、製品番号、数量がすべて一致するものをシート3へ抽出し、 一致しなかったデータ(シート1にはなく、シート2にあるものを含め)をシート4へ抽出したいのですが 何か良い方法はないでしょうか??

  • エクセルについての質問。

    エクセルの関数に関して質問があります。 |10001|AAAA|10002|BBBB| |10002|BBBB|10004|DDDD| |10003|CCCC|10004|DDDD| |10004|DDDD|10001|AAAA| |10005|EEEE|10005|EEEE| ちょっと分かりにくいですが 一番上の行ですと、 列A=10001 列B=AAAA 列C=10002 列D=BBBB と考えて下さい。 質問です。 --------------------------- 列Cの数値を列Aから検索して 同じのがあれば列Bの数値を列Dに表示する。 --------------------------- この関数を教えて頂けませんでしょうか? 宜しくお願い致します。

  • Sheet2にある情報をSheet1のA1に1列で

    マクロを作りたいのですが、以下のようなものをどうすればできるかで詰まっています。 Sheet2にある情報をSheet1のA1に1列(A列B列C列の順)で並ぶようにしたいです。 Sheet2の内容は変わることがあるので、データがどの行まで入っているかはマクロを走らせるときにチェックしないとわからないかと思います。 [Sheet1] 111 222 333 aa bb aaa bbb ccc ddd eee -------------------------- [Sheet2] A B C 1 111 aa aaa 2 222 bb bbb 3 333 ccc 4 ddd 5 eee 素人な質問かもしれないですが、調べてもわからなかったので、教えていただけると幸いです。

  • Excelでの値の比較

    エクセルにおいて、sheet2のA列とB列をsheet1のA列とB列を比較して、一致した場合sheet2のD列に下記のような結果を示すようにしたいのですが、どうやってD列に関数を組めばよいのか分からないので教えてください! 【sheet1】 A列 B列 C列 1行 001 AAAA 部品1 2行 002 BBBB 部品2 3行 003 CCCC 部品3 4行 004 DDDD 部品4 5行 005 EEEE 部品5 6行 006 FFFF 部品6 7行 007 GGGG 部品7 【sheet2】 A列 B列 C列 D列←この列に関数で○か×をつける 1行 001 AAAA 部品1 ○←sheet1にあるので○ 2行 008 HHHH 部品8 ×←sheet1にないので× 3行 004 DDDD 部品4 ○ 4行 009 IIII 部品9 × 5行 005 EEEE 部品5 ○ 6行 002 BBBB 部品2 ○ 7行 010 HHHH 部品10 ×

  • UNIXで文字列分割

    UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。

  • [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい

    A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111:    :dddd 2222:    :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee

  • エクセルで教えて下さい。

    エクセルで教えて下さい。 オートフィルタ、ピボットテーブル以外で関数などで教えて下さい。 A列に大量の文字列があり重複したりしてます。 そこで、 B列にはA列にある大量の文字列を重複なしで表示させたいと思ってます。 例えば A列 B列 AAAA AAAA BBBB BBBB AAAA CCCC CCCC DDDD DDDD EEEE DDDD FFFF EEEE FFFF EEEE AAAA みたいな感じです。A列は編集可能でQQQQを追加すれば自動でB列にも表示させたいです。 このようなことを簡単にできますでしょうか? 宜しくお願いします。

  • Excelでの列比較(A列とB列の組合せ、C列とD列の組合せ)

    はじめまして、Excel初心者です。 現在あるデータを整理しているのですが、文字列の比較について 教えください。 ExcelでA列とB列のデータの組合せと、C列とD列のデータの組合せを 比較したいのですが、どのように行うのがベストでしょうか? Match関数やcountifなどを試しましたが、うまくできませんでした。 ※データ例 | A列 | B列 | C列 | D列 | AAAA BBBB AAAA DDDD

  • Excelデータ比較

    エクセルにおいて、sheet2のA列、B列、C列をsheet1のA列、B列、C列と比較して、一致した場合sheet2のD列に書かれている納入先企業名を下記のように自動入力したいのですが、どうやってsheet2のD列に関数を組めばよいのか分からないので教えてください! 【sheet1】 A列 B列 C列 D列 1行 001 AAAA 部品1 A社 2行 002 BBBB 部品2 B社 3行 003 CCCC 部品3 C社 4行 004 DDDD 部品4 D社 5行 005 EEEE 部品5 E社 6行 006 FFFF 部品6 F社 7行 007 GGGG 部品7 G社 【sheet2】 A列 B列 C列 D列←この列に取引先企業が入るようにする 1行 001 AAAA 部品1 A社←sheet1にあるのでA社と入る 2行 008 HHHH 部品8 #N/A←sheet1にないので#N/Aとなる 3行 004 DDDD 部品4 D社 4行 009 IIII 部品9 #N/A 5行 005 EEEE 部品5 E社 6行 002 BBBB 部品2 B社 7行 010 HHHH 部品10 #N/A

  • 文字列の出力

    C言語を使用しています。C初心者で分からないことがたくさんあって困っています。 文字列で"AAAABBBBCCCCDDDD"というのを出力する時に AAAA BBBB CCCC DDDDのようにスペースで区切って出力するにはどのようにしたらよいのでしょうか?

専門家に質問してみよう