• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel 行列入れ替え)

Excel行列入れ替えの方法と集計の仕方

このQ&Aのポイント
  • Excelで行列入れ替えをする方法について教えてください。
  • ピボットテーブルを使って行列入れ替えをする際に横方向のデータが入っている場合、上手くできない問題が発生します。代替の方法も教えていただきたいです。
  • 最終的には各列ごとの値を含む割合を出したいと考えています。

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

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

こんにちは! VBAになってしまいますが、一例です。 Sheet1のデータをSheet2に表示するようにしてみました。 Sheet1のデータは1行目からあるとします。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 入れ替え() 'この行から Dim i As Long, j As Long, cnt As Long Dim wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False wS2.Cells.ClearContents For i = 1 To wS1.Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To wS1.Cells(i, Columns.Count).End(xlToLeft).Column cnt = cnt + 1 With wS2.Cells(cnt, 1) .Value = wS1.Cells(i, 1) .Offset(, 1) = wS1.Cells(i, 2) End With wS2.Cells(cnt, Columns.Count).End(xlToLeft).Offset(, 1) = wS1.Cells(i, j) Next j Next i Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか? ※ とりあえず第一段階の行・列の表示だけです。m(_ _)m

iwashigumo33
質問者

お礼

早々にご回答いただき、ありがとうございます。 実行してみて上手くいきました。 空白行がありますが、並べ替えなどを実行し削除すれば何とか なりそうです。 VBAも基本は勉強しましたが、なかなか使いこなすのは難しいです。 意味を理解して、使えるようにしたいと思います。 ありがとうございました。

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

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答:No.3です。 >数式をコピーしてやってみたのですが、シート名の後ろにある「’」がエラーとなってしまいました。  申し訳御座いません、何でこの様なミスを犯したのか、参照先のシート名を随所で間違えておりました。  ですから、正しくは以下の様になります。  まず、適当な未使用シート(ここでは仮にSheet3とします)のA1セルに次の数式を入力して下さい。 =IF($U1="","",MATCH("*?",INDEX(Sheet1!$C:$C,ROW()):INDEX(Sheet1!$IV:$IV,ROW()),-1))  次に、Sheet3のB1セルに 0 と入力して下さい。  次に、Sheet3のB2セルに次の数式(ここは間違えておりません)を入力して下さい。 =IF($A1="","",SUM($A$1:$A1)+0.5)  次に、Sheet3のA1セルをコピーして、Sheet3A2セルに貼り付けて下さい。  次に、Sheet3のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3!$A:$A),"",INDEX(Sheet1!$A:$A,MATCH(ROWS($1:1),Sheet3!$B:$B)))  次に、Sheet2のB1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3!$A:$A),"",INDEX(Sheet1!$B:$B,MATCH(ROWS($1:1),Sheet3!$B:$B)))  次に、Sheet2のC1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3!$A:$A),"",INDEX(Sheet1!$C:$IV,MATCH(ROWS($1:1),Sheet3!$B:$B),ROWS($1:1)-INT(LOOKUP(ROWS($1:1),Sheet3!$B:$B))))  次に、Sheet2のA1~C1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

iwashigumo33
質問者

お礼

度々ありがとうございました。 再度やってみましたが、数式を確定しようとすると「値の更新」ダイアログが表示され、「キャンセル」すると(「OK」はクリックできない)やはり何も表示されませんでした。

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

No.4さんの、空白の行のみ削除する方法あたりが、応用範囲が広いかなと。 >最終的にはA列ごとB列ごとに各値を含む割合を出したいと考えています。  ……  もし、データの入れ替えをせず集計が出来れば、そういった方法も教えて頂きたいです。 それは、「111」とか「444」とかの個数が分かればいいという意味でしょうか?そうだとすると、見たところ、質問文の最初の表で 1 行の中に載っている「あ」?「お」の個数がそのまま「111」とかの個数になるようなので、「あ」?「お」を数えればいいですね。 H1 =count(c1:g1)  …… C ? G 列に入力される値は数値のみである場合   あるいは   =counta(c1:g1)  …… C ? G 列に入力される値として文字列も考えられる場合 COUNTA 関数は空文字列「""」も数えてしまうので、ご注意。これが既に入力されている場合は、2回置換するなどして除去しておきます。 こうして H 列に個数がズラッと並んだら、「111」のみの個数の合計は、 =sumif(A$1:A$100,111,H$1:H$100) のような感じの数式で求められますね。「111」の部分は勿論、セル参照で書いても差し支えありません。

iwashigumo33
質問者

お礼

ご回答ありがとうございました。 参考にさせて頂きます。

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

