红十祈祷 发表于 2021-10-9 15:10:00

发票号码展开


假设实际录入发票如上图所示
为了简化,对于连续票号

前几位票号相同的
利用-和/进行连接
现在要求展开所有票
单独票号的形式列示
结果如下

附件

大瓦国的向前走 发表于 2021-10-16 21:54:45

嗯,不错,继续保持这种简便的写法....录入人方便了.现在知道数据不好弄了.,,要不把当时录入的人又叫来处理你要的数据吧.

显像粒子 发表于 2021-10-20 11:31:03

扁他。。。。。。

追你跑断了腿 发表于 2021-10-31 06:51:27

PQ (Excel2016及以上自带) 解法

杨滨 发表于 2021-10-31 21:27:26

展开论坛挺常见的,也好处理。前两天遇到一个合并的,比较麻烦
模拟数据,还有两种不同长度的号码。尾号位数还有2位和3位。
幸好你没模拟,同一个单元格里,不同前缀的发票号。
公式太复杂了,估计得分步骤完成,写个代码给你吧,代码审核,先发个图

如幻似梦 发表于 2021-11-1 04:35:09

Sub Main()
Dim ar(), a, br(), b
Dim x1 As Variant, x2 As Variant
Dim s$, n&, i&
Rem 指定数据源b3:b7
ar = Range("b3:b7").Value
ReDim br(1 To 1)
For Each x1 In ar
a = Split(x1, "/")
s = Split(a(0), "-")(0)
For Each x2 In a
    If InStr(x2, "-") = 0 Then
      n = n + 1
      ReDim Preserve br(1 To n)
      If Len(x2) = Len(s) Then
      br(n) = x2
      Else
      br(n) = Left(s, Len(s) - Len(x2)) & x2
      End If
    Else
      b = Split(x2, "-")
      If Len(b(0)) < Len(s) Then
      b(0) = Left(s, Len(s) - Len(b(0))) & b(0)
      End If
      If Len(b(1)) < Len(s) Then
      b(1) = Left(s, Len(s) - Len(b(1))) & b(1)
      End If
      For i = CLng(b(0)) To CLng(b(1))
      n = n + 1
      ReDim Preserve br(1 To n)
      br(n) = Format(i, String(Len(s), "0"))
      Next
    End If
    s = br(n)
Next
Next
Rem 指定输出第一个单元格 H3
With Range("h3").Resize(n)
.NumberFormatLocal = "@"
.Value = Application.Transpose(br)
End With
End Sub

聂磊 发表于 2021-11-5 06:14:36

周一到电脑上看

张茗杰 发表于 2021-11-7 16:09:27

跟 大佬 们学习下。( VBA)

月亮星星 发表于 2021-11-14 18:26:05

有误差 对 【 / 】 【 - 】混排
实际中可能录入人并不能保持一定的规则

月光恋曲 发表于 2021-11-16 00:10:10


鼓捣半天,还是不会
哈哈哈
页: [1] 2 3 4
查看完整版本: 发票号码展开