• ベストアンサー

エクセルの並び替え または関数

エクセルの並び替え または関数ですが、シート1に A列に店名が入っています。 B列に氏名 C列に成績 D列は資格 1行目は、見出し A列に店名がはいっているのですが、店名は100行まで店名がランダムに入っています 店名は、小渕店  春日部店  長野店  三島店  加賀店  丸田店 がランダムで100行まで入っています。これを並び変えで小渕店  春日部店  長野店  三島店  加賀店  丸田店の順に並び変える方法はありますか? 教えてください

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

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

 作業列を使用しない方法です。  今仮に、並べ替えた結果をSheet2に表示するものとします。  まず、Sheet1、Sheet2の両Sheetの A1セルに  店名 B1セルに  氏名 C1セルに  成績 D1セルに  資格 と入力して下さい。  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>SUMPRODUCT(COUNTIF(Sheet1!$A:$A,{"小渕店","春日部店","長野店","三島店","加賀店","丸田店"})*1),"",IF(COUNTIF(A$1:A1,A1)<COUNTIF(Sheet1!$A:$A,A1),A1,INDEX({"小渕店","春日部店","長野店","三島店","加賀店","丸田店"},IF(ROWS($2:2)=1,1,MATCH(A1,{"小渕店","春日部店","長野店","三島店","加賀店","丸田店"},0)+1))))  次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF($A2="","",INDEX(Sheet1!$A:$D,SUMPRODUCT((COUNTIF(OFFSET(Sheet1!$A$1,,,ROW(Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$A:$A,-1)))-ROW(Sheet1!$A$1)+1),$A2)<COUNTIF($A$2:$A2,$A2))*1)+ROW(Sheet1!$A$1),COLUMNS($A:B)))  次に、Sheet2のB2セルをコピーして、Sheet2のC2~D2の範囲に貼り付けて下さい。  次に、Sheet2のA2~D2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

作業列を作って対応します。 初めに並べたい順で店名をG1セルから下方にG1セルに小渕店 、G2セルに春日部店、・・・  のように並べます。 H1セルから下方には1,2,3・・のように数値を入力します。 その上でE1セルには並べ替え列とでも入力してからE2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",VLOOKUP(A2,G:H,2,FALSE)*1000+COUNTIF(A$2:A2,A2)) その後にE列を選択してから「ホーム」タブの「並べ替えとフィルター」から「昇順」を選択し、「選択範囲を拡張する」にチェックのある状態で「並べ替え」をクリックします。 作業列が必要でなくなれば最後にそれらの列を削除して終了してもよいでしょう。

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

こんばんは! 単純に並び替えという訳にはいかないようですので・・・ VBAになってしまいますが、一例です。 元データがSheet1にあり、Sheet2に表示するようにしてみました。 Alt+F11キー → メニュー → 挿入 → 「標準モジュール」を選択 → VBE画面に ↓のコードをコピー&ペーストし、Excel画面に戻ってマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 並び替え() 'この行から Dim i As Long, k As Long, wS1 As Worksheet, wS2 As Worksheet, myArray As Variant Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") myArray = Array("小渕店", "春日部店", "長野店", "三島店", "加賀店", "丸田店") Application.ScreenUpdating = False wS2.Cells.ClearContents wS1.Rows(1).Copy wS2.Cells(1, 1) For k = 0 To UBound(myArray) wS1.Cells(1, 1).CurrentRegion.AutoFilter field:=1, Criteria1:=myArray(k) i = wS1.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then wS1.Rows(2 & ":" & i).Copy wS2.Cells(Rows.Count, 1).End(xlUp).Offset(1) End If Next k wS1.AutoFilterMode = False Application.ScreenUpdating = True End Sub 'この行まで ※ 質問通りの店順にしています。m(_ _)m

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

>春日部店なら02というような列を作り、 は =(FIND(LEFT(A1),"小渕店 春日部店長野店 三島店 加賀店 丸田店")-1)/4+1 でしょうか。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

漢字の並び替えはできませんので、01小渕店、02春日部店 のように数字を入れるか、春日部店なら02というような列を作り、 並び替えます。

関連するQ&A