【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

重複した値がある表を、関数で並び替えることは可能でしょうか?

EXCELの棒グラフが常に昇順になるように、LARGE関数とINDEX関数を使い表を作成しました。

並び替えたい列(F3)に =LARGE($C$2:$C$5,ROW(A1))
並び替えを反映させたい列に(E3)に =INDEX($B$2:$C$5,MATCH($F2,$C$2:$C$5,0),1)
下までオートフィル

概ね並び替え出来たのですが、重複した値についてはE列まで同じ値になってしまいます。

添付図でいいますと、福岡をE3もしくはE4に反映させたいです。
同じ値については、順不同で構いません。

上記を関数で行うことは可能でしょうか?
ご教示いただけますと幸いです。

「EXCEL関数:重複した値がある並び替え」の質問画像

A 回答 (1件)

こんにちは!



一気に!となるとかなり面倒なので、一案です。
↓の画像のように作業用の列を設けてみてはどうでしょうか?

作業列D2セルに
=IF(C2="","",COUNTIF(C:C,">"&C2)+COUNTIF(C$2:C2,C2))
という数式を入れこれ以上データはない!という位まで下へフィル&コピー!

E2セルに
=IFERROR(INDEX(B:B,MATCH(SMALL($D:$D,ROW(A1)),$D:$D,0)),"")

という数式を入れ、列・行方向にフィル&コピーしています。

※ 作業列が目障りであれば、遠く離れた列にするか
非表示にしてください。m(_ _)m
「EXCEL関数:重複した値がある並び替え」の回答画像1
    • good
    • 0
この回答へのお礼

tom04さん

こんにちは!

迅速な回答ありがとうございます!
出来ました~!感動です(;;)

とっても助かりました。
ありがとうございました(^o^)/♡

お礼日時:2018/01/11 11:31

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

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

このQ&Aと関連する良く見られている質問

QExcelで隣のセルと同じ内容に列を並べ替える方法

質問の意味がわかりにくくて申し訳ございません。

ただいま600人分の名簿を並べ替える作業をしておりまして、
毎年の作業で、いつもおっくうになっております。

毎年同じ600人分の名簿をいくつかのグループに分けるために列を新たに挿入し、
そこに1や2や3といった数字を打ち込み、並べ替え機能をつかって、
グループ分けをしておりました。

しかし、すでに氏名(漢字)のデータですが並べ替えたデータがあり、
そのデータと同じように、旧データを並べ替えたいのです。

うまく質問の意図が伝えることができずすみません。

例えば、

A|E *****
B|C *****
C|D *****
D|A *****
E|B *****

このような感じです。*はそれぞれの人特有のデータなので、ABCDE順に並べ替えても引き継がせたいデータです。

ECDABの隣にすでにあるABCDEの氏名(漢字)のデータをコピーし、
ECDABをABCDEの順番に並べ替えたいのです。


少しわかりにくいかもしれませんが、
もし何か良い方法ありましたら、お教えいただけますと幸いです。
よろしくお願い致します。

質問の意味がわかりにくくて申し訳ございません。

ただいま600人分の名簿を並べ替える作業をしておりまして、
毎年の作業で、いつもおっくうになっております。

毎年同じ600人分の名簿をいくつかのグループに分けるために列を新たに挿入し、
そこに1や2や3といった数字を打ち込み、並べ替え機能をつかって、
グループ分けをしておりました。

しかし、すでに氏名(漢字)のデータですが並べ替えたデータがあり、
そのデータと同じように、旧データを並べ替えたいのです。

うまく質問の意図が伝えることができずす...続きを読む

Aベストアンサー

例えばシート1のA2セルから下方にはECDABと氏名が並び横の列にはそれぞれの人のデータが入力されているとします。
そこでシート2には並び変えたい氏名の順序でA2セルから下方にABCEと入力します。
シート2のB2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(COUNTIF(Sheet1!$A:$A,$A2),IF(VLOOKUP($A2,Sheet1!$A:$XX,COLUMN(B1),FALSE)="","",VLOOKUP($A2,Sheet1!$A:$XX,COLUMN(B1),FALSE)),"")

その後にシート2全体を選択してから右クリックして「コピー」し、その後にシート2のA1セルにカーソルを移して右クリックし、「形式を選択して貼り付け」で「値」にチェックをして貼り付けます。

Qエクセルで、重複データを除外して小さい値順に並べ替える関数

A列に、
500
80
200
200
100
300
と、データがあります。このデータのうち、重複しているデータ(200)を一つだけ表示させ、かつ、小さい順に並べ替えて、下記のようにしたいのですが…。
80
100
200
300
500

調べてみて重複データをチェックする方法や削除する方法などはありましたが、並べ替える方法が見つかりません。フィルタオプションかと思いましたが使い方がよくわかりません。配列数式のこともわかりません。オートフィルタやマクロは使いたくありません。よろしくお願いします。

Aベストアンサー

C列1行目から表示させるとします。

C1セルに
=IF(COUNT(A:A),MIN(A:A),"")

