【问题标题】:Excel auto increment decimal value in column until max value has reached in columnExcel自动增加列中的十进制值,直到列中达到最大值
【发布时间】:2015-05-09 00:45:15
【问题描述】:

我正在寻找一种解决方案来自动增加列中的小数值,直到每列达到最大值。

我已经设法为列 A { =SUM(B3+0,1) }

制定了一个公式

通过将单元格 1 拖到我需要的最大值,但这不是很有效,因为每一列都有不同的最大值。

如下图所示:

Column A maximum required value 200
Column B maximum required value 400
Column C maximum required value 800

     |   A   |   B   |   C   | 
---------------------------------
 #1  |  1,1  |  2,1  |  3,1  | -- mimimum value
 #2  |  200  |  400  |  800  | -- maximum value
---------------------------------
 #3  |  1,2  |  2,2  |  3,2  | -- incremented value minimum A$1 + 0,1 | B$1 +0,1 | C$1 + 0,1
 #4  |  1,3  |  2,3  |  3,3  | -- incremented value minimum A$3 + 0,1 | B$3 +0,1 | C$3 + 0,1
 #5  |  1,4  |  2,4  |  3,4  | -- incremented value minimum A$4 + 0,1 | B$4 +0,1 | C$4 + 0,1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  split
 #13 |  2,2  |  3,2  |  4,2  | -- incremented value minimum A$12 + 0,1 | B$12 +0,1 | C$12+ 0,1

某些列的行数 > 600。

我的问题是如何使用 VBA 脚本或其他 Excel 公式为每列填充 0,1 个十进制值?

Sub AddValue()
    Dim Rng As Range, A3 As Range
    Set Rng = Range("A3:A99999")
    For Each Al In Rng
        A3.Value = A3.Value + 0,1
    Next
End Sub

当excel增量值达到某个值时,我该如何停止它?

如果我可以通过任何高于最大值的方式填充每一列,我可以使用自定义过滤器“仅显示 x 和 xxx 之间的值”过滤掉每个列的值

变化

更新 1:我已使用 for 循环更新了帖子中的脚本。但是 0,1 不接受,我需要增加低于 A2 的单元格,直到 (A1) 中的最小值达到最大值 (A2)

更新 2:我现在使用的公式具有在触发最大值时返回 FALSE 的逻辑。

=IF(B2+0,1>B$1;FALSE;B2+0,1)

问题仍然是如何使用 VBA 填充行,例如“B3”到“B99999”| 'C3' 到 'C99999' | 'D4' 到 'D99999' 等在每个单元格中使用此公式递增。如果解决了,我可以触发过滤器来删除所有包含“FALSE”的行

【问题讨论】:

  • 您可能想了解for-loop
  • 谢谢,但是 vba 超出了我的舒适范围
  • 我已经按照您的建议使用 for 循环更新了我的帖子中的脚本,但是 0,1 不接受,我需要增加 A2 以下的单元格,直到 (A1) 中的最小值达到最大值 (A2)

标签: excel decimal increment


【解决方案1】:

最好使用第 1 行作为一行来保存该列的最大值

     |   A   |   B   |   C   | 
---------------------------------
 #1  |  200  |  400  |  800  | 
 #2  |  1,1  |  2,1  |  3,1  |
 #3  |formula|formula|formula|

然后使用以下公式

=IF(A2+0,1>A$1,A2,A2+0,1)
=IF(B2+0,1>B$1,B2,B2+0,1)
=IF(C2+0,1>B$1,C2,C2+0,1)

如果您不能使用第 1 行来存储这些,那么您将需要使用这些 3

=IF(A2+0,1>200,A2,A2+0,1)
=IF(B2+0,1>400,B2,B2+0,1)
=IF(C2+0,1>800,C2,C2+0,1)

【讨论】:

  • 您的解决方案可能是关键,但我已将其调整为 =IF(B2+0,1>B$1;FALSE;B2+0,1) -- ... 当我拖动它时公式一直到单元格 B20000 它不能正常工作,因为我希望它起作用,因为在它达到最大增量值“FALSE”后,它将再次从值 B2 开始解析,稍后一百行将再次解析 FALSE。等等。
  • 为什么改成false?你说你希望它停止注入,你没有说你不想要没有价值,请清楚
  • 是的,那是真的,我想我可以在没有 FALSE 语句的情况下使用您的公式,并在最后应用“删除重复项”过滤器以删除重复值。在列中使用 FALSE 语句,我认为应用“自定义过滤器”可能更容易......仍然很糟糕,我需要将公式一直复制到 600 列和 2000 行
  • 所以您根本不想要任何价值?将最小行放在最大行下方,然后使用 =IF(B3"",IF(B2+0,1>B$1,"",B2+0,1),"")
  • 我试用了你的 IF 语句。并且需要将“IF(B2”更改为“IF(B3”)。然后我将公式复制到整张纸上,这实际上对我有用。谢谢!=IF(B2"";IF(B2 +0,1>B$1;"";B2+0,1);"")
【解决方案2】:

如果我正确理解你想要什么,这里有一个 VBA 解决方案...

此子假设单元格 A1:C1 具有起始编号(例如 1.1,2.1,3.1),单元格 A2:C2 具有结束编号(例如 200,400,600)。该脚本将每个行项目增加 0.1,直到达到该特定列的结束编号。 Math.Round 是为了摆脱浮点舍入误差。

Sub Test()
    Dim i As Long
    Dim j As Long

    For i = 1 To 3
        Cells(3, i).Value = Cells(1, i).Value + 0.1

        j = 3

        Do
            Cells(j + 1, i).Value = Math.Round((Cells(j, i).Value + 0.1), 1)
            j = j + 1
        Loop While Cells(j, i).Value < Cells(2, i).Value
    Next
End Sub

【讨论】:

  • 我一定会调查的。这个脚本准备好了吗?我试了一下,第 6 行显示了 VBA 错误类型不匹配 - Cells(3, i).Value = Cells(1, i).Value + 0.1
  • 为我工作。单元格 A1:C2 中有数字吗?
  • 我再次检查了你的脚本,脚本工作正常。它永远增加:-D 不是我真正想要的。无论如何,没关系,我已经找到了一个公式的最终解决方案。感谢您检查此线程
  • 很高兴您找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2014-04-18
  • 2023-03-21
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多