VBA-excel中函数的使用

VBA-excel中函数的使用,vba,excel,Vba,Excel,我已经在这个代码上工作了一段时间。正如您在代码行“With ws(2)”后看到的,存在一个if条件。现在,我有multiple来创建多个If条件,例如0.6、0.7、0.8等(每个这样的条件都应该使用不同的数据表){我正在为这些表发布excel文件链接,以便您能够了解}我可以使用一个函数或任何方法来实现这一点,而不需要我为每个新的条件反复编写代码吗 Private子命令按钮1\u单击() 尺寸x(1至9000)为双精度,y(1至9000)为双精度,x1为双精度,y1为双精度,x2为双精度,y2

我已经在这个代码上工作了一段时间。正如您在代码行“With ws(2)”后看到的,存在一个if条件。现在,我有multiple来创建多个If条件,例如0.6、0.7、0.8等(每个这样的条件都应该使用不同的数据表){我正在为这些表发布excel文件链接,以便您能够了解}我可以使用一个函数或任何方法来实现这一点,而不需要我为每个新的条件反复编写代码吗

Private子命令按钮1\u单击()
尺寸x(1至9000)为双精度,y(1至9000)为双精度,x1为双精度,y1为双精度,x2为双精度,y2为双精度,I1(1至9000)为双精度,I2(1至9000)为双精度,R1(1至9000)为双精度,R2(1至9000)为双精度,a为双精度,b为双精度,c为双精度,d为双精度,结果(1至9000)为双精度
Dim i为整数,j为整数,k为整数,p为整数,q为整数,r为整数,s为整数,t为整数
将ws变暗为图纸
设置ws=ActiveWorkbook.Sheets(数组(“Sheet1”、“PLP-1”、“PLP-2”))
对于t=0至120步骤20
对于k=1到9000
带ws(1)
I1(k)=.单元(k+2,13).值
I2(k)=.单元(k+2,14).值
以
带ws(2)
选择Case.Cells(6+t,1).Value
案例0.5:
r=0
s=0
案例0.6:
r=20
s=1
案例0.7:
r=40
s=2
案例0.8:
r=60
s=2
案例0.9:
r=80
s=3
案例1:
r=100
s=4
案例1.1:
r=120
s=5
结束选择
对于i=7到22

如果(.Cells(i+r,1).Value尝试使用
Select Case
语句,如下所示:

Dim iStart As Long, iEnd As long, jStart As Long, jEnd As Long
'...
With ws(2)
    Select Case .Cells(6, 1).Value
        Case 0.5:
            iStart = 7: iEnd = 22
            jStart = 2: jEnd = 7
        Case 0.6:
            'Same as above but substitute new values for iStart etc.
    End Select

    For i = iStart To iEnd
        'DO STUFF WITH i
    Next i

    For j = jStart To jEnd
        'DO STUFF WITH j
    Next j
End With
编辑:更新以反映评论中澄清的需求


有关
Select Case
的更深入解释和使用指南,请参见尝试使用
Select Case
语句,如下所示:

Dim iStart As Long, iEnd As long, jStart As Long, jEnd As Long
'...
With ws(2)
    Select Case .Cells(6, 1).Value
        Case 0.5:
            iStart = 7: iEnd = 22
            jStart = 2: jEnd = 7
        Case 0.6:
            'Same as above but substitute new values for iStart etc.
    End Select

    For i = iStart To iEnd
        'DO STUFF WITH i
    Next i

    For j = jStart To jEnd
        'DO STUFF WITH j
    Next j
End With
编辑:更新以反映评论中澄清的需求


有关
Select Case
的更深入解释和使用指南,请参见尝试使用
Select Case
语句,如下所示:

Dim iStart As Long, iEnd As long, jStart As Long, jEnd As Long
'...
With ws(2)
    Select Case .Cells(6, 1).Value
        Case 0.5:
            iStart = 7: iEnd = 22
            jStart = 2: jEnd = 7
        Case 0.6:
            'Same as above but substitute new values for iStart etc.
    End Select

    For i = iStart To iEnd
        'DO STUFF WITH i
    Next i

    For j = jStart To jEnd
        'DO STUFF WITH j
    Next j
End With
编辑:更新以反映评论中澄清的需求


有关
Select Case
的更深入解释和使用指南,请参见尝试使用
Select Case
语句,如下所示:

Dim iStart As Long, iEnd As long, jStart As Long, jEnd As Long
'...
With ws(2)
    Select Case .Cells(6, 1).Value
        Case 0.5:
            iStart = 7: iEnd = 22
            jStart = 2: jEnd = 7
        Case 0.6:
            'Same as above but substitute new values for iStart etc.
    End Select

    For i = iStart To iEnd
        'DO STUFF WITH i
    Next i

    For j = jStart To jEnd
        'DO STUFF WITH j
    Next j
End With
编辑:更新以反映评论中澄清的需求


关于循环,您可以在
Select Case
中找到更深入的解释和使用指南

关于循环,如果我理解您的代码,您需要循环每个“表”,但您的I和J指的是绝对地址。您想要的是I和J与所需的表相对

我只使用了2到7的值,但是如果表的大小不同,您当然可以通过代码来确定;或者甚至可以将它们读入一个变量数组并在该数组上进行测试(通常会更快)

下面的代码(伪代码)


关于你的循环,如果我理解你的代码,你需要在每个“表”中循环,但是你的I和J指的是绝对地址。你想要的是I和J相对于所需的表

我只使用了2到7的值,但是如果表的大小不同,您当然可以通过代码来确定;或者甚至可以将它们读入一个变量数组并在该数组上进行测试(通常会更快)

下面的代码(伪代码)


关于你的循环,如果我理解你的代码,你需要在每个“表”中循环,但是你的I和J指的是绝对地址。你想要的是I和J相对于所需的表

我只使用了2到7的值,但是如果表的大小不同,您当然可以通过代码来确定;或者甚至可以将它们读入一个变量数组并在该数组上进行测试(通常会更快)

下面的代码(伪代码)


关于你的循环,如果我理解你的代码,你需要在每个“表”中循环,但是你的I和J指的是绝对地址。你想要的是I和J相对于所需的表

我只使用了2到7的值,但是如果表的大小不同,您当然可以通过代码来确定;或者甚至可以将它们读入一个变量数组并在该数组上进行测试(通常会更快)

下面的代码(伪代码)



嘿,是的,我能做到。很抱歉,我忘了发布我的excel文件的链接(我现在有了)。正如你所看到的,不同的表在同一张表中的不同行范围内。因此,对于每个表,“I”和“j”的值在代码中会有变化。我给出的答案大部分只是一个示例,说明如何使用
选择案例
来实现您想要的效果。您显然必须根据具体情况进行调整。是的,我同意。但这并不能解决我缩短代码的目的。在选择案例中,我仍然需要键入整个代码r我正在进行的数学计算。如果数学计算在不同的源数据上执行完全相同的计算,那么解决方案将是编写自己的VBA函数,该函数将
范围
对象或引用范围的字符串作为参数。我将用一个示例更新我的答案。是的我会帮上大忙的。谢谢:)嘿,是的,我能做到。很抱歉,我忘了发布我的excel文件的链接(我现在已经有了)。如您所见,不同的表在同一张图纸中的不同行范围内。因此,对于每个表,代码中“i”和“j”的值都会发生变化。我给出的答案主要是一个示例,说明如何使用
Select Case
来实现您想要的效果。很明显,你必须根据个人情况进行调整。是的,我同意。但这并不能解决我缩短代码的目的。在Select案例中,我仍然需要输入我正在进行的数学计算的全部代码