以下は Sheet2 おける手順 1.A1: =OFFSET(Sheet1!$A$1,(ROW(A1)-1)/5,COLUMN(A1)-1) 2.セル A1 を右2列にドラッグ&ペースト 3.セル C1 の式   =OFFSET(Sheet1!$A$1,(ROW(C1)-1)/5,COLUMN(C1)-1)   を次のように変更   =OFFSET(Sheet1!$A$1,(ROW(C1)-1)/5,COLUMN(C1)-1+MOD(ROW(A1)-1,5))&""   ここで、上式中の 5 は Fig-1 のC列以右の最大列数 4.範囲 A1:C1 を下方にズズーッとドラッグ&ペースト(Fig-2) 5.A~C列全体を選択して、[コピー]→[値の貼り付け] 6.1行目で[オートフィルタ]を設定して、C列の“(空白セル)”で   レコードを抽出(Fig-3) 7.全抽出レコードを選択((Fig-4) 8.[編集]→[行の削除]を実行後に[データ]→[フィルタ]→[すべて   表示]を実行(Fig-5)

iwashigumo33
質問者

お礼

ご回答ありがとうございます。 関数が複雑ですが、理解して使いたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、元の表がSheet1に存在していて、行列を入れ替えた表をSheet2に表示させるものとします。  まず、適当な未使用シート(ここでは仮にSheet3とします)のA1セルに次の数式を入力して下さい。 =IF($U1="","",MATCH("*?",INDEX(Sheet1'!$C:$C,ROW()):INDEX(Sheet1'!$IV:$IV,ROW()),-1))  次に、Sheet3のB1セルに 0 と入力して下さい。  次に、Sheet3のB2セルに次の数式を入力して下さい。 =IF($A1="","",SUM($A$1:$A1)+0.5)  次に、Sheet3のA1セルをコピーして、Sheet3A2セルに貼り付けて下さい。  次に、Sheet3のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3'!$A:$A),"",INDEX(Sheet51!$A:$A,MATCH(ROWS($1:1),Sheet3'!$B:$B)))  次に、Sheet2のB1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3'!$A:$A),"",INDEX(Sheet51!$B:$B,MATCH(ROWS($1:1),Sheet3'!$B:$B)))  次に、Sheet2のC1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM(Sheet3'!$A:$A),"",INDEX(Sheet51!$C:$IV,MATCH(ROWS($1:1),Sheet3'!$B:$B),ROWS($1:1)-INT(LOOKUP(ROWS($1:1),Sheet3'!$B:$B))))  次に、Sheet2のA1~C1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

iwashigumo33
質問者

補足

ご回答ありがとうございます。 数式をコピーしてやってみたのですが、シート名の後ろにある「’」がエラーとなってしまいました。 「’」を削除してみたのですが、結果は何も表示されませんでした。 何か、方法が良くなかったのでしょうか?

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

コピーして、編集から形式を選択して貼り付け、行列入れ替え。

iwashigumo33
質問者

補足

ご回答ありがとうございます。 ただ、「形式を選択して貼り付け」だと、もともと入力されているデータが上書きされてしまいます。 出来ればA列とB列は自動でデータを補いたいです。

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

関連するQ&A

  • EXCEL 関数をふくむ行列の入れ替え

    いまSheet1に3列*2行で A1+A10 B1+B10 C1+C10 A2+A11 B2+B11 C2+C11 といった関数が入っているとして、 別のシートに、この関数から導き出される値の行列を入れ替えた状態で表示したいのですが、どういった方法があるのでしょうか? ちなみに値だけを行列の入れ替えをしたいのではなく、関数を活かしたまま行列を入れ替えたいのですが、一般的な「形式を選択して貼り付け」で行列の入れ替えにチェックをいれても、エラーが返ってきてしまいうまくいきません。 さらに、その別のシート上でSUMなどの関数で縦・横・の集計など計算をしたいのですが・・・ いい方法があったら教えてください。

  • Excel 都道府県の数を集計

    office365 Excelについて質問です A1~A10まで都道府県が並んでいるのを ピボットテーブルで集計し その都道府県ごとの件数を数えたいのですが うまくいきません 初歩的な質問ですいませんが、 素人にも分かるように教えていただけると嬉しいです 添付画像の A列が元データ C列がピボットテーブルで作成した部分で その横に「集計フィールド」を使って(?) 赤文字で集計した県の数を表示させたいのですが 方法が分からないです 集計フィールドを使う方法が間違っているのでしょうか… 色々調べたのですが分からず困っております お詳しい方、どなたかアドバイス宜しくお願い致します

  • Excelのピボットテーブルについて相談です

    添付のようなピボットテーブルがあり、IDに対して各列(A、B、C、D、E)に 〇と空白のみだと表示せず、×が1つでもあれば表示ということをやりたいです フィルターを使わない行いたいのですが ピボットテーブルの参照元のデータから、各列(A、B、C、D、E)の〇と×を集計してた列を作成し、フィルターとして適用すればいいのかなとも思いつきましたが、実現方法がわからない次第です ご存じの方、教えていただけると助かります よろしくお願いします

  • Excellデータのちょっと複雑な行列入れ替えです。

    行列入れ替えです。 データ A  12         A  12 15 20 A 15 B 18 25 A 20 → C 12 B 18 D 15 B 25 C 12 D 15 のようにしたいのですが。よろしくお願いします。

  • Excelの数値範囲を指定したクロス集計

    Excel2010です。 やりたいことは、 フィールドA(文字列)、フィールドB(文字列)、フィールドC(文字列)、フィールドD(数値)、フィールドE(数値)、というデータがあり、フィールドDの値を「1未満」「1以上10未満」「10以上30未満」「30以上」と範囲を分けて、フィールドA、B、Cのそれぞれの組み合わせにおけるフィールドDの合計値を求める ということです。 フィールドA="あ"且つフィールドB="イ"且つフィールドC="山"且つフィールドDが1以上10未満のレコードのフィールドEの合計値、というような全ての組み合わせです。 目標の形式としては、ピボットテーブルは、列にフィールドA、Bを、行にフィールドC、Dを設定します。この時、フィールドDのすべての値が羅列することになりますが、上記のように数値範囲を指定して集計したいです。 範囲指定してその合計値を出すにはSUMIFでできるようですが、ピボットテーブルと組み合わせて使えればいいのかなと思ってますが。。。やり方が分かりません もし、一発では無理というのであれば、先に別処理をすることで可能であればその方法でもいいですので、教えてください。

  • Excelピボットテーブルについて

    ピボットテーブルを使ってデータ集計をしています。 とある文字列Aの個数と文字列Bの個数を値として表に出しているのですが、 文字列Aの個数/文字列Bの個数を表示させる新たな列を作ることは可能でしょうか? 集計フィールドの挿入で「文字列A/文字列B」と入れてみたのですが、#DIV/0!になってしまいました。 もう少し具体的にやりたいことを書くと、 品物列に「きゅうり、りんご、トマト」の文字列 〇×列に「〇、×」の文字列 が、データベースに入っていて ピボットテーブルのほうできゅうりと入力されてる個数、〇と入力されてる個数が値としてあります。 きゅうりが3、〇が1だとして、1/3をパーセント表示した列を作りたいです。 (きゅうりの合計数のうち〇が何パーセントあるか) 分かりにくくてすみません。。 可能であればその方法も教えていただきたいです。

  • Excel 行列入れ替えて数式をコピーしたい

    Excelのすばらしい機能に相対参照を使った連続コピーがあります。例えば、=A1 を横方向にコピーすると =B1 =C1 ・・となり、縦方向だと=A2 =A3 ・・となります。 ところで、これを横方向にコピーしたとき =A2 =A3 ・・、縦方向に=B1 =C1 ・・になる方法ってないでしょうか? 「形式を選択して貼付け」の[行列を入れ替える]では『値』では有効なのですが『数式』だとうまくいきません。数式で行列入替する方法を教えて下さい。

  • [集計フィールドの挿入]の計算結果がおかしい

    ピボットテーブルについて教えてください。 ピボットテーブルで、[集計フィールドの挿入]を行い、フィールドAとフィールドBを割り算したところ、計算結果が正しくありません。 ・フィールドAは合計で集計したもの ・フィールドBはデータの個数を合計したもの 仮に、フィールドAが100、フィールドBが20だとすると、計算結果は割り算で正しくは5となるはずですが、そうなりません。 どうやらフィールドBが、データの個数ではなく、データの合計の値でもって計算されてしまっているようです。 正しく計算される方法を教えてください。 エクセルのバージョンは2010です。 宜しくお願い致します。

  • Excelで数値範囲を設定して、他の数値を集計

    Excel2010です。 列、行でクロス集計を行う場合で、ピボットテーブルの行には数値フィールドAを設定して、これを「1未満」「1以上10未満」「10以上50未満」「50以上」という任意の範囲に分けて、それぞれの範囲に対応するレコードからフィールドBの合計値を集計したいです。 ピボットテーブルを使う必要があるかと思いますが、それ以外の方法でも構いません、やり方を教えてください。

  • 行列並び替え

    A1からA5にあいうえお、 B1からB5にかきくけこ、C1からC5にさしすせそ と並んでいるとして、 A列に、順番通りにすべてを移動させたいのですが、 形式を選択して貼り付けで行列入れ替えでやると、 複数列になってしまうのですが、一括でやる方法が知りたいです。 よろしくお願いします。

専門家に質問してみよう