• ベストアンサー

Excelで並べ替え

島田 1 a 島田 4 b 橋本 1 c 橋本 2 d 松田 1 e 松田 3 f 松田 4 g 岡部 2 h 岡部 3 I といったデータを ________1 2 3 4 島田 a     b 橋本 c d     松田 e   f g 岡部   h I   のように表示したいのですが、宜しくお願いします。

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

  • ベストアンサー
  • macchan1
  • ベストアンサー率38% (52/136)
回答No.2

名前がA列に数字がB列英語がC列にあり、下の一覧表の名前がD2セル以下、1~4までの数字がE1セルから右方向に入力されている場合、以下の式をE2セルに入力して下方向及び右方向にオートフィルします。 =IF(SUMPRODUCT(($A$1:$A$100=$D2)*($B$1:$B$100=E$1))=0,"",OFFSET($C$1,SUMPRODUCT(($A$1:$A$100=$D2)*($B$1:$B$100=E$1)*ROW($A$1:$A$100))-1,0,1,1))

junjunjujujun
質問者

お礼

へーーーーー!  式1発でできるのですね。SUMPRODUCTやOFFSETやROWなど、今まで知らなかったもので、今後役に立ちそうな関数も勉強できて大変よかったです。ありがとうございました。

その他の回答 (4)

回答No.5

A列に名前が入力されているとしたら、 表を1列右にずらし、新しいA列を作業列にします。 A1に =B1&C1 これを下までコピー。 E2から下に 島田 橋本 松田 岡部 (これも関数で処理したい場合、また書いてください) F1から右に 1 2 3 4 F2に =IF(ISERROR(MATCH($E2&F$1,$A$1:$A$9,0)),"",VLOOKUP($E2&F$1,$A$1:$D$9,4,0)) この数式を縦横にコピー。

junjunjujujun
質問者

お礼

ありがとうございました。今度はISERRORにMATCHにVLOOKUPですか。色々な方法があって、おもしろいですね。勉強になります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

VBAでやってみました。 元表、書き出し位置は適当に変更して下さい。 Public Sub 並べ替え() Dim s As Range '元の表の左上 Dim d As Range '作成表の位置 Dim r, loc Dim max Dim name, i Set loc = CreateObject("Scripting.Dictionary") Set s = Sheets("Sheet1").Range("A1") Set d = Sheets("Sheet2").Range("A1") r = 0 max = 0 '書き出し側のクリアは、されていると想定する Do Until s.Offset(r).Value = "" '空行になるまで name = s.Offset(r).Value If max < s.Offset(r, 1).Value Then max = s.Offset(r, 1).Value '数値データの最大を記憶する If Not loc.Exists(name) Then '新しい名前 loc.Add name, loc.Count + 1 '書き出す行の位置を登録(+1は項目行を+1する) d.Offset(loc.Item(name), 0).Value = name End If d.Offset(loc.Item(name), s.Offset(r, 1).Value).Value = s.Offset(r, 2).Value r = r + 1 Loop For i = 1 To max d.Offset(0, i).Value = i Next End Sub

junjunjujujun
質問者

お礼

ありがとうございました。VBAはまだまだ勉強足らずなので後々解読させていただきます。

回答No.3

関数を使った並べ替えの例です。 【条件】 (1)データは、Sheet1にB1~D9まで以下の形ではいっているものとします。 (2)並べ替えるシートをSheet2とし、質問のような形式とします。 (B列から1,2,3,・・・とし、2行目から島田、橋本、松田、・・・とする形式) (3)データに重複はないものとします。 【手順】 (1)Sheet1のA列を作業用とし、A1に以下の式を入力し、A9までコピーする。 A1=B1&C1 必要であれば、A列は非表示にしておく。 (2)Sheet2のB2に以下の式を入力し、以下全セル(B2~E5まで)コピーする。 =IF(COUNTIF(Sheet1!$A$1:$A$9,$A2&B$1)=0,"",VLOOKUP($A2&B$1,Sheet1!$A$1:$D$9,4,0))

junjunjujujun
質問者

お礼

COUNTIFとVLOOKUPを使ったやり方ですか。単純で理解しやすいです。ありがとうございました。

  • melgirl
  • ベストアンサー率39% (142/364)
回答No.1

島田1aは同じセルに入っているデータですか? それとも別セルでしょうか?

junjunjujujun
質問者

補足

別のセルです。宜しくお願いします。

関連するQ&A