プロが教える店舗&オフィスのセキュリティ対策術

Excelの使い方で質問です。
フィルタをかけて以下のように並び替え(同一のC列の値内でD列の数値を昇順)を行ったのですが、
C   D
2 261.22
2 444.27
2 469.27
2.1 259.16
2.1 294.18
2.3 260.23
2.3 261.22
2.3 337.11
・    ・
・    ・
この状態でC列の値の差が±0.1でかつD列の値の差が±0.1であるという条件を満たす行のみをピックアップ(してできればグループごとに色分けも)する方法はありますでしょうか?

大変困っています。よろしくお願いいたします。

A 回答 (10件)

こんにちわ。



>Excelの列が260列ほどしかないため
正確には256です。

>列と行を変換しない状態のままで、該当する行を色づけしたい。
ざっくり考えても数百万回検索する必要があるとおもうのですが・・・
そのままだとマクロしかないです。

たしか2000行程と書いてあったかとおもいますが、一度に全部チェックしなくても、分割してチェックすれば256列でもできると思うのですが?

いずれにしても、余りエクセルの関数向きではありませんね^^;
    • good
    • 0
この回答へのお礼

>一度に全部チェックしなくても、分割してチェックすれば256列でもできると思うのですが?

そうなんですが、その256列目付近のデータが分割した次のデータのグループに属する可能性が出てきたりしてややこしいので、やっぱり分割せずにそのままの状態で解析したいんですよね・・・

>ざっくり考えても数百万回検索する必要があるとおもうのですが・・・
そのままだとマクロしかないです。

>いずれにしても、余りエクセルの関数向きではありませんね^^;

