- ベストアンサー
Excel(エクセル)同じ値を重複なく抜き出す
4つのセルに数値が入っていて、 横のセルに値を重複なく、1セルに1つずつ抜き出したいです。 作業列は右側どこまで使っても構いません。 UNIQUE関数は利用できません。Excel2013 よろしくお願いします。 6_7_7_3 →6_7_3 7_7_8_7 →7_8 4_7_9_4 →4_7_9
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- m3_maki
- ベストアンサー率64% (296/460)
ワークシート関数は苦手なので VBA で。 Sub Sample() Dim Src_Rng As Range ' A列のデータ範囲 Dim rng As Range Dim i As Long Set Src_Rng = Range(Range("A2"), Cells(Rows.Count, "A").End(xlUp)) Src_Rng.Resize(, 4).Copy Range("F2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False Set rng = Range("F2").Resize(4) For i = 0 To Src_Rng.Rows.Count - 1 rng.Offset(, i).RemoveDuplicates Columns:=1, Header:=xlNo Next Range("F2").Resize(4, Src_Rng.Rows.Count).Copy Range("F2").Offset(, Src_Rng.Rows.Count).PasteSpecial Paste:= _ xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False Columns("F:F").Resize(, Src_Rng.Rows.Count).Delete Range("F2").Select End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 ついでに参考に記してみます。 重複のないセルだけデータを残す関数は割合に有名で簡単です(Countif関数以外の関数の組み合わせがないという点で。IF関数を使うのは、常識的で、関数の組み合わせのタイプに当たらないとする。) #2で重複データは空白セルにする関数は挙げた。 さて空白セルを詰めるのが、マル覚えしないと、自分ではすぐには、案出できないだろう。 https://excel-forest.net/2016/07/10/blank-musi/ データの空白セルを無視して上から順に詰めて表示させたい これの「列」データ版を挙げてみる。 A14:I14に、データがあるとする s ー d ー d f ー r p ーは空白セルを表すとする。 A16に =IFERROR(INDEX($A$14:$I$14,SMALL(IF($A$14:$I$14<>"",COLUMN($A$14:$I$14)),COLUMN(A14))),"") と式を入れて CSE(Shifキー、Ctrlキー、Enterキーを同時押しするもの)。 式をI列まで複写する。 A16:F16 s d d f r p この式は配列数式という、初学者にとって新しいタイプの仕組を使うのが難点。 VBAを使うほかでは、良い方法がないようだ。 応用。 この方法は、これで条件に合ったデータを抜き出す(詰めて)方法で、中間列(行)データを一旦使う(これを嫌がる質問者も多い)が、考えやすい一方法と思う。
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 同じ値が同行にあれば空白にする、と言う関数が記述が漏れていました。失礼。 =IF(COUNTIF($A2:A2,A2)=1,A2,"") これを横方向に式複写する。 それで 1 2 3 3 2 1 4 3 2 になる。ここから同行内の、空白セルを除く(左詰め)。これを操作でやったもの。
お礼
thank you.
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。補足について。 空白セルを省いて、左詰めする、セルを移動させるようなタイプの課題の関数は難しいから、#2の回答を紹介したのだ。 #1のご回答のようなのをすぐ思い浮べるレベルではないだろうと推測して、操作でやっているのだ。 エクセルの利用は、まず操作でできるなら、それを使う、それが難しい場合は、関数でも難しければVBAでやる。しかしVBAは質問者にはふさわしくないとみて、関数と操作を組み合わせて、すこしやさしくならないか考えたのだ。
お礼
ありがとうございます。
補足
ありがとうございます。 >F2:I4は後述する関数の結果(中間状態)です. とありますが、この中間状態へはどういった関数を使うのでしょうか。
- imogasi
- ベストアンサー率27% (4737/17069)
COUNTIF関数を有効利用することがキーになります。 VBAなどでやる方が考えやすいが、慣れないでしょうから。 既出の回答の、関数の回答は、普通のエクセル使いには、思いつくのが、難しいと思うので、第2の方法です。 例 データ A2:D4 と F2:I4 F2:I4は後述する関数の結果(中間状態)です. 1 2 3 3 1 2 3 3 2 1 2 3 2 1 4 4 3 2 4 3 2 ーーー ここで F2:I4 の範囲で空白セルを削除します。 下記解説の操作で。 https://www.moug.net/tech/exopr/0030089.html 不要な空白セルを一括で削除する その前にF2:I4のセルの関数式を除くため、F2:I4の範囲でコピーしー同じセルに、値貼り付けをします。このステップを省くと下記の該当にフィットしないので。 関数式があると、空白セルでないというみなしになる。 CTRL+G(ジャンプ)ーセル選択ー空白セル選択ー削除ー左詰め。 結果 1 2 3 3 2 1 4 3 2
お礼
ありがとうございます。 値貼り付けをして空白にしても、空白セルとはみなされないようで、さらに「すべてクリア」を選ぶと空白セルとみなされ、 >CTRL+G(ジャンプ)ーセル選択ー空白セル選択ー削除ー左詰め の手順で出来ました。
補足
F2:I4 の関数はどうなりますか。
お礼
ありがとうございます。 できました。