找回密码
 立即注册
搜索
楼主: 丞哥朱爸

如何快速整理发票数据

33
回复
1897
查看
[复制链接]

0

主题

2

帖子

-2

幻币

东方不败

积分
-2
2021-10-30 16:23:01 显示全部楼层
04fbcdaa99c680de8d2e1d833cd3929d.png
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

4

帖子

-2

幻币

东方不败

积分
-3
2021-11-2 14:43:58 显示全部楼层
Sub 数据整理()
Dim ar As Variant, cr As Variant
Dim i As Long, r As Long, rs As Long
Dim br(), brr()
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
With Sheets("发票")
  rs = .Cells(Rows.Count, 1).End(xlUp).Row
  ar = .Range("a1:n" & rs)
End With
For i = 2 To UBound(ar)
  If Trim(ar(i, 8)) <> "" And Trim(ar(i, 14)) = "是" Then
  d(Trim(ar(i, 8))) = d(Trim(ar(i, 8))) + 1
  End If
Next i
ReDim brr(1 To d.Count, 1 To 7)
For Each k In d.keys
  n = 0
  je = 0: se = 0: js = 0
  zf = "": y = 0: dc.RemoveAll
  xh = "": zff = ""
  ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
  For i = 2 To UBound(ar)
  If Trim(ar(i, 8)) = k And Trim(ar(i, 14)) = "是" Then
    n = n + 1
    je = je + ar(i, 9)
    se = se + ar(i, 10)
    js = js + ar(i, 11)
    For j = 1 To UBound(ar, 2)
      br(n, j) = ar(i, j)
    Next j
  End If
  Next i
  For i = 1 To n
  For s = i + 1 To n
    If br(i, 3) > br(s, 3) Then
      For j = 1 To UBound(br, 2)
      kk = br(i, j)
      br(i, j) = br(s, j)
      br(s, j) = kk
      Next j
    End If
  Next s
  Next i
  For i = 1 To n
  For s = i + 1 To n
    If Val(br(i, 3)) + 1 = Val(br(s, 3)) Then
      y = y + 1
      If y = 1 Then
      zf = br(i, 3) & "," & br(s, 3)
      dc(br(i, 3)) = ""
      dc(br(s, 3)) = ""
      ElseIf y > 1 Then
      If Not dc.exists(br(i, 3)) And Not dc.exists(br(s, 3)) Then
        zf = zf & "," & br(i, 3) & "," & br(s, 3)
        dc(br(s, 3)) = ""
        dc(br(i, 3)) = ""
      ElseIf Not dc.exists(br(i, 3)) And dc.exists(br(s, 3)) Then
        zf = zf & "," & br(i, 3)
        dc(br(i, 3)) = ""
      ElseIf dc.exists(br(i, 3)) And Not dc.exists(br(s, 3)) Then
        zf = zf & "," & br(s, 3)
        dc(br(s, 3)) = ""
      End If
      End If
    End If
  Next s
  Next i
  If zf <> "" Then
  rr = Split(zf, ",")
  For i = 0 To UBound(rr) - 1
    If Val(rr(i)) + 1 <> Val(rr(i + 1)) Then
      xh = i
      Exit For
    End If
  Next i
  End If
  For i = 1 To n
  If Not dc.exists(br(i, 3)) Then
    If zff = "" Then
      zff = br(i, 3)
    Else
      zff = zff & "," & br(i, 3)
    End If
  End If
  Next i
  m = m + 1
  If zf <> "" Then
  If xh = "" Then
    brr(m, 4) = "发票代码" & br(1, 2) & "," & rr(0) & "至" & rr(UBound(rr)) & "," & zff
  ElseIf xh <> "" Then
    brr(m, 4) = "发票代码" & br(1, 2) & "," & rr(0) & "至" & rr(xh) & "," & rr(xh + 1) & "至" & rr(UBound(rr)) & "," & zff
  End If
  ElseIf zf = "" Then
  brr(m, 4) = "发票代码" & br(1, 2) & "," & zff
  End If
  brr(m, 1) = k
  brr(m, 2) = br(1, 1)
  brr(m, 3) = d(k)
  brr(m, 5) = je
  brr(m, 6) = se
  brr(m, 7) = js
Next k
With Sheets("输出样式")
  .[a1].CurrentRegion.Offset(1) = Empty
  .[a2].Resize(m, UBound(brr, 2)) = brr
End With
MsgBox "ok!"
End Sub
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

2

帖子

-1

幻币

东方不败

积分
-3
2021-11-9 00:50:16 显示全部楼层
工作底稿(样式).rar (28.63 KB, 下载次数: 15)
PPT学习论坛
回复 支持 反对

使用道具 举报

2

主题

9

帖子

4

幻币

初入江湖

Rank: 1

积分
17
2021-11-10 09:29:23 显示全部楼层
PQ(EXCEL2016及以上自带)解法
使用方法:发票那张表数据变化后,在结果表(输出样式表的第20-26行)数据上点击右键,选择刷新
工作底稿(样式).zip (23.19 KB, 下载次数: 56)
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

2

帖子

-2

幻币

东方不败

积分
-5
2021-11-16 20:38:21 显示全部楼层
代码有缺陷,发票表第5行是8438639,不是8438629,而你的结果是发票号码08438626至08438631
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1

幻币

初入江湖

Rank: 1

积分
7
2021-11-19 20:14:20 显示全部楼层
PQ确实厉害。。。怎么学啊,看着好复杂
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

4

帖子

-1

幻币

东方不败

积分
-7
2021-11-22 02:03:13 显示全部楼层
工作底稿(样式)发票号码连续显示起至_基础vba数据透视表.rar (35.99 KB, 下载次数: 24)
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

幻币

初入江湖

Rank: 1

积分
0
2021-11-22 11:40:52 显示全部楼层
按“发票代码”分组,将连续的“发票号码”整合,单独的“发票号码”则单独列示
发票号码08438634至08438637
这种,要计算机完全适应人,要自动化比较难
PPT学习论坛
回复 支持 反对

使用道具 举报

2

主题

10

帖子

4

幻币

初入江湖

Rank: 1

积分
18
2021-11-28 00:19:58 显示全部楼层
这个问题不简单,先留个记号吧
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

幻币

初入江湖

Rank: 1

积分
0
2021-11-28 14:15:38 显示全部楼层
按“发票代码”分组,将连续的“发票号码”整合,单独的“发票号码”则单独列示
发票号码08438634至08438637
这种,要计算机完全适应人,要自动化比较难
PPT学习论坛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册