なるほど、やはり難しいんですね(^^;色々と考えていただき、どうも有難うございました。

お礼日時:2009/05/18 11:54

何度も何度ももうしわけないですが、追加で・・・



ピボットテーブルの集計については、私の画像では合計をしようしていますが、それだとCとD両方が同じ値のデータが複数あるときに合計されてしまい、ほしい答えになりません。

フィールドの設定を「平均」、「最大」、「最小」のどれかにしてください。(今回の集計の場合はこの3個はどれも結果が同じになるはずなので、どれでもいいです。)
以上
    • good
    • 0
この回答へのお礼

okdeathさん、御親切な回答どうも有難うございます。

教えて頂いた方法で実行しようとしてみましたが、Excelの列が260列ほどしかないため、自分が処理しようとしているデータを全て並べることができませんでした。できれば列と行を変換しない状態のままで、該当する行を色づけしたいのですが、やっぱり難しいですよね。

いずれにせよ、御丁寧に回答して頂き、どうも有難うございました。

お礼日時:2009/05/16 12:43

すみません。

結果がおかしくなってました。
3度目の正直です。(ミスしててごめんね(TT))
数式を訂正してみました。

D4 : =IF(AND(E6-D6<=0.1,D6-C6<=0.1),11,IF(E6-D6<=0.1,1,IF(D6-C6<=0.1,10,0)))
B7 : =IF(AND(C8-C7<=0.1,C7-C6<=0.1),11,IF(C8-C7<=0.1,1,IF(C7-C6<=0.1,10,0)))
条件つき書式 : D7で「数式が」を選択し、=AND(D7>0,AND(D$4>0,$B7>0),OR(D$4=$B7,D$4=11,$B7=11))

で、下図のようになります。
こんどこそー><b
「Excelの複数の列の数値で差が範囲内で」の回答画像8
    • good
    • 0

ごめんなさいね。


画像では式が見えないようです。

D4 : =IF(OR(E6-D6<=0.1,D6-C6<=0.1),1,0)
B7 : =IF(OR(C8-C7<=0.1,C7-C6<=0.1),1,0)
条件つき書式 : D7で「数式が」を選択し、=AND(D7>0,AND(D$7,$B7))

です。
    • good
    • 0

こんにちわ。


回答を考えている間に他の人が答えているようですね。
まあ、私なりに回答します。
まずピボットテーブルで横にC列、縦にD列を入れ、データにD列を入れます。

C列とD列を昇順で並べ替えます。

ピボットテーブルをコピーし、値で貼り付けます。

下画像の「ダミーの数字を入力」のとおり、3箇所入力してください。
(999999は適当です。C又はD列の一番大きい数より大きい数字にしてください。)

下画像のIF文2箇所(D4とB7です。)を入力し、それぞれ横又は縦にデータのあるだけコピーペーストしてください。

D7のセルを選択し、書式→条件付書式を呼出し、画像のとおりの条件を入力してください。

D7をコピーし、対象データ全てを選択し、形式を選択し貼り付け(書式)をペーストしてください。

下画像のとおり、色がつきます。

こんな感じでどうでしょう?
「Excelの複数の列の数値で差が範囲内で」の回答画像6
    • good
    • 0

グループに別けるのは設問に無理がありますので、各行のE列以降に、条件に一致する行番号を表示するようなマクロを書いて見ました。


表がC1から始まる事にしてあります。
サンプルですので、変数宣言も結果を格納する配列だけですし、エラー処理も行って居ません。
ご参考までに

Sub sample()
 Dim chkGr() As Long
 lastRow = Range("C1").End(xlDown).Row
 For i = 1 To lastRow
  ReDim chkGr(0)
  colC = Range("C" & i)
  colD = Range("D" & i)
  count = 0
  For j = 1 To lastRow
   If (i <> j) * (Abs(colC - Range("C" & j)) < 0.1) * (Abs(colD - Range("D" & j)) < 0.1) Then
    ReDim Preserve chkGr(count)
    chkGr(count) = j
    count = count + 1
   End If
  Next j
  If count > 0 Then
   Range(Cells(i, 5), Cells(i, 4 + count)).Value = chkGr()
  End If
 Next i
End Sub
    • good
    • 0
この回答へのお礼

mt2008さん、ご回答有難うございます。

せっかく教えて頂いたのですが、あいにく当方エクセル初心者のため、レベルが高すぎます・・・(^^;

プログラミングなしで処理する方法などはないでしょうか?

いずれにせよ教えて頂きありがとうございました。

お礼日時:2009/05/16 12:51

》 大変困っています。

よろしくお願いいたします。

そういうことなら、「C列の値の差が±0.1でかつD列の値の差が±0.1であるという条件を満たす行」が一つもない例を示すのでなく、当該条件を満足する数値例および当該例の場合はどのセルとどのセルが着色されることを示してください。

この回答への補足

mike_gさん、コメントどうも有難うございます。例えば以下のようなデータがあった場合、

14.7256.19
22.5256.23
35.9257.2
48.6257.21
55.9257.22
66257.22
78.1257.22
88.1257.22
98.6257.23
108.1257.25
118.6258.2
128.1258.24
133.4259.08

3,5,6行目と7,8,10行目が着色されるということを想定しています。ただ、書き忘れていましたが、条件を満たす行が4,9行目のように2つしかない場合、処理しなくてはいけないデータの量からして該当する行が大量に出てきますので、可能なら該当する行が3つ以上のものだけをピックアップする方法があれば望ましいのですが・・・

また何かご不明の点がございましたら御連絡下さい。

補足日時:2009/05/16 13:07
    • good
    • 0

技術的にはともかく、論理的に困難だと思われます。



例として、
C列、D列とも0.05ずつ増加していく単純なデータ群があったとすると、順に3個ずつのデータがご質問の条件に合うグループを構成することになります。実は、3番目以降のデータはみな同様の条件になります。
データのindexで書くとして、(1,2,3)、(2,3,4)、(3,4,5)…といったグループが考えられますが、この場合3番目のデータは3種類の(異なる)グループに属することになるので、どのグループとしてピックアップすればよいのか不明ですし、所属するグループを一つに特定することはできないので、色分けも(3色の混合ならいざ知らず)できないのでは?
(±0.1の両端を含む含まないで若干変わりますが、主旨は違うところにあるので…)

実際のデータでは、そのようなことが起こることはまれなのかも知れませんが、論理的には一つのデータが何グループにでも所属可能なのでグループを特定することは無理ではないでしょうか?
上記のグループ(組み合わせ)を全てリストアップするとかなら不可能ではないと思いますが…

この回答への補足

fujillinさん、ご回答有難うございます。

>この場合3番目のデータは3種類の(異なる)グループに属することになるので、どのグループとしてピックアップすればよいのか不明ですし、所属するグループを一つに特定することはできないので、色分けも(3色の混合ならいざ知らず)できないのでは?

仰るとおりです。自分もこの点を忘れていました。

>上記のグループ(組み合わせ)を全てリストアップするとかなら不可能ではないと思いますが…

ではそのような方法はございますでしょうか?質問ばかりですみません。

補足日時:2009/05/14 16:56
    • good
    • 0

>C列の値の差が±0.1でかつD列の値の差が±0.1であるという条件


n行目とn+1行目の差がそれぞれ提示どおりという意味ならば
セルE2に =C3-C2
セルF2に =D3-D2
を入力し、範囲にコピー→オートフィルタで確認でいかが?

この回答への補足

Sinogiさん、ご回答頂き有難うございます。

私の理解不足かもしれませんが、教えて頂いた方法では、隣接する行の間のみしかチェックできないのではないでしょうか?

そうではなくて、隣接しない行も含めて全てのセルでスクリーニングをしたいのですがいかがでしょう?

補足日時:2009/05/14 16:48
    • good
    • 0

質問にあげた例の場合、どのようになって欲しいのでしょうか?

この回答への補足

nattocurryさん

とにかく上記の条件を満たす行だけが分かるように色つけができればいいのですが・・・なにぜチェックしなくてはならない行数が2000行ぐらいあるので、とても目視ではスクリーニングが困難なのです。

補足日時:2009/05/14 15:38
    • good
    • 0

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