【问题标题】:VBA loop / do untilVBA循环/直到
【发布时间】:2021-08-27 15:45:59
【问题描述】:

我正在尝试以非常特定的格式配置数据,以便将其上传到软件。

我有一个计数表,其中包含需要在我的上传模板表上输入的行数。 计数表上的值介于 3、5、7 和 9 之间。

如果 上的值为“3”,我希望我的 VBA 程序能够在 上传模板表上输入值 1、2、3(在 3 个单独的行上)计数表

如果计数表上的下一个值是“5”,我希望我的程序能够输入值 1、2、3、2、3(在上传表上的 5 个单独的行上)。

如果计数表上的值为“9”,我希望我的程序输入值 1、2、3、2、3、2、3、2、3(分别在 9行)等等。

前三个值将始终连续为 1、2、3,然后根据计数表上的值在 2 和 3 之间交替。

谁能帮帮我?

【问题讨论】:

  • 您遇到了什么具体问题?您至少应该能够开始并发布您遇到问题的代码。

标签: excel vba loops if-statement until-loop


【解决方案1】:

没有足够的细节来真正写任何东西。但这里有一个教程/示例,说明如何从单独的工作簿访问数据以及如何将值写入循环内的单元格。

您正在寻找的输出行 # 遵循模式 1,2,3,2,3,2,3... 的方程对于普通数学来说有点复杂,但可以通过使用布尔表达式作为方程的一部分在编程数学中完成。

Sub RowNumberer()
    Dim CountWB As Workbook
    Set CountWB = Workbooks("Your Count Sheet Workbook's Name (plus file extension)")
    
    Dim CountSheet As Worksheet
    Set CountSheet = CountWB.Worksheets("Your Count Sheet's Name")
    
    Dim CountSheetValue As Long
    CountSheetValue = CountSheet.Range("Cell Address of your Count result (3, 5, 7, 9)")
    
    Dim UploadWB As Workbook
    Set UploadWB = Workbooks("Your Upload Template Workbook's Name (plus file extension)")
    
    Dim OutputSheet As Worksheet
    Set OutputSheet = UploadWB.Sheets("The Name of the Sheet you want to number the rows on")
    
    Dim i As Long
    For i = 1 To CountSheetValue
        OutputSheet.Cells(i, 1) = i Mod 2 - 2 * (i > 1)
    Next i
End Sub

解释公式:i Mod 2 - 2 * (i > 1)

i Mod 2 正在获取迭代值 i 并在除以 2 后检索余数。这在 1 和 0 之间交替。

我们只需要+2 就可以将其从1 and 0 移动到3 and 2。但我们只希望+2第一个数字之后,因为我们希望第一个数字是 1。

所以我添加了布尔表达式(i > 1),当 False 时为 0,当 True 时为 -1。我不知道为什么在 VBA 中 True = -1。所以当i = 1+2i > 1 时,术语- 2 * (i > 1) 为0。

【讨论】:

  • 作为一个思想实验,得到这种模式的常规数学方程是2.5 - 0.5 * (-1) ^ x - 2 * 0 ^ (x - 1) As { x ∈ ℤ ∣ x > 0 }。当x=1
  • 非常感谢!这正是我想要它做的,现在我只需要将它循环到计数表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2017-06-09
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多