[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索範囲内で5個のデータづつ判定させたいです。』(ちぃさん)
お世話になります。
検索範囲内のデータを5個のデータで範囲外があれば「否」と表示させたいのですが可能でしょうか?
今はB列内のデーター全てで「合否」表示がでるのですが、B列のデータ内で 5個のデータで「15」〜「20」以外の数値があれば「否」と表示させたいのです。
最下行の位置は特定できない状態ですがデータの始まりは「B1」となっていまして、データのある最下行までは空白はございません。
5個のデータづつというのはデーターが「B1」からありますので
「B1」から「B5」までで「15」〜「20」以外の数値があれば「否」
「B2」から「B6」までで「15」〜「20」以外の数値があれば「否」
「B3」から「B7」までで「15」〜「20」以外の数値があれば「否」
・ ・
このような感じでデータの 最下行までで 「15」〜「20」以外の数値がなければ「合」と表示させたいのです。
全く足りていなのですが現在は
=IF(AND(MIN(B:B)>=15,MAX(B:B)<=20),"合","否")
としています。
式をどのようにすればよいでしょうか。
どうぞ宜しくお願い致します。
< 使用 Excel:Excel2003、使用 OS:Windows7 >
C1 : =IF(OR(MIN(B1:B5)<15,MAX(B1:B5)>20),"否","合")
とか?
(β) 2015/10/30(金) 14:10
お世話になります。
本当にすみません。
質問内容が間違っていました。
sheet1
____A____ ____B____ 1 16 2 16 3 17 4 16 5 15 6 17 7 17 8 16 9 17 . . . . 500 18
sheet2
____A____ ____B____ 1 16 2 16 3 17 4 16 5 15 6 20 7 15 8 16 9 17 . . . . 500 18
最下行が特定できなので、仮にサンプルを最下行が500とします。
B列にある最下行までのデータが5個づつで区切った時に「15」〜「20」の間で値の差が「4」以内であればB列は「合」としたいです。
サンプルsheet1でしたら「合」
サンプルsheet2でしたら「否」
としたいです。
本当に申し訳ございません。
可能でしょうか?
どうぞ宜しくお願いいたします。
(ちぃさん) 2015/10/30(金) 15:20
値の差 というのは、何と何の差でしょうか? アップされたサンプルで説明願います。
また、B1〜B5、B2〜B6、B3〜B7、・・・ というのはなくなったのですか? まだ、要件として存在するのですか?
(β) 2015/10/30(金) 15:48
説明不足で申し訳ありません。
サンプルで500行までデータがあるとします。
B1〜B5、B2〜B6、B3〜B7は
>B列にある最下行までのデータが5個づつで区切った時に「15」〜「20」の間で値の差が「4」以内であればB列は「合」としたいです。
この部分になります。
sheet1
____A____ ____B____ 1 16 2 16 3 17 4 16 5 15 6 17 7 17 8 16 9 17 . . . . 500 18
こちらは
1行目から5行目→「15」〜「20」の間で値の差が「4」以内
2行目から6行目→「15」〜「20」の間で値の差が「4」以内
3行目から7行目→「15」〜「20」の間で値の差が「4」以内
4行目から8行目→「15」〜「20」の間で値の差が「4」以内
5行目から9行目→「15」〜「20」の間で値の差が「4」以内
.
.
.
〜行目から500行目→「15」〜「20」の間で値の差が「4」以内
判定は「合」
sheet2
____A____ ____B____ 1 16 2 16 3 17 4 16 5 15 6 20 7 15 8 16 9 17 . . . . 500 18
こちらは
1行目から5行目→「15」〜「20」の間で値の差が「4」以内
2行目から6行目→「15」〜「20」の間で値の差が「4」以上
3行目から7行目→「15」〜「20」の間で値の差が「4」以上
4行目から8行目→「15」〜「20」の間で値の差が「4」以上
5行目から9行目→「15」〜「20」の間で値の差が「4」以上
.
.
.
〜行目から500行目→「15」〜「20」の間で値の差が「4」以内
2行目から6行目→「15」〜「20」の間で値の差が「4」以上
3行目から7行目→「15」〜「20」の間で値の差が「4」以上
4行目から8行目→「15」〜「20」の間で値の差が「4」以上
5行目から9行目→「15」〜「20」の間で値の差が「4」以上
が「4」以上なので判定は「否」
このような感じで判定したのですが。
以上の説明でわかりにくい部分はありますでしょうか。
どうぞ宜しくお願いいたします。
(ちぃさん) 2015/10/30(金) 16:10
値の差 が 「何」と「何」の値の差なのかが、まだ説明からはわかりません。 想像で。
Sheet2 の B1〜B5 でいうと 16,16,17,16,15 この 5つのなかの最小値 15 と 最大値 17 との差は 2。なので4以内。 SHeet2 の B2〜B6 でいうと 16,17,16,15,20 この 5つのなかの最小値 15 と 最大値 20 との差は 5。なので4超。
これを、以降も、1行ずつ下にみていって、そこから始まる5つのセルの数値がどうかを判定し、 すべての5つのブロックの判定が 4以内なら 合、1つでも 4超があれば 否。
この全体に対する判定を1つだけ C1 に記載。
そういうことですか?
また、5つの数字の中で 14以下、あるいは 21以上のものがあれば、そのブロックは NGですか? たとえば 21,21,21,21,21 だった時。最大値と最小値の差は 0 ですが。
(β) 2015/10/30(金) 16:58
説明がうまくできておらずすみません。
(β) さんが想像しているままです。
可能でしょうか?
(ちぃさん) 2015/10/30(金) 18:06
仕様は理解しました。
ただ、βは、交通整理の意味で、確認をお願いしてきましたが、関数音痴ですので ご期待にはそえそうもありません。VBAでよければお手伝いできますが。
せいぜい、
D列を作業列として D1 : =IF(AND(MIN(B1:B5)>=15,MAX(B1:B5)<=20,MAX(B1:B5)-MIN(B1:B5)<=4),"","NG") これを、ずらっと下にフィルコピーしておいて、 C1 : =IF(COUNTA(D:D),"否","合")
でも、これでは、最後の4行、対象領域に空白せるがあって、そこは下限の 15 を下回りますので NGになり、結果として、C1 は常に 否 になってしまいます。
専門家さんからの回答をお待ちください。
(β) 2015/10/30(金) 19:59
とりあえず専門家さんからの回答がでるまでのつなぎでVBA。
20:19 UDFスタイルに変更。
C1 に =判定() と入れてください。
Function 判定() As String Dim c As Range Dim r As Range Dim ng As Boolean Dim mx As Long
Application.Volatile Set r = Range("B1", Range("B" & Rows.Count).End(xlUp)) mx = r.Cells(r.Count).Row
For Each c In r If c.Value < 15 Or c.Value > 20 Then ng = True Exit For Else With c.Resize(WorksheetFunction.Min(mx - c.Row + 1, 5)) If WorksheetFunction.Max(.Cells) - WorksheetFunction.Min(.Cells) > 4 Then ng = True Exit For End If End With End If Next
判定 = IIf(ng, "否", "合")
End Function
(β) 2015/10/30(金) 20:13
これはシートモジュールでいいのでしょうか?
シートモジュールにコピペし、
C1 に =判定() と入力すると 関数名が正しくないエラーが(#NAME?)と出ます。
無知で申し訳ありません。
どのようにご教授いただいたコードを使えばよいでしょうか。
どうか宜しくお願い致します。
(ちぃさん) 2015/10/30(金) 20:35
標準モジュールに書いてください。
(β) 2015/10/30(金) 20:39
関数音痴らしく、ちょっと勘違いしていたところがあります。 (β) 2015/10/30(金) 19:59 でアップした作業列方式で、一応結果が出ますね。 ただし、式は、
D1 : =IF(AND(MIN(B1:B5)>=15,MAX(B1:B5)<=20,MAX(B1:B5)-MIN(B1:B5)<=4),0,1) これを D500までフィルコピーしておいて
C1 : =IF(SUM(D:D)>0,"否","合")
アップしたVBAコードも勘違い内包していますが、これは、影響がないのでこのままでも。 (β) 2015/10/30(金) 20:59
いけました。
マクロも正しくうごきました。
マクロの方、仮に検索列を増やす場合はどこに追加すればいいでしょうか。
現在はB列のみ検索していますが、H列、J列と離れた場所の場合など。
後出し的で申し訳ありません。
もしよければ今一度お願いできないでしょうか。
どうぞ宜しくお願いいたします。
(ちぃさん) 2015/10/30(金) 21:20
検索列を増やす という意味は?
今、B列でやっているけど、それと同じことを 他の列でもやりたいということなら。 (ついでに、勘違いしていたところもちょこっと直してあります)
セル(どこでもいいです) =判定("B") とか =判定("I") とか、判定する数字が入った列を " " で囲んで指定。
Function 判定(col As String) As String Dim c As Range Dim r As Range Dim ng As Boolean
Application.Volatile Set r = Range(col & 1, Range(col & Rows.Count).End(xlUp))
For Each c In r If c.Value < 15 Or c.Value > 20 Then ng = True Exit For Else With c.Resize(5) If WorksheetFunction.Max(.Cells) - WorksheetFunction.Min(.Cells) > 4 Then ng = True Exit For End If End With End If Next
判定 = IIf(ng, "否", "合")
End Function
(β) 2015/10/30(金) 23:15
凄いです。
希望してた以上の回答内容です。
計算式よりシート内がスッキリしてていいと思いました。
ありがとうございました。
(ちぃさん) 2015/10/30(金) 23:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.