C2セルに
=IF(OR(C1="",C1=MAX(A:A)),"",SMALL(A:A,COUNTIF(A:A,"<="&C1)+1))

と入れて、必要なだけ下にフィルコピーします。

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qエクセル SMALL の機能を文字列でもできないか

数値に対し小さいほうからn番目というのは
SMALLで出来ますが、2文字以上(最低15文字くらい
まで)の文字列に対しそれを行う方法は無いでしょうか?

なんらかの式の組み合わせで出来ないものでしょうか?

要するに名前(よみがな)などを昇順(または降順)に読み込み
ソートさせた状態で別表に表示させたいのですが
文字1文字ならCODEで何とかなるのですが
2文字以上となると・・・

VB等のプログラムは一切使わず関数の駆使でなんとかならない
ものでしょうか?

Aベストアンサー

◆先程の回答で、順位を表示させなくてもできます
   A       B
1  ああああ  ああ
2  ああ     あああ
3  あい     ああああ
4  あう     あい
5  あいあい  あいあい
6  いいい   あう
7  あああ   いいい

B1=IF(COUNTA(A:$A)<ROW(),"",INDEX(A:A,MATCH(ROW(),INDEX(COUNTIF($A$1:$A$10,"<="&$A$1:$A$10),),)))
★下にコピー

QExcel 重複判断しつつ並べ替えする関数

お世話になっております。

添付の画像を見て頂きたいのですが、

1.添付した画像のような感じで重複、非重複が分かるようにA-Z順に並べる関数と、
2.その非重複の全リストの一覧にする関数

はどのように関数を書けばいいでしょうか。
お知恵お貸し下さいm(_ _)m

Aベストアンサー

No.4・5です。
補足の件について・・・

>これをリストが5つ(E列まで)、10個(J列まで)などにする場合、
>コードのどこをどう書き換えれば良いのでしょうか。

に関しては、「全項目」が画面から見えなくなるといけないので余計なお世話かもしれませんが、
↓の画像のように「全項目」列をA列とし、「商品リスト」はB列以降にあり
1行目項目が入っている最終列まで対応するようにしてみました。
(1行目項目データがある最終列までです)

次に
>また、今回は1つの商品リストに十数個程度のデータしか入っていませんでした、
>これがそれぞれの商品リストに数千入っていても、
>このまま動作すると思って大丈夫でしょうか。

の件につきまして、おそらく大丈夫のはずですが結構時間がかかるかもしれません。

今一度コードを載せてみますので、マクロを試してみてください。

Sub test2() 'この行から
Dim i, j, k, M As Long
Application.ScreenUpdating = False
M = Cells(1, Columns.Count).End(xlToLeft).Column '最終列の取得
For j = 2 To M 'B列~最終列まで
For k = 2 To Cells(Rows.Count, j).End(xlUp).Row '2行目からj列最終行まで
If WorksheetFunction.CountIf(Columns(1), Cells(k, j)) = 0 Then
Cells(Rows.Count, 1).End(xlUp).Offset(1) = Cells(k, j)
End If
Next k
Next j
For j = 1 To M 'A列~最終列まで
k = Cells(Rows.Count, j).End(xlUp).Row 'J列の最終行取得
Range(Cells(2, j), Cells(k, j)).Sort key1:=Cells(1, j), order1:=xlAscending
Next j
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
For j = 2 To M 'B列から最終列まで
For k = Cells(Rows.Count, j).End(xlUp).Row To 2 Step -1
If Cells(k, j) = Cells(i, 1) Then
Cells(k, j).Cut Destination:=Cells(i, j)
End If
Next k
Next j
Next i
Application.ScreenUpdating = True
End Sub 'この行まで

※ ご希望通りに動きになれば良いのですが・・・m(_ _)m

No.4・5です。
補足の件について・・・

>これをリストが5つ(E列まで)、10個(J列まで)などにする場合、
>コードのどこをどう書き換えれば良いのでしょうか。

に関しては、「全項目」が画面から見えなくなるといけないので余計なお世話かもしれませんが、
↓の画像のように「全項目」列をA列とし、「商品リスト」はB列以降にあり
1行目項目が入っている最終列まで対応するようにしてみました。
(1行目項目データがある最終列までです)

次に
>また、今回は1つの商品リストに十数個程度のデータしか入って...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合

MATCH関数で、検索した値が複数ある場合に1つしか出なくて困っています。
(例)
   A B C D
1 年月日 種類 番号 備考
2 4月1日 肉類 1
3 4月2日 野菜 2
4 4月3日 肉類 1
5 4月4日 果物 2
6 4月5日 野菜 1
7 4月6日 果物 3
8 4月7日 果物 2
9 4月8日 肉類 1

この表で、D9の備考の欄に「種類:肉類、番号:1」と同じものがあった時の日付を、新しい日付で取り出したいのです。

INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2)
としたのですが、本当は4月3日を取り出したいのですが、4月1日が出てきます。
どのようにしたら良いでしょうか?
Excel2003です。
よろしくお願いします。

Aベストアンサー

