• ベストアンサー

エクセルのデータ配置を変えたい

質問をお願いします。 エクセルで作成したデータの配置を添付のように変更したいのですがどのような方法があるのでしょうか。 具体的には、横に展開した上の表を下の表のように、A列のコード毎に、A・B・Cそれぞれの数値を表示したいことと、ブランクの部分は表示させない、というようにしたいのです。 (もちろん別のシートにデータを作成して構いません) データ量は、縦・横とも相当あるので、とても手作業ではできません。 何か良い方法があれば教えて下さい。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAでの一例です。 Sheet1のデータをSheet2に表示させるようにしてみました。 ↓の画像のようにSheet1のデータは2行目からあるとします。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Dim ws As Worksheet Set ws = Worksheets(2) With ws.Cells(1, 1) .Value = "コード番号" .Offset(, 1) = "項目" .Offset(, 2) = "データ" End With Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column If Cells(i, j) <> "" Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 1) .Offset(, 1) = Cells(1, j) .Offset(, 2) = Cells(i, j) End With End If Next j Next i Application.ScreenUpdating = True End Sub 'この行まで ※ Sheet2の1行目に表示される項目は勝手に入れていますので、 コード内で実際の項目名に変更してみてください。 以上、参考になれば良いのですが・・・m(_ _)m

garageking
質問者

お礼

ご回答いただき、ありがとうございます。 わかりやすくご説明いただいた為、うまく変換できました。 本当にありがとうございました。

その他の回答 (3)

  • ToughBoy
  • ベストアンサー率42% (90/214)
回答No.4

NO3です。画像の貼り付けが良くないのでもう一度します。 初歩のEXCLEでなんとか出来ました。 1.元の表にA列をコピーし C列(Bの数列の左)E列(Cの数列の左)にコピーした列を挿入する。   A列:1001,1002,1003 B列 Aの数値    C列:1001,1002,1003 D列:Bの数値    E列:1001,1002,1003 F列:Cの数値  2.B列に空白列を挿入 B2にAを入力し したまでコピー、E列に空白列を挿入 E2にBを入力し したまでコピー  H列に空白列を挿入 H2にCを入力し したまでコピー     A列:1001,1002,1003 B列:A,A,A C列 Aの数値   D列:1001,1002,1003 E列:B、B、B F列:Bの数値   G列:1001,1002,1003 H列:C、C、C I列:Cの数値 3.数値の入っている範囲で3列すつをコピーし A列からC列に まとめる   A列:1001,1002,1003 B列:A,A,A C列 Aの数値の下に   D列:1001,1002,1003 E列:B、B、B F列:Bの数値を貼り付ける   さらに下に   G列:1001,1002,1003 H列:C、C、C I列:Cの数値 4.A列に列を挿入し A2に =IF(D2=0,0,B2)を入力 し したまでコピー 5.数値の範囲を指定し(例えばA2からC16) データー 並び替え 最優先されるキー 列A 2番目に優先されるキー列C で OK (並び替えをします) 6.この場合は データーが無いものが上に固まりますから その部分をカットしてください。

  • ToughBoy
  • ベストアンサー率42% (90/214)
回答No.3

初歩のEXCLEでなんとか出来ました。 1.元の表にA列をコピーし C列(Bの数列の左)E列(Cの数列の左)にコピーした列を挿入する。   A列:1001,1002,1003 B列 Aの数値    C列:1001,1002,1003 D列:Bの数値    E列:1001,1002,1003 F列:Cの数値  2.B列に空白列を挿入 B2にAを入力し したまでコピー、E列に空白列を挿入 E2にBを入力し したまでコピー  H列に空白列を挿入 H2にCを入力し したまでコピー     A列:1001,1002,1003 B列:A,A,A C列 Aの数値   D列:1001,1002,1003 E列:B、B、B F列:Bの数値   G列:1001,1002,1003 H列:C、C、C I列:Cの数値 3.数値の入っている範囲で3列すつをコピーし A列からC列に まとめる   A列:1001,1002,1003 B列:A,A,A C列 Aの数値の下に   D列:1001,1002,1003 E列:B、B、B F列:Bの数値を貼り付ける   さらに下に   G列:1001,1002,1003 H列:C、C、C I列:Cの数値 4.A列に列を挿入し A2に =IF(D2=0,0,B2)を入力 し したまでコピー 5.数値の範囲を指定し(例えばA2からC16) データー 並び替え 最優先されるキー 列A 2番目に優先されるキー列C で OK (並び替えをします) 6.この場合は データーが無いものが上に固まりますから その部分をカットしてください。

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

