我试图找出最干净的显示方式,例如,初始值表示300为,x而关键路径则表示1.5为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
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.感谢您的时间.Y.
首先,应分别为每个变量声明类型:
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,所以如果真的添加了什么,请详细说明一般逻辑...