エクセル表の作成方法と希望の表形式

このQ&Aのポイント
  • エクセル表の作成方法と希望の表形式についてご教授ください。
  • 下記のCSVデータから、希望の表形式にデータを整理したいです。
  • 作成方法は関数やピポット、マクロなどを使用して教えてください。
回答を見る
  • ベストアンサー

エクセル表の作成

下記のCSVデータから、希望の表形式にしたいです。 ご教授ください。 【CSVデータ】 A列    B列     C列     D列     E列 タイトル  (1)     (2)     (3)      (4) 1      0   100   150   0  2     100   0   150   0  3      0  100   0   100  4      0   100   150   0  5     100   100   150   0  【希望の表形式】 A列  B列  C列 1    (2)  100     (3)  150 2   (1)  100     (3)  150 3   (2)  100     (4)  100 【希望の表形式】は多少違う形でも構いません。 作成方法は関数やピポット、なければ(マクロ)で教えてください。 宜しくお願い致します。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>エラーの種類は「#N/A」となります。 >また、B9を含むB10以下、B列全てエラーとなります。 >CSVデータの範囲に合わせる形で、INDEXの参照範囲を変更致しました。 変更した参照範囲に誤りがあると思います。 >B1が(1)となり、右へ連続して、(1600)まであります。 >320行目まであります。 データ量が多すぎるので自動再計算をOFFにしないと作業が滞るでしょう。 データ量を1600列×10行で検証してみました。 貼付画像でSheet1は模擬データですがF列からBIM列を非表示にしてあります。 Sheet2は希望の配列で計算結果は途中までです。 また、中間を非表示にしています。 Sheet2の数式は下記のようにしました。 A2=IF(AND(E1>1,ISNUMBER(E1)),"",IF(MAX(Sheet1!A$2:A$11)=MAX(A$1:A1),"",MAX(A$1:A1)+1)) B2=IF(E2="","",INDEX(Sheet1!B$1:BIO$1,LARGE(INDEX((INDEX(Sheet1!B$2:BIO$11,MATCH(MAX(A$2:A2),Sheet1!A$2:A$11,0),0)<>0)*COLUMN(A2:BIN2),0),E2))) C2=IF(B2="","",INDEX(Sheet1!B$2:BIO$11,MATCH(MAX(A$2:A2),Sheet1!A$2:A$11,0),MATCH(B2,Sheet1!B$1:BIO$1,0))) E2=IF(A2="",IF(SUM(E1)>1,SUM(E1,-1),""),COUNTIF(INDEX(Sheet1!B$2:BIO$11,MATCH(A2,Sheet1!A$2:A$11,0),0),">0")) E2の数式はSUMPRODUCT関数をCOUNTIF関数に置き換えてみました。 再計算の負荷状況を確かめてください。

news-pochi
質問者

お礼

返事が遅くなってしまい申し訳ございません。 修正していただきました、関数で問題なく使用することが出来ました。 度々、お手数をお掛けして申し訳ございません。 丁寧に教えていただきありがとうございました(^^)

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>手持ちの表で試してみましたが、下記のB9のみエラーとなってしまいました。。。 エラーの種類は?、B9を下へコピーしたときB10以下はエラーにならないでしょうか? >エラーの原因は何でしょうか? B9へ入力した数式はどのように修正したかを提示してください。 >私の説明が足りなくて申し訳ございませんが、1行目は(4)までではなく、1600番目まであります。(右に長い形です。) (1)~(1600)がB2セルから右へ連続していると言うことでしょうか? >※A列は5以上ありますが、範囲指定を変更したらエラーが出ませんでしたので、5以上に増加しても問題ないかと思います。 念のために最大何行まであるかを補足してください。 データの量が多くなると関数では処理時間が掛かり過ぎて実用にならないかも知れません。 後出し条件は極力避けないと無駄な検証が増えます。 他人が組み立てた数式を論理的に理解できない場合は応用力でカバーできませんので、あなたの理解の程度を補足してください。

news-pochi
質問者

