『A1からC50の中で同じ数字がない場合 D列に一列に書き出したいです』(わたしも初心者です) A1からC50の範囲に ランダムに整数が入っています。 この範囲には 同じ数字がいくつか入っているのですが 同じ数字がない値だけを D列に取り出したいです 例えば A1からC50の範囲の中に 3と4が二つ以上 5と10はひとつしかない場合、D列に 5 10 を取り出したいです。 < 使用 Excel:Excel2010、使用 OS:Windows2000 > ---- D1セル =IFERROR(AGGREGATE(15,6,A$1:C$50/((COUNTIF(A$1:C$50,A$1:C$50)=1)*(A$1:C$50<>"")),ROW(Z1)),"")     下にコピー <結果図> 行 _A_ _B_ _C_ _D_ 1 5 2 3 10 3 3 4 4 5 4 6 5 4 7 10 (半平太) 2016/04/25(月) 22:37 ---- ありがとうございます。 ごめんなさい。結果が出ないです。 最後のROW(Z1)はどこになりますか? (わたしも初心者です) 2016/04/25(月) 22:56 ---- >最後のROW(Z1)はどこになりますか? 1行目のセルなら、どこでもいいです。 (E1セルでも、AA1でも・・) (半平太) 2016/04/25(月) 23:07 ---- A列B列C列に同じように入力し、 D1に =IFERROR(AGGREGATE(15,6,A$1:C$50/((COUNTIF(A$1:C$50,A$1:C$50)=1)*(A$1:C$50<>"")),ROW(Z1)),"") 下にコピーしましたがD列は空白のままです。 (わたしも初心者です) 2016/04/25(月) 23:11 ---- >下にコピーしましたがD列は空白のままです。 そんなハズないんですけどねぇ・・・ 試しに、 1.新しいシートを1枚挿入してください。 2.当該シートの「シート見出し」を右クリックして、「コードの表示」を選ぶと  画面中央に白いエリアが表れますので、そこにマクロコードをコピぺしてください 3.貼り付け終わったらF5キーを押してください。(マクロが実行されます) 4.ALTキーを押しながら、F11キーを押してエクセルに戻ってください。   私が書いた<結果図>と同じになっていると思います。 Private Sub onlyOnce() Rem 生データのセルをまとめて処理 Range("A2,B3").Value = 3 Range("A4,B5:B6").Value = 4 Range("A6").Value = 5 Range("C7").Value = 10 Rem 数式セルをまとめて処理 Range("D1:D8").FormulaR1C1Local = "=IFERROR(AGGREGATE(15,6,R1C[-3]:R50C[-1]/((COUNTIF(R1C[-3]:R50C[-1],R1C[-3]:R50C[-1])=1)*(R1C[-3]:R50C[-1]<>"""")),ROW(RC[22])),"""")" End Sub (半平太) 2016/04/25(月) 23:27 ---- !!! D列が空白です! なぜでしょう・・・? (わたしも初心者です) 2016/04/25(月) 23:35 ---- ちなみに 新しいファイルを出してやりました。 AからCまでは 結果と同じになっています。 (わたしも初心者です) 2016/04/25(月) 23:39 ---- > 使用 Excel:Excel2010、使用 OS:Windows2000            ↑ 本当にエクセルのバージョンはXL2010ですか? (半平太) 2016/04/25(月) 23:45 私は、もう寝ますね。 ---- ありがとうございました。 バージョンが違うとだめですか? どちらにしても職場のは古いのでだめですねぇ… (わたしも初心者です) 2016/04/26(火) 00:46 ---- おはようございます。 AGGREGATE関数は2010から追加された関数です。 マクロで良ければ。 Sub test() Dim r Dim i As Long Range("D:D").ClearContents For Each r In Range("A1:C50") If WorksheetFunction.CountIf(Range("A1:C50"), r) = 1 Then i = i + 1 Cells(i, "D").Value = r End If Next r End Sub (sy) 2016/04/26(火) 07:02 ---- [[20160425093413]] 『A列とB列の数字をC列にまとめて整列』(ねい) 並べ替えが入っているが上記はどうだろうか? (ねむねむ) 2016/04/26(火) 07:03 ---- おはようございます。 syさん、ありがとうございます。 結果は希望通りでした。 実際にはこのように書き換えたのですが、 AX1 から書き込まれていくのを AX4 から書き出されるようにするにはどこを替えたらよいですか? Sub Macro1() Dim r Dim i As Long Range("AX4:AX5600").ClearContents For Each r In Range("AQ4:AU5600") If WorksheetFunction.CountIf(Range("AQ4:AU5600"), r) = 1 Then i = i + 1 Cells(i, "AX").Value = r End If Next r End Sub ねむねむさん、おはようございます。 ありがとうございます。 結果は理想通りになりますが、情報が多すぎるのかパソコンのスペックが悪いのか・・・固まりそうになってしまいます。 AQ4:AU5600 のデータを一度に消去したり書き換えたりする際にも時間がかかるのですが並べ替えが入っているからでしょうか?最終的には並べ替えもしたいので結果はとても理想的で残念です。 並べ替えが入っていない関数はありますか? (わたしも初心者です) 2016/04/26(火) 08:30 ---- syさん、さらに並べ替えもできますか? ワンプッシュで出来るのも理想ですが処理速度が遅くなるので並べ替えは手でやろうと思っていましたが マクロならすんなり処理してくれるでしょうか。 (わたしも初心者です) 2016/04/26(火) 08:45 ---- syさんごめんなさい! 並べ替えのマクロをその下に組み合わせてみたらできました! AX4から書き出す方法がわかりません。 (わたしも初心者です) 2016/04/26(火) 08:47 ---- リンク先の式で時間がかかる原因は並べ替えではなく配列計算のためなので並べ替えなしにしても計算時間は変わらない。 最初の質問のA1:C50の範囲程度であれば気にならないとは思うが、範囲が広くなればなるほど時間が かかるようになるので(並べ替え有り無しにかかわらず)マクロで進めたほうがいいとおもう。 (ねむねむ) 2016/04/26(火) 08:52 ---- ねむねむさんありがとうございます。 やはり時間がかかるのは仕方ないのですね。 私的にはとても理想的でした! 他の処理に利用できそうなので是非参考にさせていただきます。 (わたしも初心者です) 2016/04/26(火) 09:07 ---- >時間がかかる これ速いと思うけど... Sub test() Dim a, e Columns("ax").ClearContents a = [aq4:au5600].Value With CreateObject("Scripting.Dictionary") For Each e In a If e <> "" Then .Item(e) = .Item(e) + 1 Next For Each e In .keys If .Item(e) > 1 Then .Remove e Next If .Count Then e = .keys End With If IsArray(e) Then With [ax4].Resize(UBound(e) + 1) .Value = Application.Transpose(e) .Sort .Cells(1), 1 End With Else MsgBox "No unique value" End If End Sub (seiya) 2016/04/26(火) 09:35 ---- seiyaさんおはようございます ありがとうございます ものすごく早くて驚きです 理想的です! 大変助かりました。 参考にしマクロの勉強に励みます (わたしも初心者です) 2016/04/26(火) 09:44