シート1のA1から始まる元の表を用意する。 つまり1行目とA列はタイトルで,表の中身はB2から入り始めて暫定的にD5まであるとする。 シート2のA2に =IF(ROW(A1)>COUNTA(Sheet1!$B$2:$D$5),"",INDIRECT("Sheet1!"&TEXT(INT(SMALL(IF(Sheet1!B$2:$D$5<>"",ROW(Sheet1!$B$2:$D$5)*100+COLUMN(Sheet1!$B$2:$D$5)),ROW(A1))/100),"!R0!C1"),FALSE)) と記入してコントロールキーとシフトキーを押しながらEnterで入力する 下向けにコピーする シート2のB2に =IF(ROW(B1)>COUNTA(Sheet1!$B$2:$D$5),"",INDIRECT("Sheet1!"&TEXT(MOD(SMALL(IF(Sheet1!$B$2:$D$5<>"",ROW(Sheet1!$B$2:$D$5)*100+COLUMN(Sheet1!$B$2:$D$5)),ROW(B1)),100),"!R1!C00"),FALSE)) と記入してコントロールキーとシフトキーを押しながらEnterで入力する 下向けにコピーする シート2のC2に =IF(ROW(C1)>COUNTA(Sheet1!B$2:$D$5),"",INDIRECT("Sheet1!"&TEXT(SMALL(IF(Sheet1!$B$2:$D$5<>"",ROW(Sheet1!$B$2:$D$5)*100+COLUMN(Sheet1!$B$2:$D$5)),ROW(C1)),"!R0!C00"),FALSE)) と記入してコントロールキーとシフトキーを押しながらEnterで入力する 下向けにコピーする

