Excel精英培训网

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

合并单元格的内容如何识别?

[复制链接]
发表于 2020-1-16 16:01 | 显示全部楼层 |阅读模式
本帖最后由 babaymum 于 2020-1-16 16:06 编辑

大家好,我有个汇总表格,从明细中进行汇总,有些单元格是需要合并的。
横向单元格合并后,可以识别。但纵向单元格合并后,无法识别起作用。请大家指导一下

求助.rar

111.82 KB, 下载次数: 1

 楼主| 发表于 2020-1-16 16:03 | 显示全部楼层
本帖最后由 babaymum 于 2020-1-16 16:07 编辑

附件刚才传输失败,再次上传。

求助.rar

111.82 KB, 下载次数: 4

回复

使用道具 举报

发表于 2020-1-16 16:19 | 显示全部楼层
本帖最后由 hfwufanhf2006 于 2020-1-16 16:21 编辑

看不懂你意思,我只能说:不管什么样的合并单元格,如果是用代码控制,都是对合并区域的左上角第一个单元格进行读写,剩余区域都不可读写。比如:c5:e10区域合并:
c5单元格可读写,c5的值就是整个c5:e10区域的值,其他剩下的区域,比如c6\c7\d5\d6...e9\e10都是不可写入数据的。如果试图用代码写入,会发生错误。
回复

使用道具 举报

发表于 2020-1-16 16:51 | 显示全部楼层
ertertert.gif
工作簿4.rar (13.37 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2020-1-17 11:09 | 显示全部楼层
hfwufanhf2006 发表于 2020-1-16 16:19
看不懂你意思,我只能说:不管什么样的合并单元格,如果是用代码控制,都是对合并区域的左上角第一个单元格 ...

谢谢关注
我的意思是,表格里,把【发货时间】合并了,把左边数据进行汇总时,只有第一行把数据汇总过来了。
其他行的数没有相应汇总出来。
我想请教大家帮我看看代码哪里出错了

回复

使用道具 举报

发表于 2020-1-17 18:43 | 显示全部楼层
babaymum 发表于 2020-1-17 11:09
谢谢关注
我的意思是,表格里,把【发货时间】合并了,把左边数据进行汇总时,只有第一行把数据汇总过来 ...

1、你代码虽然不长,但我看起来还是很晦涩。在你基础上,我按照自己的理解重写了代码:Range("i6:p37").ClearContents
Set d = CreateObject("Scripting.Dictionary")
arr = Range("a5", [f65536].End(3)).Value
Dim arr1(1 To 6)
Dim arr2
For i = 5 To [a100000].End(3).Row
  s = Cells(i, 2) & "," & Cells(i, 3)
  If d.exists(s) Then
     arr2 = d(s)
     s1 = Mid(Trim(Cells(i, 4)), 1, 1)
     arr2(s1) = arr2(s1) + Cells(i, 5)
     d(s) = arr2
  Else
     For k = 1 To 6
         arr1(k) = 0
     Next k
     s1 = Mid(Trim(Cells(i, 4)), 1, 1)
     arr1(s1) = Cells(i, 5)
     d(s) = arr1
  End If
Next

Dim brr
brr = d.Keys
hs = 5
For i = 0 To UBound(brr)
    s = Split(brr(i), ",")
    If (s(0) <> Cells(hs, "i")) Or (s(1) <> Cells(hs, "j")) Then
       hs = hs + 1
    End If
    Cells(hs, "i") = s(0)
    Cells(hs, "j") = s(1)
    arr2 = d(brr(i))
    Cells(hs, "k") = arr2(1)
    Cells(hs, "l") = arr2(2)
    Cells(hs, "m") = arr2(3)
    Cells(hs, "n") = arr2(4)
    Cells(hs, "o") = arr2(5)
    Cells(hs, "p") = arr2(6)
Next

2、基于你的数据,实际汇总结果并不涉及合并单元格,因为你的数据非常巧合:日期相同的名称也正好相同,所以不足以产生多行。汇总结果:
日期
门店
1号店
2号店
3号店
发货日期
名称
1档
2档
3档
4档
5档
6档
2020-01-06
白净套装
198.00
298.00
398.00
498.00
598.00
698.00
2020-01-07
滋润套装
98.00
198.00
298.00
398.00
498.00
598.00


3、我把你的数据稍微修改了下,以增加合并的多样性,修改后的数据:

系统时间发货时间
名称
档次
金额
门店
2020/1/6 11:37
2020-01-06白净套装1档
198.00
1号店
2020/1/6 11:37
2020-01-06白净套装12档
298.00
1号店
2020/1/6 11:37
2020-01-06白净套装3档
398.00
2号店
2020/1/6 11:37
2020-01-06白净套装4档
498.00
2号店
2020/1/6 11:37
2020-01-06白净套装5档
598.00
3号店
2020/1/6 11:37
2020-01-06白净套装6档
698.00
3号店
2020/1/7 11:37
2020-01-07滋润套装1档
98.00
1号店
2020/1/7 11:37
2020-01-07滋润套装22档
198.00
1号店
2020/1/7 11:37
2020-01-07滋润套装3档
298.00
2号店
2020/1/7 11:37
2020-01-07滋润套装4档
398.00
2号店
2020/1/7 11:37
2020-01-07滋润套装5档
498.00
3号店
2020/1/7 11:37
2020-01-07滋润套装6档
598.00
3号店


在第二行的名称后面增加了数字1,同样在第8行也增加了数字1,汇总结果变成了:
日期
门店
1号店
2号店
3号店
发货日期
名称
1档
2档
3档
4档
5档
6档
2020-01-06
白净套装
198.00
398.00
498.00
598.00
698.00
2020-01-06
白净套装1
298.00
2020-01-07
滋润套装
98.00
298.00
398.00
498.00
598.00
2020-01-07
滋润套装2
198.00



4、其实这类汇总正是数据透视的强项,自己写代码反而多余。关于数据透视,楼上爱疯版主已有详细说明,我只是列出结果(按修改后的数据):
求和项:金额
门店
档次
1号店1号店2号店2号店3号店3号店总计
发货时间名称1档2档3档4档5档6档
2020-01-06白净套装
198
398
498
598
698
2390
2020-01-06白净套装1
298
298
2020-01-07滋润套装
98
298
398
498
598
1890
2020-01-07滋润套装2
198
198
总计
296
496
696
896
1096
1296
4776
这个结果与代码汇总的结果相同;

5、关于合并单元格,在汇总过程中并没有考虑对合并单元格的处理,因为汇总结果有多少行是很难预料的,比如你原数据只有2行,不需要合并单元格。我修改后的数据结果有4行,按你要求就需要合并单元格。我的建议是,在汇总完成后,再用一个循环遍历一次汇总结果表,如果一个日期有多个行,再用代码对日期进行合并,如果一个日期只有一行就跳过。
我个人不建议合并单元格,数据透视的风格大致也是如此,所以这个最后的合并我也没写。你自己加一个就好了。

评分

参与人数 1学分 +2 收起 理由
babaymum + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-2-5 15:00 | 显示全部楼层
hfwufanhf2006 发表于 2020-1-17 18:43
1、你代码虽然不长,但我看起来还是很晦涩。在你基础上,我按照自己的理解重写了代码:Range("i6:p37").C ...

您说得很有道理,我忘记了这个时间到底有多少,都是未知的,如果合并就不是很有道理了。谢谢您的提醒。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:35 , Processed in 0.433117 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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