[[20171205201826]] 『複数条件の最小値、最大値』(アマゾネス) ページの最後に飛ぶ

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

 

『複数条件の最小値、最大値』(アマゾネス)

 下記の表から、Sheet2の温度2の最小値と最大値をSheet1のE列、F列に
 抽出したいです。

 条件は、Sheet1のサイズ範囲をSheet2の直径から
         Sheet1の機種は、Sheet2の機種から
         Sheet2からはG列、型番Sだけを。M列、温度1を200度以下
    です。
        最小値、最大値がない時には空白にしたいです。
    複雑なレイアウトで恐縮ですが、ご指導お願いします。

 Sheet1                            Sheet2

       C          D     E    F       B   G     H    M    N
 1  サイズ範囲     機種  MIN  MAX    機種  型番  直径 温度1 温度2
 2  4.01〜4.59   2号   61  63     2号  S  4.2  135   61
 3        3号  62   68     2号   S    4.5   250   65
 4        4号              2号   M    4.5   120   69
 5        5号              2号   S    4.4   160   63 
 6  4.60〜5.30   2号              3号   S    4.3   110   62
 7               3号                3号   S    4.1  102   68 
 8               4号    64   66   4号   S    4.7   160   64
 9               5号         4号   S    5.2   152   66   

< 使用 Excel:Excel2010、使用 OS:Windows8 >


Sheet2のH列でフィルターを掛けて
その状態でB列でフィルター掛けて
M列は DMAX関数で抽出
N列は MIN関数で抽出
コピペ 

サイズ 機種毎行えば出来そうですね 
(Q::) 2017/12/06(水) 09:13


Sub main()
    Dim c As Range, d As Range, size1 As Variant, size2 As Variant
    Sheets("Sheet1").Range("E2:F" & Rows.Count).ClearContents
    For Each c In Sheets("Sheet2").Range("B2:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
        If StrConv(c.Offset(, 5).Value, vbNarrow) = "S" And Val(c.Offset(, 11).Value) <= 200 Then
            For Each d In Sheets("Sheet1").Range("D2:D" & Rows.Count).SpecialCells(xlCellTypeConstants)
                If d.Offset(, -1).Value <> "" Then
                    size1 = Val(Split(d.Offset(, -1).Value, "〜")(0))
                    size2 = Val(Split(d.Offset(, -1).Value, "〜")(1))
                End If
                If c.Value = d.Value And Val(c.Offset(, 6).Value) >= size1 And Val(c.Offset(, 6).Value) <= size2 Then
                    If Val(c.Offset(, 12).Value) >= Val(d.Offset(, 2).Value) Then d.Offset(, 2).Value = Val(c.Offset(, 12).Value)
                    If d.Offset(, 1).Value = "" Then
                        d.Offset(, 1).Value = Val(c.Offset(, 12).Value)
                    Else
                        If Val(c.Offset(, 12).Value) <= Val(d.Offset(, 1).Value) Then d.Offset(, 1).Value = Val(c.Offset(, 12).Value)
                    End If
                    Exit For
                End If
           Next d
        End If
    Next c
End Sub
(mm) 2017/12/06(水) 09:24

 長ったらしい式になってしまいますが

 E2:=MIN(IF((Sheet2!H$2:H$101>=LEFT(INDEX(C$2:C$101,MATCH("ー",C$2:C2)),4)*1)*(Sheet2!H$2:H$101<=RIGHT(INDEX(C$2:C$101,MATCH("ー",C$2:C2)),4)*1)*(Sheet2!B$2:B$101=D2)*(Sheet2!G$2:G$101="S")*(Sheet2!M$2:M$101<=200),Sheet2!N$2:N$101))
 F2:=MAX(IF((Sheet2!H$2:H$101>=LEFT(INDEX(C$2:C$101,MATCH("ー",C$2:C2)),4)*1)*(Sheet2!H$2:H$101<=RIGHT(INDEX(C$2:C$101,MATCH("ー",C$2:C2)),4)*1)*(Sheet2!B$2:B$101=D2)*(Sheet2!G$2:G$101="S")*(Sheet2!M$2:M$101<=200),Sheet2!N$2:N$101))

 CtrlキーとShiftキーとEnterキーを同時押しして確定
 E2、F2ともセルの表示形式を0;;;にして下方向にコピー
(bi) 2017/12/06(水) 10:08

 Q::さん、mmさん、biさんありがとうございました。 
(アマゾネス) 2017/12/06(水) 22:30

コメント返信:

[ 一覧(最新更新順) ]


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