快速提问。我正在尝试创建一个程序,该程序找到的值的第一个实例大于I8中坦克的最大体积。我想将I13:I80中Vol列中的音量与I8中的最大音量进行比较。然后我想要excel输出B13列中的相应Strap:B80作为消息框。所以在这种情况下会输出一个消息框,上面写着“墙的高度是16英寸”。因为B20是与第一个体积相对应的带子的值大于最大值。
Public Sub dimensionInput()
Dim wallWidth As Double 'Get Wall Width Input
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1)
If wallWidth = False Then
Call zeroFill
Exit Sub
Else
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth
End If
Dim wallLen As Variant 'Get Wall Length Input
wallLen = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1)
If wallLen = False Then
Call zeroFill
Exit Sub
Else
Application.Worksheets("Sheet1").Range("E3").Value = wallLen
End If
Dim arrayDia() As String
Dim diameter As Variant 'Get Diameter Input
diameter = Application.InputBox("Input Tank(s) Diameter Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Diameter", 1)
arrayDia() = Split(diameter, ",")
For i = LBound(arrayDia) To UBound(arrayDia)
Cells(6, i + 3).Value = arrayDia(i)
Next i
Dim arrayLen() As String
Dim length As Variant 'Get Lenth Input
length = Application.InputBox("Input Desired Length Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Length", 1)
arrayLen() = Split(length, ",")
For i = LBound(arrayLen) To UBound(arrayLen)
Cells(7, i + 3).Value = arrayLen(i)
Next i
'Dim arrayOrient() As String
'Dim orient As Variant 'Get Orient Input
'orient = Application.InputBox("Input Desired Orient", "Orient", H)
'arrayOrient() = Split(orient, ",")
'For i = LBound(arrayOrient) To UBound(arrayOrient)
' Cells(9, i + 3).Value = arrayOrient(i)
'Next i
Dim arrayOffset() As String
Dim offset As Variant 'Get Offset Input
offset = Application.InputBox("Input Desired Offset Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Offset", 0)
arrayOffset() = Split(offset, ",")
For i = LBound(arrayOffset) To UBound(arrayOffset)
Cells(10, i + 3).Value = arrayOffset(i)
Next i
End Sub
Public Sub zeroFill()
Application.Worksheets("Sheet1").Range("C6:H7").Value = "0"
'Application.Worksheets("Sheet1").Range("C9:H9").Value = "H"
Application.Worksheets("Sheet1").Range("C10:H10").Value = "0"
End Sub
答案 0 :(得分:1)
假设我们在 I3 到 I19 的列 I 中有值。将参考值放在单元格 K3 中。在 J3 中输入:
=IF(I3>$K$3,I3,"")
在 J4 中输入:
=IF(AND(I4>$K$3,COUNT($J$3:$J3)=0),I4,"")
并复制下来。最后在 L3 中输入:
=MAX(J:J)
(此方法避免使用数组公式)
答案 1 :(得分:1)
建议公式:
="The height of the wall is"&INDEX(B13:B80,MATCH(I8,I13:I80,1)+1)&""""
OP表示会对此有所解释。
在I8
范围内查找相关值(I13:I80
)。由于单个单元格需要结果(不涉及公式拖动),因此不需要锚点($
用于修复引用)。
每M $的第三个参数(此处1
):
找到小于或等于lookup_value的最大值。
所以给定872.9
(在I8中)'匹配'值794.4
是范围中的第七项(倒计时)。这还不够(我们正在寻找大于参考值的第一个实例),因此我们使用+1
逐步降低一行(因为数据按升序排序)。所以我们现在得到范围内相关行的索引(8)。这适用于:
INDEX(数组形式)
考虑范围(此处为B13:B801
)并从中选择n
条目的值(从范围顶部开始计数的row_number)。这里n = 8,这是16
。
对于消息框,需要比普通16
多一点,并且可以使用concatenation添加说明文字。
OP要求Inches
而不是"
,但是对于我来说,"
消息框似乎已经足够了,并且大写不合适。