プロが教えるわが家の防犯対策術!

すみません。誰か教えて下さい。

下記の様な並べ替えが出来る関数を誰か知りませんか?

マンションA 101 107 201
マンションB 202 405
マンションC 102 203 301 501
マンションD 103 201 405



マンションA101
マンションA 107
マンションA 201
マンションB202
マンションB 405
マンションC102
マンションC 203
マンションC 301
マンションC 501
マンションD103
マンションD 201
マンションD 405

誰かご存知の方いましたら教えて下さい。

A 回答 (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
    • good
    • 10
この回答へのお礼

マクロ・・・。

すごい!!

上記の方法で簡単に出来ました。

感動しました。

ありがとうございます。

お礼日時:2011/11/29 12:59

分かり易く計算に負担のかからない方法は作業列を作って対応することでしょう。


例えば元の表がシート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)))
    • good
    • 0
この回答へのお礼

申し訳ございません。

何度か試しましたが、私には使いこなす事ができませんでした。

回答ありがとうございました。

お礼日時:2011/11/29 13:01

 今仮に、元データリスト中で「マンション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行目以下に貼り付けて下さい。

 以上です。
「エクセルで横データを縦に並べ変えたいです」の回答画像2
    • good
    • 1
この回答へのお礼

とても参考になりました。

ありがとうございました。

お礼日時:2011/11/29 13:00

コピー  して、  張り付ける  際に、  単なる  張り付け  をせずに、



「形式を選択して張り付ける」 を行います。

その際の オプションで  行列を入れ替える  を指定します。

この回答への補足

こちらの方法ですと列が増えてしまうので、列は2列で縦にデータをつなげていきたいのですが・・・?
わかりずらい説明で申し訳ございません。

補足日時:2011/11/28 20:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています