Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA除以一个值,然后显示与除数相关的值_Excel_Vba - Fatal编程技术网

Excel VBA除以一个值,然后显示与除数相关的值

Excel VBA除以一个值,然后显示与除数相关的值,excel,vba,Excel,Vba,我试图找出最清晰的方式来显示,例如,初始值表示为300asx,关键路径表示为1.5asy。这两个值都可以通过图纸上的输入进行更改 连同这些值,我们有一个a和b资源。在这种情况下,a将填充一行中的200单元格,b将填充100 正如我之前提到的,x和y可以改变,比如说,如果y是2,a填充150和b填充150。如果y为1,则只有a填充300 目前我正在使用If语句,但我觉得这很混乱,可能会导致无休止的代码,以涵盖所有可能的结果,我需要一个更好的解决方案 下面是一个我目前正在实现的简单化示例: Priv

我试图找出最清晰的方式来显示,例如,初始值表示为
300
as
x
,关键路径表示为
1.5
as
y
。这两个值都可以通过图纸上的输入进行更改

连同这些值,我们有一个
a
b
资源。在这种情况下,
a
将填充一行中的
200
单元格,
b
将填充
100

正如我之前提到的,
x
y
可以改变,比如说,如果
y
2
a
填充
150
b
填充
150
。如果
y
1
,则只有
a
填充
300

目前我正在使用If语句,但我觉得这很混乱,可能会导致无休止的代码,以涵盖所有可能的结果,我需要一个更好的解决方案

下面是一个我目前正在实现的简单化示例:

Private Sub Example()

    Dim ActiveWB As Worksheet
    Set ActiveWB = ActiveWorkbook.Sheets("Sheet1")
    Dim cell As Range
    Dim a, b, x, y As Double

    x = ActiveWB.Range("A1").Value
    y = ActiveWB.Range("A2").Value
    a = x / y
    b = x - a

        For Each cell In ActiveWB.Range(Cells(3, 1), Cells(3, a))

            If (cell.Column >= 0) And (cell.Column <> x) Then

                If (y = 1) And (a > 0) Then
                   cell.Value = "a"
                    a = a - 1

                ElseIf (y > 1) And (y < 2) And (a > 0) Then
                   cell.Value = "a"
                   a = a - 1
                   If (b > 0) Then
                        cell.Offset(1, 0).Value = "b"
                        b = b - 1
                   End If

               ElseIf (y >= 2) And (y < 2.5) And (a > 0) Then
                   cell.Value = "a"
                   a = a - 1
                   If (b > 0) Then
                        cell.Offset(1, 0).Value = "b"
                        b = b - 1
                   End If

                '..... and so on......

                End If

            End If

        Next cell

End Sub
Private子示例()
将ActiveWB设置为工作表
设置ActiveWB=ActiveWorkbook.Sheets(“Sheet1”)
暗淡单元格作为范围
尺寸a、b、x、y为双精度
x=有效WB.范围(“A1”).值
y=有效WB.范围(“A2”).值
a=x/y
b=x-a
对于ActiveWB.范围内的每个单元格(单元格(3,1),单元格(3,a))
如果(cell.Column>=0)和(cell.Column x),则
如果(y=1)和(a>0),则
cell.Value=“a”
a=a-1
ElseIf(y>1)和(y<2)以及(a>0)则
cell.Value=“a”
a=a-1
如果(b>0),则
单元格偏移量(1,0).Value=“b”
b=b-1
如果结束
ElseIf(y>=2)和(y<2.5)以及(a>0)则
cell.Value=“a”
a=a-1
如果(b>0),则
单元格偏移量(1,0).Value=“b”
b=b-1
如果结束
'..... 等等
如果结束
如果结束
下一个细胞
端接头

如有任何建议,将不胜感激。谢谢你抽出时间。Y.

我可能不完全理解其复杂性,但根据您共享的内容,您可以使用以下内容替换for循环以实现相同的结果:

ActiveWB.Range(Cells(3, 1), Cells(3, a)).Value = "a"
If b > 0 then
    ActiveWB.Range(Cells(4, 1), Cells(4, b)).Value = "b"
End If

首先应分别为每个变量声明类型:

Dim a, b, x, y As Double
变成:

Dim a As Double, b As Double, x As Double, y As Double
或者(这是我喜欢的):

,如果a和b仅用于确定范围宽度,则它们最好不是浮点类型。请使用整数(小于2^15)或长:

那么,您对a和b的赋值不能保持现在的状态,但应如下所示:

a = Int(x / y)
b = Int(x - a)
然后我希望您的x和y值在工作表中限制为值>0和x>y。如果没有,那么首先在脚本中测试它

现在是最后一个和您的原始问题),如果您愿意,可以为完整范围的单元格指定一个值:

If a > 0 Then Range(Cells(3, 1), Cells(3, a)).Value = "a"
If b > 0 Then Range(Cells(4, 1), Cells(4, b)).Value = "b"

我不明白你为什么从a和b中取1,所以如果这真的增加了一些东西,请详细说明一下一般逻辑…

我不明白你想实现什么_T@Chris说明或所需解决方案有问题吗?为什么要测试
y
值?似乎每个单元格的默认值都是“a”,第二列中的第一个
b
单元格获得“b”@YaMo可以随意选择K_b的答案作为正确答案。我之前回答过,但库布的回答更有用。谢谢你的建议,这很有效。我觉得我的例子有点过于简单化了。但我很乐意接受这一点。“YAMO考虑当代码< b=0 < /代码> @ kyb时,我知道,这也可以被纠正,但我只是在复制他所陈述的行为。我决定不指出我建议更改的其他内容,这与您的回答不同。感谢您的指点和解释,我对VBA仍然很陌生+1@K_B它来自更复杂的逻辑原始代码。由于值在各节中循环,并且值被放置在与这些资源相关的位置。@Chris,请将
Dim a、b、c声明为整数
,并查看“本地人监视”窗口中每个值的类型。另请参见:,向下滚动以注意用一条Dim语句+1声明的变量,这肯定是一个更有用的答案。我还建议重命名
ActiveWB
,因为很容易错误地认为它应该是工作簿对象,而实际上它是工作表。
a = Int(x / y)
b = Int(x - a)
If a > 0 Then Range(Cells(3, 1), Cells(3, a)).Value = "a"
If b > 0 Then Range(Cells(4, 1), Cells(4, b)).Value = "b"