[[20160425214126]] 『A1からC50の中で同じ数字がない場合 D列に一浴x(わたしも初心者です) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.