VBA除以一个值,然后显示相对于divison的值

Xar*_*eyo 2 excel vba

我试图找出最干净的显示方式,例如,初始值表示300为,x而关键路径则表示1.5y.这两个值都可以通过工作表上的输入进行更改.

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

正如我之前所提到的,x并且y可以改变,比方说,如果y2,a填充150b填充150.而如果y1那么只有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
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.感谢您的时间.Y.

K_B*_*K_B 5

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

Dim a, b, x, y As Double
Run Code Online (Sandbox Code Playgroud)

变为:

Dim a As Double, b As Double, x As Double, y As Double
Run Code Online (Sandbox Code Playgroud)

或者(这是我更喜欢的):

Dim a As Double
Dim b As Double
Dim x As Double
Dim y As Double
Run Code Online (Sandbox Code Playgroud)

其次,如果a和b仅用于确定范围宽度,则它们优选地不是浮点类型.而是使用Integer(2 ^ 15以下)或Long:

Dim a As Integer
Dim b As Integer
Dim x As Double
Dim y As Double
Run Code Online (Sandbox Code Playgroud)

然后你对a和b的值赋值不能保持它们现在的方式,但应该读取如下内容:

a = Int(x / y)
b = Int(x - a)
Run Code Online (Sandbox Code Playgroud)

那么我希望你的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"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么你从a和b中取1,所以如果真的添加了什么,请详细说明一般逻辑...

  • @Chris,请声明`Dim a,b,c为Integer`并查看Locals监视窗口中每个类型的Type.另请参阅:http://www.cpearson.com/excel/DeclaringVariables.aspx,向下滚动以注意使用一个Dim语句声明的变量 (2认同)