関連するQ&A

  • Excelで行方向に並んだデータを列に

    こんばんは。 質問タイトルをどう書いていいのかわからず、わかりにくくてすみません。 こういうExcelの表があります。 A表 A列 B列 No  code   1  10 1  11 1  12 2  10 3  14 4  14 4  15 それを次のようにしたいと思ってます。 B表 A列 B列  C列  D列 No  code1 code2 code3 1  10   11  12 2  10 3  14 4  14   15 A列にあるのがサンプルNoで、それぞれに対応するコードが縦に並んでいる(A表)のを、サンプルNoを重複させずにコードを横に展開(B表)したいのです。 今は各サンプルで重複しているコード数を出して、2以上だったらif関数で横に持っていくという非常に面倒な方法を取っています。 他によい方法はないでしょうか。なお、マクロは嫌がられるので使えません。 データ数よりもシート数(1シートに1つの表)が多く、できるだけ簡単な方法があれば教えていただけますでしょうか。 以上よろしくお願いします。

  • エクセルデータの修正について

    横 列A~Zまで、縦 約2万行の数値データの表があります。 A列には「130」「160」「124」の3つの数値のいずれかが入っています。 このうち「130」と「160」は列の並び順がそろっているのですが、「124」の行には、D列でデータの欠如が1つあり、またW列とX列に不要なデータがそれぞれ1つ入っていて、Z列までのデータが一つ右にずれてしまっています。 この「124」のデータの横並び順を「130」「160」にそろえたいのですが、データの配置を変えずに直す良い方法はありますでしょうか? 縦並び順は、「130」「160」がランダムに72行続いた後、73行目に「124」が1行入り、これが繰り返しています。 「124」は全体で約300行ほどになります。 この300行を一度に修正し、元の配置に戻すことが出来れば、と思っております。 良い知恵がありましたら、お貸しください。 よろしくお願いいたします。

  • Excel データの再配置

    Excelでデータを再配置するマクロの組み方を教えて下さい! 参考画像→ http://goo.gl/2nLWH 画像左側のように複数のデータセットが縦方向に配置されているシートで、左上が「セット○」セルから始まるデータセット単位で横方向に空白列を挟んで再配置したいと思っています。 画像はサンプルデータで、実際には行数は不定数、列数は4列のセットが複数個存在します。 宜しくお願いします。

  • Excelで一列に並んだデータから表を作成したい

    Excelで、A列に入力したデータがあります。 これを、横3列使った表に加工したいのですが、どのような方法がありますでしょうか? 例えば、A1~A5に入力されたデータを、横3×縦2の表にしたいのです。 A1     A1 A2 A3 A2     A4 A5 A3  →   A4 A5 関数など使ってできないかと考えたのですが方法がわからず、 仕方なくA1~A3をコピー→行列を貼り付けで表を作成しました。 が、データが100個以上あるのでどうにも時間がかかってしまいます。 何か良い方法ありましたら教えてください。

  • エクセルで範囲内のデータを別シートにうつしたい

    エクセルで特定の範囲内の数値にあてはまるデータを別のシートに新たな表として作成したいのですが、簡単な方法があれば教えてください。 例えば Sheet1   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3  5  メロン   9800 4 17  ブドウ   1800 5 50  バナナ  1000 このようなデータを次のような表にしたいのです。 A列の数値が10~30のみ行ごと抜粋する Sheet2   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3 17  ブドウ   1800  よろしくお願いいたします。

  • Excelの参照か、VLOOKUPでできるか

    Excelの参照か、VLOOKUPでできるか わかりませんが教えてください。 MS2007です。 画像を見てください。 一番左に「1」これは日にち。5月なら5/1と考えてください。 次に塗り潰した縦のアルファベット。これが項目。 次には「A1」から始まる数字が付属した縦のデータセルがK列まで11列。 L,O,R,U,X,L1もデータが入ります。 このシートはFAX用となっていて二分割して 作成した表示になっていますが本来は下の部分も横にくっついて一列です。 シート5月には同じつくりのシートがあり「1」(日にち)に付随した 横一列の形式で作成してあり、それは縦に1~31、 つまりは5/31までデータが入力できる連続したつくりになっています。 この「5月」のシートのデータを、日にちごとに「FAX用」の表の枠に自動で移る(参照?) 出来るようにしたいのですがよくわかりません。 たとえば、「5月」シートの5/1の「1」を「2」にすると「2」(5/2)に付随したデータが 「FAX用」の「1」を「2」にすると付随した横列に自動で数値が反映される感じです。 よろしく御願いします。

  • EXCELのデータ抽出

    縦x横x奥行の寸法データが記載されたデータが取引先からEXCELで届きます。 1300x500x10 や 500x500x100という表記です。 これらの寸法データはワンオフ品のため毎回4桁~2桁の数値で異なります。 縦、横、奥行のデータを下記のようにそれぞれ別のセルに抽出したいと思い いろいろ調べてみたのですがいい方法が見当たりません。 なにか方法はあるでしょうか? ご教示お願いします。 A列 1300x500x10  A列   B列   C列 1300   500   10

  • EXCELの縦横変換

    エクセルの数式で、横に並んでいるものを、縦にしたいのですがわかりません。 良い方法を教えてください。初心者です。 (1)sum(a1:a100)(2)sum(b1:b100)(3)sum(c1:c100)(4)sum(d1:d100) ※見にくくて申し訳ありませんが、()の数字は列を表します。 上記の表で作成した結果を下のような別シートに縦の表に写したいのですが。 1 =sum(a1:a100)の結果 2 =sum(b1:b100)の結果 3 4 データが300列位あるので、なにかいい方法を教えてください。 よろしくお願いします。

  • エクセルで作成した縦に長い表をA4に2列で印刷

    エクセル2007で作成した縦に長い表をA4縦方向に2列づつ印刷していくにはどうすればよいのでしょうか? 表は顧客リストなのですが、縦に長い表をエクセルで作成しました。 表は新しい顧客情報をどんどん下に入力していくので表はどんどん縦に長くなります。 また、データをおいうえお順で並べ変えたりするので この縦に長い表のフォーマットは便宜上くずしたくないのです。 細長い表なので印刷する場合はA4用紙縦方向に2列づつ印刷していきたいのです。 そういうことは可能でしょうか? 割り付け印刷ではうまく表を2列に配置できず見栄えがよくなく、 何か良い方法があれば教えてください。

  • EXCEL:違うシートに数値を反映させる方法

    例えばsheet1に表を作成したとします。 で、数値を縦(列)に記入していくとします。 すると、 sheet2に横(行)にその数値を反映させるようにしたいのです。 どうやればいいかまったくわかりません。 うまく説明できないのですが、よろしくお願いします。

専門家に質問してみよう