【问题标题】:EXCEL VBA Code to generate serial numbers from a range [closed]EXCEL VBA代码从一个范围内生成序列号[关闭]
【发布时间】:2017-01-22 07:07:09
【问题描述】:

enter image description here请我是 Vba 的新手。

  1. 我想要一个 VBA,它可以根据 A1 和 B2 中输入的数据生成序列号。结果应该在另一个工作表 A 列中。

  2. 当我在 A2 和 B2 中输入另一个范围时,序列号应该在第一个序列号结束的地方继续。

    内嵌图片

谢谢

【问题讨论】:

  • 我从这个网站获得了一个代码,该代码与我想要的很接近,但是每当我运行新的序列号时,旧的序列号都会不断重复。第二个代码“Sub sof20143262Serial_numbers()”
  • 你能展示一张你想要达到什么目标的图片吗?我只是不知道如何为您提供帮助..This is an answer 我是为对使用字符串构建序列号有疑问的人所做的,也许您可​​以对其进行定制以满足您的需求或进一步描述您可以使用它的哪些部分不能为你工作。
  • 它没有。我已经更新了我想要实现的屏幕截图。谢谢

标签: excel vba


【解决方案1】:

试试这个,让我知道它是否适合您。这将为您提供图片中显示的结果。

    Sub SerialCode()
    Dim ws As Worksheet
    Dim startOf As Long, endOf As Long, data 'startOf and endOf are Long for >5 digits.
    Dim lastRow As Long, currentRow As Long
    Dim dataRange As Range, c As Range

    Set ws = ThisWorkbook.Sheets(1)
    ws.Range("E2", ws.Cells(ws.Rows.Count, "E").End(xlUp)).Clear
    ws.Range("F2", ws.Cells(ws.Rows.Count, "F").End(xlUp)).Clear
    lastRow = 2
    Set dataRange = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))


    For Each c In dataRange
        If c.Value <> "" Then
            currentRow = c.Row
            startOf = CLng(ws.Range("A" & currentRow).Value)
            endOf = CLng(ws.Range("B" & currentRow).Value) + 1

            If endOf <> 1 And startOf < endOf Then 'This will stop Overflow errors from occuring accidently
                data = ws.Range("C" & currentRow).Value

                Do While startOf <> endOf
                    ws.Range("E" & lastRow).Value = startOf
                    ws.Range("F" & lastRow).Value = data
                    startOf = startOf + 1
                    lastRow = lastRow + 1
                Loop

            Else: MsgBox "Ending Serial Number missing or is less than starting Serial Number on row " _
                & c.Row, vbCritical, "Missing Data"
            End If
        End If
    Next c
End Sub

【讨论】:

  • 给出编译错误,第 6 行需要对象 "Set lastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row + 1"
  • @eka24 我修复了代码,在我的答案中尝试更新的代码。 (我现在在我的电脑前并且能够测试它)
  • 它运行并产生了结果,但旧范围的序列号不断重复。我希望代码避免运行已经运行的旧号码。例如,如果我有 11-13,它产生 11、12、13。当我输入另一个范围(如 101-103)时,它应该给出 11、12、13、101、102、103。但就代码而言,它给出 11, 12, 13, 11, 12, 13,101, 102, 103,重复已经生产的序列号。序列号是唯一的,不能重复运行。如果范围已经运行,它应该运行当前范围。感谢您迄今为止所做的努力,泰勒
  • @eka24 我不确定它会如何运行重复数字。For 循环只通过单元格一次,ws.Range("E2", ws.Cells(ws.Rows.Count, "F").End(xlUp)).Clear 行会在代码运行之前删除所有原始结果。它只重复第一个实例吗?我似乎无法重现你在我身边所说的内容..
  • 好吧,我将通过手动删除在运行新范围时重复的旧范围来管理它。非常感谢
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多