お礼

ありがとうございます。

news-pochi
質問者

補足

ご返信ありがとうございます。 お手数をお掛けして申し訳ございません。 >エラーの種類は?、B9を下へコピーしたときB10以下はエラーにならないでしょうか? エラーの種類は「#N/A」となります。 また、B9を含むB10以下、B列全てエラーとなります。 >B9へ入力した数式はどのように修正したかを提示してください。 CSVデータの範囲に合わせる形で、INDEXの参照範囲を変更致しました。 具体的に、CSVデータはsheet1、希望の表形式はsheet2で作成する形で、sheetをまたぎます。 >(1)~(1600)がB2セルから右へ連続していると言うことでしょうか? B1が(1)となり、右へ連続して、(1600)まであります。 >念のために最大何行まであるかを補足してください。 320行目まであります。 私の理解度ですが、基本的なエクセル関数(INDEX等は問題ございません) につきましては理解しております。 度々申し訳ございませんが、宜しくお願い致します。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

Dドライブに「Data.csv」という名前で、ファイルが存在する、という前提条件で、いったん、エクセルに読み込んでから、その下にご希望の並びを作っています。 参考にして頂ければ、幸いです。 Option Explicit Sub Test() Dim a, s As String Dim c, i, j, k, v As Integer Open "D:\Data.csv" For Input As #1 i = 0 Do Until EOF(1) i = i + 1 Line Input #1, s a = Split(s, ",") For j = 0 To UBound(a) Cells(i, j + 1).Value = "'" & Replace(a(j), Chr(34), "") Next j Loop Close #1 k = 7 For i = 2 To Range("A1").End(xlDown).Row c = 0 For j = 2 To Range("A1").End(xlToRight).Column v = Val(Cells(i, j).Value) If v > 0 Then k = k + 1 c = c + 1 If c = 1 Then Cells(k, 1).Value = i - 1 End If Cells(k, 2).Value = "'(" & CStr(j - 1) & ")" Cells(k, 3).Value = Cells(i, j).Value End If Next j Next i End Sub

news-pochi
質問者

お礼

ご回答いただきありがとうございます。 現在、マクロを勉強中でもし解る範囲内で作成・変更が出来ればと思い、教えていただきましたが、まだまだ力不足のようでした。。 部分的には理解できるものの、エラーが発生した場合に自分で修正できない可能性があり、今回は関数を使用して対応したい思います。 ご教授いただきありがとうございます。 参考にさせていただき、勉強させていただきます。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

CSVデータとして提示の値をA1:E6に読み込んだ状態で検証しました。 希望の表形式はA8:C20とし、E8:E20を作業用に使用しています。 E9=IF(A9="",IF(SUM(E8)>1,SUM(E8,-1),""),SUMPRODUCT((INDEX(B$2:E$6,MATCH(INDEX(A$9:A9,MATCH(MAX(A$2:A$6),A$9:A9)),A$2:A$6,0),0)<>0)*1)) A9=IF(AND(E8>1,ISNUMBER(E8)),"",IF(MAX(A$2:A$6)=MAX(A$8:A8),"",MAX(A$8:A8)+1)) B9=IF(E9="","",INDEX(B$1:E$1,LARGE(INDEX((INDEX(B$2:E$6,MATCH(MAX(A$9:A9),A$2:A$6,0),0)<>0)*COLUMN(A9:D9),0),E9))) C9=IF(B9="","",INDEX(B$2:E$6,MATCH(MAX(A$9:A9),A$2:A$6,0),MATCH(B9,B$1:E$1,0))) 各列の9行目を下へ20行目までコピーしました。 但し、A2:A6の値は数値で、1から5まで値とし昇順の配置とします。 文字の場合はA9の数式を全面的な見直しが必要です。 貼付画像は検証結果です。

news-pochi
質問者

お礼

ありがとうございます。

news-pochi
質問者

補足