MATCH関数を使用しませんが、D9の書式を日付にして、
=MAX((A2:A8)*(C2:C8=1)*(B2:B8="肉類"))
と、入力してShift+Ctrl+Enterキーで入力完了してみてください(配列式になります)。

Q入力後に日付順になるように自動で並び替えしたいのです。

エクセルで家計簿を作成しています。
初心者なので簡単に作成していますが、この質問ページで勉強中です。
早速質問なのですが、A1のセルに日付が入るようにしているのですが
時につけ忘れで、日付が前後してしまいます。
このとき入力後に自動で、日付の順番に並び返してくれる方法ありますか?
もしあるのでしたら、ぜひ挑戦してみたいと思います。
よろしくお願いします。

Aベストアンサー

入力後、自動で といわれるとVBAの力を借りることになります。
手動では、ツールバーのデータ=>並び替え でA列で並び替えればOKですが?
もし、既にご存知でしたら、VBAで実行する方法ですが
シートの名前のタブを右クリックして コードの表示 をクリック
VBエディターが起動したら
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Cells.Select
Selection.Sort Key1:=Range("A2"), Header:=xlGuess
End If
End Sub
コピィして閉じてみてください。
A列に適当に日付を入れてみます。使いやすいかどうか?色々試してみてください。

QEXCEL関数 空白セルを詰める関数

図1の表を図2のようにオートフィルタを使わず表示させる関数で下記を見つけましたが、実際使うときには、番地がA1からの位置ではなくAA60ぐらいの位置でこの関数を実行すると表示されません。
どの部分をその番地にあわせるとよいでしょうか?

<図1>
    A     B
1   あいう
2         えお
3   かきく
4         けこ
5   さしす

<図2>各行の空白セルを詰めて表示させる
    A     B    
10  あいう   えお
11  かきく   けこ
12  さしす
13
14

【関数】

A10: =IF(ROW(A1)>COUNTA(A$1:A$5),"",INDEX(A$1:A$5,SMALL(IF(A$1:A$5<>"",ROW($A$1:$A$5),""),ROW(A1))))

Ctrl + Shift + Enterキーで式を確定します。

右と下にコピーします。

Aベストアンサー

元データがA60から始まっているとすると,

A10に
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A$60:A$65,SMALL(IF(A$60:A$65<>"",ROW($A$1:$A$6),""),ROW(A1))))
をコントロールキーとシフトキーを押しながらEnter,下にコピー,右にコピー と直す格好になりますね。




#好みの問題ですが
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A:A,SMALL(IF(A$60:A$65<>"",ROW(A$60:A$65),""),ROW(A1))))
をCtrl+Shift+Enterの方が,判りやすいと思います。

QEXCEL並び替え同じ文字の入ったセルを並べて表示する方法。関数。

お世話になります。
00101 00105
00104 00103
00103 00104

となっているものを
00101
00103 00103
00104 00104
00105
と同じ数字が横に表示されて同じ数字がないものは片方だけ表示される(上記のような状態)にする方法を教えてください。
関数を使うのであれば式を教えてくださいませ。
00101を縦横一列目としていただければわかりやすいです。

Aベストアンサー

こんばんは!
外していたらごめんなさい。
B列にA列と同じ数値が複数ある場合も列方向に複数表示するようにしてみました。

↓の画像のように作業用の列を2列使わせてもらっています。

作業列C2セルに
=IF(COUNT($A$2:$B$100)<ROW(A1),"",SMALL($A$2:$B$100,ROW(A1)))
D2セルに
=IF(OR(C2="",COUNTIF($C$2:C2,C2)<>1),"",C2)
として、C2・D2セルを範囲指定し、D2セルのフィルハンドルでずぃ~~~!っと下へコピーします。

そして、結果のF2セルは
=IF(COUNT($D$2:$D$100)<ROW(A1),"",SMALL($D$2:$D$100,ROW(A1)))

G2セルは
=IF(COUNTIF($A$2:$B$100,$F2)<COLUMN(A1)+1,"",$F2)
としれG2セルを列方向にオートフィルでコピーします。

最後にF2~コピーした列2セルを範囲指定し、
最後の列のフィルハンドルで下へコピーすると
画像のような感じになります。
尚、数式はA列の100行目まで対応できるようにしています。

以上、長々と書きましたが参考になれば幸いです。
的外れなら読み流してくださいね。m(__)m

こんばんは!
外していたらごめんなさい。
B列にA列と同じ数値が複数ある場合も列方向に複数表示するようにしてみました。

↓の画像のように作業用の列を2列使わせてもらっています。

作業列C2セルに
=IF(COUNT($A$2:$B$100)<ROW(A1),"",SMALL($A$2:$B$100,ROW(A1)))
D2セルに
=IF(OR(C2="",COUNTIF($C$2:C2,C2)<>1),"",C2)
として、C2・D2セルを範囲指定し、D2セルのフィルハンドルでずぃ~~~!っと下へコピーします。

そして、結果のF2セルは
=IF(COUNT($D$2:$D$100)<ROW(A1),"",SMALL($D$2:$D...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング