我有一个值表,这些值是在VBA代码后面的长计算的因子。为了提取正确的值,我在代码中使用了索引匹配函数。
然而,我不得不稍微修改一下代码,以便能够在值之间进行插值。
除非我的RoundUp值是0.3或0.8,负的和正的,否则代码工作正常。
当psi_up = 0.3时,即使在表中也会出现错误1004。
当psi_down = 0.3时,没有问题,索引匹配函数也不会导致问题。
这是我使用过的代码,也是我需要从中提取值的表:
尺寸alpha_0为双倍尺寸psi为双倍
psi_down尺寸为双倍尺寸psi_up尺寸为双倍
将alpha_down调整为双倍大小将alpha_up调整为双倍大小
变暗xp01为双倍变暗xp02为双倍变暗xp1为双倍变暗xp03为双倍变暗xp04为双倍变暗xp2为双倍
尺寸C1_0为双倍
If MyA = 0 And MyB = 0 Then
psi = 0
Else
psi = MyA / MyB
End If
If My0 >= Abs(MyB) Then
alpha_0 = MyB / My0
Else
alpha_0 = My0 / MyB
End If
'Parameter to Interpolate
alpha_down = WorksheetFunction.RoundDown(alpha_0, 1)
psi_down = WorksheetFunction.RoundDown(psi, 1)
alpha_up = WorksheetFunction.RoundUp(alpha_0, 1)
psi_up = WorksheetFunction.RoundUp(psi, 1)
If psi_up = 1 Then
psi_down = 0.9
End If
If psi = 1 Then
psi_down = 0.9
End If
If psi_down = psi_up Then
psi_up = psi_down + 0.1
End If
If alpha_0 = -1 Then
alpha_down = -0.9
End If
If alpha_down = alpha_up Then
alpha_up = alpha_down - 0.1
End If
If alpha_0 = -0 Then
alpha_0 = 0
End If
' My0 = 0
If My0 = 0 Then
xp01 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_0, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_down, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp02 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_0, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_up, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
C1_0 = xp01 + (xp02 - xp01) * ((psi - psi_down) / (psi_up - psi_down))
'If My0 >= abs(MyB)
ElseIf My0 >= Abs(MyB) Then
xp01 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I50:T61"), _
Application.WorksheetFunction.Match(alpha_down, Sheets("C1,0 & C2,0").Range("I50:I61"), 0), _
Application.WorksheetFunction.Match(psi_down, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp02 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I50:T61"), _
Application.WorksheetFunction.Match(alpha_down, Sheets("C1,0 & C2,0").Range("I50:I61"), 0), _
Application.WorksheetFunction.Match(psi_up, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp1 = xp01 + (xp02 - xp01) * ((psi - psi_down) / (psi_up - psi_down))
xp03 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I50:T61"), _
Application.WorksheetFunction.Match(alpha_up, Sheets("C1,0 & C2,0").Range("I50:I61"), 0), _
Application.WorksheetFunction.Match(psi_down, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp04 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I50:T61"), _
Application.WorksheetFunction.Match(alpha_up, Sheets("C1,0 & C2,0").Range("I50:I61"), 0), _
Application.WorksheetFunction.Match(psi_up, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp2 = xp03 + (xp04 - xp03) * ((psi - psi_down) / (psi_up - psi_down))
C1_0 = xp1 + (xp2 - xp1) * ((Abs(alpha_0) - Abs(alpha_down)) / ((Abs(alpha_up) - Abs(alpha_down))))
' abs(MyB) > My0
ElseIf My0 < Abs(MyB) Then
xp01 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_down, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_down, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp02 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_down, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_up, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp1 = xp01 + (xp02 - xp01) * ((psi - psi_down) / (psi_up - psi_down))
xp03 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_up, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_down, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp04 = _
WorksheetFunction.Index(Sheets("C1,0 & C2,0").Range("I61:T71"), _
Application.WorksheetFunction.Match(alpha_up, Sheets("C1,0 & C2,0").Range("I61:I71"), 0), _
Application.WorksheetFunction.Match(psi_up, Sheets("C1,0 & C2,0").Range("I50:T50"), 0))
xp2 = xp03 + (xp04 - xp03) * ((psi - psi_down) / (psi_up - psi_down))
C1_0 = xp1 + (xp2 - xp1) * ((Abs(alpha_0) - Abs(alpha_down)) / ((Abs(alpha_up) - Abs(alpha_down))))
Else
End If
enter image description hereenter image description here
我正在失去头发,试图解决这个问题,所以这是我第一次尝试在网上寻求帮助。
非常感谢你读到这篇文章,也许能帮我一把!!!
1条答案
按热度按时间0md85ypi1#
看起来您的范围对于行的搜索是不正确的,假设您的右上角单元格在I50中,整个Array表(包括轴)从I50:T71开始,您的行轴从I50:I71开始,您的列轴从I50:T50开始。
所以你的index index函数应该是这样的: