• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1行複数列の中にある重複数字を削除する方法)

エクセルシートで1行複数列の中にある重複数字を削除する方法-質問

このQ&Aのポイント
  • エクセルシートA列~F列に1~31迄の数字が順不同に入っています。これをG列~L列に「重複数字は1つにして昇順に並べる」方法が知りたいです。
  • 質問者はエクセルシートのA列~F列に順不同に1~31までの数字が入っている状況で、「重複数字は1つにして昇順に並べる」方法を知りたいという質問をしています。
  • この質問では、エクセルシート内の1行複数列にある重複数字を削除し、昇順に並べる方法を求めています。

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

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

 まず、G1セルに次の関数を入力して下さい。 =IF(COUNT($A1:$F1),MIN($A1:$F1),"")  次に、H1セルに次の関数を入力して下さい。 =IF(G1="","",IF(G1=MAX($A1:$F1),"",SMALL($A1:$F1,COUNTIF($A1:$F1,"<="&G1)+1)))  次に、H1セルをコピーして、I1~L1の範囲に貼り付けて下さい。  次に、H1~L1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  これで、G列~L列に、重複部分を除いた数字が昇順に並べ替えた形で表示されます。

moguo4649
質問者

お礼

ご回答ありがとうございました。 教えて頂いた様に入力して 得たい結果がえられました。 ありがとうございました。

その他の回答 (4)

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

No.1です。 > For i = 1 To UsedRange.Rows.Count の部分でマクロが止まってしまうということですので・・・。 ※ 前回のコードはA列最終行に空白ばあった場合最終行の取得をA列で判断できないために あのようなコードにしてしまいました。 とりあえず > For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row に変更してみてください。 A列最終行までマクロが走ります。 (途中の行にA列に空白があっても構いません) ※ A列最終行が空白の場合は >For i = 1 To ActiveSheet.UsedRange.Rows.Count としてみてください。 後者は検証していませんので、うまく動かなかったらごめんなさいね。m(_ _)m

moguo4649
質問者

お礼

今度はうまく動きました。 ありがとうございました。

回答No.3

G1 =iferror(small($A1:$F1,small(index(rank($A1:$F1,$A1:$F1,1)+999*(countif(offset($A1,0,0,1,column($A1:$F1)),$A1:$F1)>1),),column(g1)-6)),"") G1 セルをコピーし、G1:L4 のセル範囲に貼り付け。 本当にこのような操作をする必要があるのか?という点を見直してみるのがお勧め。例えば行に並んでいるのを、行列を入れ替えてコピペすることで列に並べ直し、その列内で、昇順で並べ替えを行ってから重複を削るとかのほうが、ずっと簡単。

moguo4649
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおり行列を入れ替えて削除するのが簡単ですね。 今回はそのようなことをせずに並び替える方法が知りたく 質問させて頂きました。

noname#204879
noname#204879
回答No.2

添付図参照 Sheet2!A1: =IF(COUNTIF(Sheet1!$A1:A1,Sheet1!A1),IF(COUNTIF(Sheet1!$A1:A1,Sheet1!A1)>1,"",Sheet1!A1),"") Sheet1!G1: =IF(ISERROR(SMALL(Sheet2!$A1:$F1,COLUMN(A1))),"",SMALL(Sheet2!$A1:$F1,COLUMN(A1)))

moguo4649
質問者

補足

ご回答ありがとうございます。 また実行結果を添付いただきお手数をおかけしました。 添付図を見ましたが、シート1とシート2に分かれている意味がわかりませんでした。 添付図のシート1のA列~F列の内容がG列以降に反映されているので 私の質問の回答があった!と思いましたが、 シート2が登場してその役割が理解できませんでした。

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

こんばんは! またまたVBAになってしまいますが・・・ 前回同様、シートモジュールです。 Sub 重複削除() Dim i As Long, j As Long Application.ScreenUpdating = False Range("A:F").Copy Range("G1") For i = 1 To UsedRange.Rows.Count For j = Cells(i, Columns.Count).End(xlToLeft).Column To 7 Step -1 If WorksheetFunction.CountIf(Range(Cells(i, 7), Cells(i, j)), Cells(i, j)) > 1 Then Cells(i, j).Delete shift:=xlToLeft End If Next j Range(Cells(i, 7), Cells(i, 12)).Sort key1:=Cells(i, 7), order1:=xlAscending, _ Header:=xlNo, Orientation:=xlLeftToRight Next i Application.ScreenUpdating = True End Sub ※ 今回も1行目からデータがあるという前提です。m(_ _)m

moguo4649
質問者

補足

早速のご回答ありがとうございます。 早速やってみましたがマクロを実行すると”実行時エラー424”が出ます。 デバッグすると下記部分で止まっています。 > For i = 1 To UsedRange.Rows.Count 実行結果?としては、A列の内容がG列に入っていますが、 重複数字はそのまま重複しており、また昇順には並んでいません。 何が悪いのでしょうか?

関連するQ&A