• 締切済み

表形式データの展開

表形式に入力されている数値データを、1行に数値データが1つだけ持つフラットな形に変換(展開?)したいのですが、どうやるのが効率的でしょうか。(実際のイメージは下記のとおりです。) ■変換前  a b c d A 1 0 0 2 B 2 0 3 1 C 5 0 2 5 ■変換後 a,A,1 a,B,2 a,C,5 b,A,0 b,B,0 b,C,0 c,A,0 c,B,3 c,C,2 d,A,2 d,B,1 d,C,5 元のファイルはExcelです。複数あるファイルのデータを、全て変換して合体させるので、簡単な方法が良いです。使うソフトはExcelでもAccessでも構いません。(データ量が多くなる予定なので、合体させたデータは最終的にAccessに取り込む予定です。) どなたか知恵を貸してください。

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 元のデータがSheet1のA1:E4にあるとします。 Sheet2のA1に、 =OFFSET(Sheet1!$A$1,,INT((ROW()-1)/COUNTA(Sheet1!A:A))+1) と入力します。 Sheet2のB1に、 =OFFSET(Sheet1!$A$1,MOD(ROW()-1,COUNTA(Sheet1!A:A))+1,) と入力します。 Sheet2のC1に、 =INDEX(OFFSET(Sheet1!$B$2,,,COUNTA(Sheet1!A:A),COUNTA(Sheet1!$1:$1)),MATCH(B1,Sheet1!A:A,0)-1,MATCH(A1,Sheet1!$1:$1,0)-1) と入力します。 そうしたら、このA1:C1を、適当な行までコピーします。 (元のデータ数、質問の例なら3×4=12行分で十分です。) C列の下の方の行に「#N/A」エラーが表示されたら、エラー以降の数式の入った行を全て削除しておきます。 これで変換出来ました。 後は、Sheet2をAccessからインポートすればOKです。 (もちろん、Sheet2をいったんテキストファイルとして保存して、それをAccessからインポートしてもOK。)

Charlie
質問者

お礼

うまくできました。ただ実際のデータはもっと多いので、こちらを参考にして検討してみます。ありがとうございました。

noname#240783
noname#240783
回答No.1

どの程度まで「効率的」を求めていらっしゃるか 今ひとつ?ですが、 質問中の例だけみると、以下のVBAコードで基本的な 変換はできますね。 あとは、変換後の複数シートのデータをひとつにする辺りも VBAでやるか、手作業でやっつけるか、というところでしょうか。 '========== Sub Foo() Dim i As Integer Dim j As Integer Dim g As Integer Dim r As Integer i = 2 j = 2 g = i r = 1 While Cells(1, j).Value <> "" While Cells(i, j).Value <> "" Worksheets("Sheet2").Cells(g - 1, r).Value = Cells(1, j).Value Worksheets("Sheet2").Cells(g - 1, r + 1).Value = Cells(i, 1).Value Worksheets("Sheet2").Cells(g - 1, r + 2).Value = Cells(i, j).Value i = i + 1 g = g + 1 Wend j = j + 1 i = 2 Wend End Sub

Charlie
質問者

お礼

ありがとうございました。VBAの知識に乏しいので、できるかどうか不安ですが、参考にしてやってみようと思います。

関連するQ&A

  • EXCELで 一桁の数値を二桁に

    教えてください。 エクセルで、入っているデータを編集しているのですが A列には、一桁の数値が B列には、1桁から2桁の数値が C列には、1桁から2桁の数値が D列には、文字データが入っています。 D列のデータに対する対応表を作るために このA~C列のデータを CONCATENATE関数を使って合体させたいのですが、 (合体させると、数値がダブらない為) B列とC列に入っている1桁の数値を 2桁に変換したいのですが、 何かよい方法はありませんでしょうか? 手打ちで変換するには、かなり多いデータなのです。 どなたか、助けてください。

  • EXCLEのマクロ データの絞り込み

    下記のようなことは可能でしょうか。 ご教授いただけますと幸いです。 A列 B列 C列 あああ いいい 1234 あああ ううう 1235 あああ えええ 1236 のデータを A列 D列 あああ 1234,1235,1236 の用にしたいのです。 A列が同じデータでB列が違う行をまとめて 1行にする。しかし、B列とC列は不要だが、D列に C列にあった数値データを ,でセル内に合体させたい

  • データファイルの編集なんですが

    データファイルの編集の仕方について教えて下さい。 local($data) = @_; $data =~ s/\n$//; ($a,$b,$c,$d) = split(/,/,$data); } で、データを読み込んでいるんですが、この@data内に入っている 内容を   $data[0] = "$a,$b,$c,$d";   $data[1] = "$a,$b,$c,$d";   $data[2] = "$a,$b,$c,$d";   $data[3] = "$a,$b,$c,$d"; とした時、$bの数値が同じグループ($bが例えば2として) そのグループの$bを2から0にするにはどうすればいいでしょうか? $b

  • Excel 二つの表を用いたデータ整理

    かなり困っています。 (1)二つのエクセル表が存在 (2)ファイル1には↓のようにデータが並んでいます    A列  B列  C列  D列    生徒A 生徒B 生徒C 生徒D 行1 国語27 国語34 国語54 算数34 行2 数学36 家庭25 算数23 理科23 行3 理科55 理科44 理科21 英語44 行4 社会87 社会33 社会32 行5 英語54  (3)ファイル2は以下のようになっています    A列  B列  C列  D列  E列        国語  算数  理科  社会 行1 生徒A 27   36   55   87 行2 生徒B  (4)要するに、ファイル1のデータから必要な数値を抽出して ファイル2のデータに移し変えたいのですが、ファイルAの中の名称とデータ数が異なる場合があることもあり、整理はコピペしかないのかと半ばあきらめています。 とはいえデータの数は4000…正直なきたいです…何かいい方法はありませんか?

  • 数学 展開

    (a-b+c-d)(a+b-c-d) を簡単に展開できるやり方ってありますか?

  • アクセスでレコードを展開させたい。

    アクセス2000で下記のようなデータがあります。 商品名   数量 ---------------------- A品     2 B品     1 C品     3 このようになっているものを 商品名   数量 ---------------------- A品     1 A品     1 B品     1 C品     1 C品     1 C品     1 このように展開させるクエリを教えていただけないでしょうか。 やりたいこととしては、 A品、B品、C品それぞれ数量分だけラベルを作りたいが、 はじめのような状態だと、A品、B品、C品ひとつづつ しか印刷されないという問題があるからです。 アクセス初心者ですがよろしくお願いいたします

  • 1列のデータを3列に関数で並べ替えたい

    Excel2007 A列に1から99までの数値があります。 これを関数で B1に1 C1に2 D1に3 B2に4 C2に5 D2に6 のように3列に関数で並べ変えたいのですが 教えてください。

  • データの集計

    テキストデータで a,10個 b,3個 c,4 a,3個 c,2個 ...のデータがありますが、EXCEL,ACCESSを使用して、Aの合計、Bの合計..の合計を簡単に集計したいのですが、A,B,C..の種類も多くあり大変です。どうすればよいでしょうか?

  • マイクロソフトのアクセスでいくつかのデータと組み合わせて、

    マイクロソフトのアクセスでいくつかのデータと組み合わせて、 数値を並べたり、○×をつけることは可能でしょうか? アクセス初心者です。 もし分る方がいたら教えていただきたいです。 (1)【3月の来店者】 Aさん Bさん Cさん Dさん (4)【3月のA購入者】 Aさん Cさん Dさん (5)【3月のB購入者】 Cさん Dさん (6)【来店者の来店回数】 Aさん 1 Bさん 4 Cさん 7 Dさん 2 上記データを使って下記のようなデータベースを作りたいと考えています。 来店者 A購入 B購入 来店回数 Aさん ○ × 1 Bさん × × 4 Cさん ○ ○ 7 Dさん ○ ○ 2 (1)来店者から(2)Aを買った人の抽出や (1)来店者の(4)来店回数を出すのは 選択クエリを使いだすことができたのですが このようにすべての来店者のデータをリスト化することは可能でしょうか? すべてのデータ抽出後にIF関数などを使いエクセルでなら行えるかもしれないのですが データが180万行あるのでアクセス内で行えたら嬉しいです。 説明がわかりにくくて申し訳ないです。。。 もし分る方がいたら助けていただきたいです。 宜しくお願いいたします。

  • 同一フォルダ内のデータを自動的に移動するマクロ

    こんなことが可能かわかりませんが、 毎月集計をとっているファイルがあります。 そのファイルは毎月名前がかわるのですが、(2013.05○○ファイル←毎月数がふえていきます。) そのファイルの中にあるシートの数枚(4枚をれぞれに名前がAデータ・Bデータ・Cデータ・Dデータ)を違うファイル(調査ファイル)に値だけを貼り付けたいのです。 月末にデータが完成したら、あるボタンをおしたら2013.05○○ファイルのA・B・C・Dデータを 調査ファイルのデータa・b・c・dデータに値だけを貼り付けたいです。 対象となるのは各シート全体の数値です。 どなた様かご教授くださいませ。 よろしくお願い致します。 そのようなことができるマクロというのはあるのでしょうか。