ご回答ありがとうございます。 手持ちの表で試してみましたが、下記のB9のみエラーとなってしまいました。。。 エラーの原因は何でしょうか? B9=IF(E9="","",INDEX(B$1:E$1,LARGE(INDEX((INDEX(B$2:E$6,MATCH(MAX(A$9:A9),A$2:A$6,0),0)<>0)*COLUMN(A9:D9),0),E9))) 私の説明が足りなくて申し訳ございませんが、1行目は(4)までではなく、1600番目まであります。(右に長い形です。) ※A列は5以上ありますが、範囲指定を変更したらエラーが出ませんでしたので、5以上に増加しても問題ないかと思います。 宜しくお願い致します。

関連するQ&A

  • EXCELの表作成について

    EXCELについて質問です。 表Aと表Bから表Cのような結果を出すためには、 どうすれば良いでしょうか? 下記の例ではたいしたデータではありませんが、 膨大な数のデータがあるとして、関数などEXCELの機能を活用して簡単に 結果を出したいと思っています。 【表A】 A    B     C    D 1     A店 B店 C店 2 パソコン 3 掃除機 4 冷蔵庫 5 テレビ 【表B】 A店   B店   C店 パソコン パソコン パソコン 掃除機  冷蔵庫  掃除機 冷蔵庫  テレビ  テレビ 【表C】 A    B    C    D 1     A店 B店 C店 2 パソコン ○ ○  ○ 3 掃除機  ○    ○ 4 冷蔵庫  ○ ○ 5 テレビ     ○  ○ ※表A内で、表Bに該当する箇所に"○"が記入されます。 ※1~5はEXCELの行 ※A~DはEXCELの列 当方、EXCELは使い慣れていいますので、 多少難しい方法でも構いません。 (ややこしい関数の組み合わせも理論さえ理解すれば大丈夫です) どなたか分かる方がいましたら、 よろしくお願い致します。

  • エクセルでの表の作成

    今、エクセルの表で、A1からA100まで、1~100の連続した数字が入っています。C列のC1~C8には、任意の数字を入れます。 その際、C列に在る数字と同じ数字が在るA列のセルの右のセル(B列)に、自動的に○を、無ければ×と表示されるようにしたい、と思います。 次のような形です。  A列      B列       C列    1       ×       3 2          ×        6 3          ○        7 4         × 5         × 6        ○ 7         ○ 8         × 9         × 10         × ・    ・   ・   これを可能にする関数をご教示ください。

  • ★エクセルで星取表を作成したい★

    お世話になります。 エクセルのA~Zの行にあるデータをA列に入力した時に★(1でもいいのですが)を表示させたいのです。   A  B   C   D  E  F G・・・・・   1  2  3   4  5  6 1 ★ 2   ★  6              ★ 上のようなイメージです。VLOOKやIFなどやっては見たのですが出来ませんでした。 ちなみにVBAやマクロは苦手です。関数でよい方法はありませんか? お願いします。

  • エクセル2000での表の作成について

    仕事で困っています。よろしくお願いいたします。  あいう A123 B321 C 67 A45 D 59 E1 8 F123 ・ ・ ・ この列が1000行近くあり、いくつか重複がある。(上記の表でいえば Aのように) 上記のような表から  あいう 合計 A573 15 B321 6 C 67 13 D 59 14 E1 8 9 F123 6 こういう表をつくりたいと思っています。pibotをつかって  合計 A15 あ5     い7     う3 B6  あ3     い2     う1      こういう表はできたのですがレイアウトが気に入りません。 どなたかご教授ください。

  • Excelで表形式の変更をしたい

    Excelで質問です。 (1)のような表形式を、(2)のように、元の1列ごとに見出しを付けた形式にしたいのですが、マクロなしで可能なのでしょうか? また、マクロの使用・非使用に限らず、以下の操作を実現するマクロや関数を教えていただけると助かります。 よろしくお願いいたします。 関数や式を使ってみましたがうまくいきませんでした。。。 (1) 番号 名前 評価 1  佐藤 A 2  鈴木 B 3  田中 C (2) 番号 1  名前 佐藤 評価 A 番号 2  名前 鈴木 評価 B 番号 3  名前 田中 評価 C

  • 表引き

    表引き関数  再質問です 仮に A    B  C   D   E  A1    2  1   1   A2    4  2   1 A3    5  3   2  A4    6  4   4 A5    1  5   6 A6    2  6   2 BとCに2列の表があります E1には =vlookup(D1,B1:C6,2,false)の関数の式を入れました B列はランダムな数値 C列は通し番号です いつもは B列に通し番号 C列はランダム数値なのでD列の数値に対してのE列の表引きは問題ないのですが 上のように B列がランダムな数値 C列が通し番号の場合 B列に同じ数値が複数個あるとき E列に返してくるのは その数値の最初のひとつだけ  上の仮の表 では D列の数値に対して E1は 以下     E列  5  5  1と6  2  4  1と6 ですが この1と6の6が表引き出来なんです この6も表引きしたいのです どうすればいいのでしょうか 他の関数と組み合わせるんでしょうか よろしくお願いします

  • エクセルで表のある列を最初から最後まで選択するマクロ

    今現在、シートにA3:E700までの大きな表があります。 中のデータは文字列や数値です。 A列B列には途中に空白はありません。C~E列には空白もあります。 この表のB列だけを選択するマクロを書きたいのですが、データは日々増減するため最終行が特定できません。 どのように書けばいいのでしょうか?

  • エクセルの表から差し込み印刷したい

    ある表のA,B,C,D,Eの列に入っているデータを元に、画像のような表にA,B,C,D,Eの列を反映させた表を作成したいのですが、差し込み印刷で可能でしょうか?

  • 【エクセル】グラフの作成方法を教えてください

    以下のデータから希望のグラフを作成したいのですが、うまく出来ません。。 教えてください、宜しくお願い致します。 (1)データ  A列   B列   C列   D列   E列 ・ ・ ・ ・           名前A  名前B  名前C ・ ・ ・ ・  日付   時刻 2016/1/22 15:00  1    2    3 2016/1/22 16:00  0    4    0 2016/1/22 17:00  2    5    1 (2)希望のグラフ 15:00  16:00 17:00     2016/1/22 2016/1/23 2016/24 ←約1ヶ月あります。 中のデータを件数で表示したいです。 グラフ形式は問いません(縦、折れ線など)

  • エクセルVBAでレイアウトを変えて表作成

    こんにちは。 お世話になります。 エクセルの表をレイアウトを変えてcsv出力したいと考えています。 「これを大きく二つに分けると既存の表を別レイアウトの表にし直す」 + 「エクセルの表をcsv出力する」 になり、後者はどうもやり方が見つけられそうですので今回は割愛します。 表のレイアウト変更について、以下に例示します。 【既存の表】 A           B     C     D     E     F アイテム名 カラー  100cm 120cm 150cm 200cm アイテムA 赤 1 アイテムA 青 3 2 1 0 アイテムB 白 4 5 アイテムC 2 【レイアウト変更した表】 アイテムA 赤 120cm 1 アイテムA 青 100cm 3 アイテムA 青 120cm 2 アイテムA 青 150cm 1 アイテムA 青 200cm 0 アイテムB 白 150cm 4 アイテムB 白 200cm 5 アイテムC 100cm 2 現在、既存の表の対象範囲をCells(j,i)でjとiをLOOPさせて 空白行でなかったら…というIF分岐まで作りました。 残すは 空白ではない値に出会ったら、 その行のA列の値+B列の値+その列の1行目(サイズタイトルセル)の値+空白でない値(在庫数) を1レコードとして任意の場所にセット 改行してまた進めていく です。 そこまでできたら、csvデータ出力の方法をググり再開しようと思っています。 Cells関数を使えば上記の各値を取得することはできそうですが、それをどうやって保持する?か、 どうやって任意の場所に貼り付けるか、のあたりがわかっていません。 VBAデビュー後間もないのでできるだけ簡易で具体的なアドバイスをお願いいたします。

専門家に質問してみよう