- ベストアンサー
エクセルで横データを縦に並べ変える方法は?
- エクセルで横データを縦に並べ変える方法について教えてください。
- マンションのデータを横並びから縦並びに変換する関数が知りたいです。
- エクセルの並べ替え関数で横データを縦に変換する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
参考です。 可変データの取り扱いはマクロ(VBA)が簡単です。 データをSheet1、並び替えをSheet2に行います。 (1)Sheet1タブ上で右クリック→コードの表示→以下のサンプルコードを貼り付け→F5キー押下 マクロの削除は貼り付けたコードを全削除して下さい。 サンプルです。 Sub 並び替え() Set st1 = Sheets("sheet1") Set st2 = Sheets("sheet2") For i = 1 To st1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To st1.Cells(i, Columns.Count).End(xlToLeft).Column n = n + 1 st2.Cells(n, 1) = st1.Cells(i, 1) st2.Cells(n, 2) = st1.Cells(i, j) Next Next End Sub
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
分かり易く計算に負担のかからない方法は作業列を作って対応することでしょう。 例えば元の表がシート1に有るとしてA1セルには項目名が、A2セルから下方にマンション名のデータが入力されているとして、各マンションでの部屋番号は右横の列に入力されており、仮にG列までに入力されているとします。 そこで作業列としてH列にはH1セルには0と入力し、H2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",COUNT(B$2:G2)) 別のシートのAおよびB列にお求めの表を作成するとしたら別のシートのA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!H:H),"",IF(COUNTIF(Sheet1!H:H,ROW(A1))=1,INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!H:H,0)),INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!H:H,1)+1))) B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",INDEX(Sheet1!B:G,MATCH(A2,Sheet1!A:A,0),COUNTIF(A$2:A2,A2)))
お礼
申し訳ございません。 何度か試しましたが、私には使いこなす事ができませんでした。 回答ありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データリスト中で「マンションA」と入力されているセルが、Sheet1のA1セルであり、並べ替えた結果はSheet2のA列~B列の2行目以下に表示するものとし、部屋番号は全て数詞のみで表されており、「A101」等の様な文字が含まれた部屋は無いものとした場合には、次の様な方法があります。 まず、Sheet2のA1セルに次の数式を入力して下さい。 =Sheet1!$A$1 次に、Sheet2のA2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNT(OFFSET(Sheet1!$1:$1,1,,MATCH("゛",Sheet1!$A:$A,-1)-ROW(Sheet1!$A$1))),"",INDEX(Sheet1!$A:$A,MATCH(A1,Sheet1!$A:$A,0)+(COUNTIF(A$1:A1,A1)>=COUNT(OFFSET(Sheet1!$1:$1,MATCH(A1,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),))))) 次に、Sheet2のB2セルに次の数式を入力して下さい。 =IF($A2="","",SMALL(OFFSET(Sheet1!$1:$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),),COUNTIF($A$1:$A2,$A2))) 次に、Sheet2のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 以上です。
お礼
とても参考になりました。 ありがとうございました。
- DIooggooID
- ベストアンサー率27% (1730/6405)
コピー して、 張り付ける 際に、 単なる 張り付け をせずに、 「形式を選択して張り付ける」 を行います。 その際の オプションで 行列を入れ替える を指定します。
補足
こちらの方法ですと列が増えてしまうので、列は2列で縦にデータをつなげていきたいのですが・・・? わかりずらい説明で申し訳ございません。
お礼
マクロ・・・。 すごい!! 上記の方法で簡単に出来ました。 感動しました。 ありがとうございます。