Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4028|回复: 12

[已解决]求助:上清宫主

[复制链接]
发表于 2014-2-6 18:46 | 显示全部楼层 |阅读模式
本帖最后由 ms967967 于 2014-2-22 11:00 编辑

上清宫主帮我做的VBA在实际使用过程中遇到到了问题,请帮助解决。问题如附件,您在百忙之中对我的帮助深表感谢。 汇总单元格内容.zip (12.58 KB, 下载次数: 25)
 楼主| 发表于 2014-2-19 21:36 | 显示全部楼层
当附件只换成例二后,VBA代码更换为下面的代码(增加了TEXT),显示有错误,请大侠们帮助修改

Sub test()
Dim ar(), br()
i% = Range("A3").End(xlDown).Row
If Cells(i, 1) = "" Then Exit Sub
ar = Range("a3:c" & i).Value
ReDim br(1 To i * 2, 1 To 4)
For i = 3 To 1 Step -2
    For i2% = 1 To UBound(ar)
        If stemp$ = ar(i2, i) Then
           br(r, 4) = br(r, 4) + 1
        Else
           r = r + 1
           br(r, 1) = Cells(i2 + 2, i).Comment.Text
           br(r, 2) = ar(i2, i)
           br(r, 3) = Left(br(r, 1), 2)
           br(r, 4) = 1
           If r > 1 Then br(r - 1, 1) = br(r - 1, 1) & "-" & Left(br(r - 1, 1), 3) & Text((Right(br(r - 1, 1), 2) + br(r - 1, 4) - 1), "00")
           stemp$ = ar(i2, i)
        End If
    Next
Next
If r > 1 Then
   br(r, 1) = br(r, 1) & "-" & Left(br(r, 1), 3) & Text((Right(br(r, 1), 2) + br(r, 4) - 1), "00")
   [a19].Resize(r, 4) = br
End If
End Sub
回复

使用道具 举报

 楼主| 发表于 2014-2-20 21:28 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-2-21 20:38 | 显示全部楼层
请大侠给设置TEXT函数
回复

使用道具 举报

发表于 2014-2-21 22:40 | 显示全部楼层
  1. Sub Macro1()
  2. Dim d, arr(1 To 20000, 1 To 4), i&, s&, j%, x$, pz$
  3. Set d = CreateObject("scripting.dictionary")
  4. For j = 1 To 3 Step 2
  5.     For i = 3 To 13
  6.         pz = Cells(i, j).Comment.Text
  7.         x = Cells(i, j) & "," & Left$(pz, 2)
  8.         If Not d.exists(x) Then
  9.             s = s + 1
  10.             d(x) = s
  11.             arr(s, 1) = pz
  12.             arr(s, 2) = Cells(i, j)
  13.             arr(s, 3) = Left(pz, 2)
  14.             arr(s, 4) = 1
  15.         Else
  16.             arr(d(x), 1) = arr(d(x), 1) & " " & pz
  17.             arr(d(x), 4) = arr(d(x), 4) + 1
  18.         End If
  19.     Next
  20. Next
  21. For i = 1 To s
  22.     y = Split(arr(i, 1))
  23.     If UBound(y) > 0 Then arr(i, 1) = y(0) & "-" & y(UBound(y))
  24. Next
  25. Range("f19").Resize(s, 4) = arr
  26. End Sub
复制代码
回复

使用道具 举报

发表于 2014-2-21 22:42 | 显示全部楼层
………………

汇总单元格内容.zip

15.11 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2014-2-22 07:22 | 显示全部楼层
dsmch 发表于 2014-2-21 22:42
………………

感谢你的支持,我在测试时还是发现了一个小问题。
例如一排机床的首尾两个单元格的内容一样;那么会出现,如下图
NE101-NE111
123456
NE
5
这里编号段出错了,而且5累加的结果,
请您再辛苦一下,帮帮忙了。
回复

使用道具 举报

发表于 2014-2-22 08:31 | 显示全部楼层
ms967967 发表于 2014-2-22 07:22
感谢你的支持,我在测试时还是发现了一个小问题。
例如一排机床的首尾两个单元格的内容一样;那么会出现 ...

用测试附件说明问题,列出正确结果方便修改代码
回复

使用道具 举报

 楼主| 发表于 2014-2-22 08:59 | 显示全部楼层
dsmch 发表于 2014-2-22 08:31
用测试附件说明问题,列出正确结果方便修改代码

汇总单元格内容.zip (19.58 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2014-2-22 10:45 | 显示全部楼层
  1. Sub Macro2()
  2. Dim rng As Range, arr(1 To 10000, 1 To 4)
  3. Dim i&, s&, x&, j%
  4. [k:n].ClearContents
  5. For j = 1 To 3 Step 2
  6.     Set rng = Cells(3, j)
  7.     x = Cells(65536, j).End(xlUp).Row + 1
  8.     For i = 4 To x
  9.         If Cells(i, j) <> rng Then
  10.             s = s + 1
  11.             pz = Cells(rng.Row, j).Comment.Text
  12.             pz2 = Cells(i - 1, j).Comment.Text
  13.             arr(s, 1) = pz & "-" & pz2
  14.             arr(s, 2) = rng
  15.             arr(s, 3) = Left$(pz, 2)
  16.             arr(s, 4) = i - rng.Row
  17.             Set rng = Cells(i, j)
  18.         End If
  19.     Next
  20.     Set rng = Nothing
  21. Next
  22. Range("k3").Resize(s, 4) = arr
  23. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-8 08:07 , Processed in 0.627689 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表