Excel精英培训网

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

[已解决]如何可以用VBA合并单元格,和拆分单元格。谢谢。

[复制链接]
发表于 2014-9-9 19:54 | 显示全部楼层 |阅读模式
如何可以用VBA合并单元格,和拆分单元格,如附件,A列,B列,F列,G列,进行合并,如“合并单元格表”。合并后也可以取消合并,如“取消合并单元格表”。谢谢。

合并与拆分.rar

2.45 KB, 下载次数: 10

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-9-9 20:16 | 显示全部楼层
以第二个工作表第一列为例
  1. Sub 合并单元格()
  2. Application.DisplayAlerts = False
  3. Dim i&, j&
  4. i = Sheets("取消合并单元格").Cells(Rows.Count, 1).End(3).Row
  5. For j = i To 5 Step -1
  6.     If Cells(j, 1) = Cells(j - 1, 1) Then
  7.        Range(Cells(j, 1), Cells(j - 1, 1)).Merge
  8.     End If
  9. Next
  10. Application.DisplayAlerts = True
  11. End Sub
  12. Sub 取消合并()
  13. Application.DisplayAlerts = False
  14. Dim i&, j&
  15. Dim StrMer As String, s&
  16. i = Sheets("取消合并单元格").Cells(Rows.Count, 1).End(3).Row
  17. With Sheets("取消合并单元格")
  18. For j = 5 To i
  19.     StrMer = .Cells(j, 1).Value
  20.     s = .Cells(j, 1).MergeArea.Count
  21.     .Cells(j, 1).UnMerge
  22.     .Range(.Cells(j, 1), .Cells(j + s - 1, 1)).Value = StrMer
  23.     j = j + s - 1
  24. Next
  25. End With
  26. Application.DisplayAlerts = True
  27. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
新一 + 3 很给力!谢谢老师

查看全部评分

回复

使用道具 举报

发表于 2014-9-9 20:16 | 显示全部楼层
ccc

合并与拆分.rar

13.08 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2014-9-9 20:26 | 显示全部楼层
这儿有肥猫 发表于 2014-9-9 20:16
ccc

谢谢老师。但代码运行后,只有A列有变化,其他三列没变化。
回复

使用道具 举报

发表于 2014-9-9 20:32 | 显示全部楼层
这儿有肥猫 发表于 2014-9-9 20:16
ccc

你可能要改下代码,你可能没考虑12行的现象

评分

参与人数 1 +6 收起 理由
这儿有肥猫 + 6 确实欠考虑了

查看全部评分

回复

使用道具 举报

发表于 2014-9-9 20:59 | 显示全部楼层
  1. Sub 合并单元格()
  2. Application.ScreenUpdating = False
  3. Application.DisplayAlerts = False
  4. Dim i&, j&, s&
  5. i = Sheets("取消合并单元格").Cells(Rows.Count, 3).End(3).Row
  6. For j = i To 5 Step -1
  7.     If Cells(j, 2) = Cells(j - 1, 2) Then
  8.        Range(Cells(j, 2), Cells(j - 1, 2)).Merge
  9.     End If
  10. Next


  11. Range("B5:B" & i).Copy
  12. Range("A5:A" & i).PasteSpecial Paste:=xlPasteFormats
  13. Application.CutCopyMode = False

  14. i = Sheets("取消合并单元格").Cells(Rows.Count, 8).End(3).Row

  15. For j = i To 5 Step -1
  16.     If Cells(j, 7) = Cells(j - 1, 7) Then
  17.        Range(Cells(j, 7), Cells(j - 1, 7)).Merge
  18.     End If
  19. Next


  20. Range("g5:g" & i).Copy
  21. Range("f5:f" & i).PasteSpecial Paste:=xlPasteFormats
  22. Application.CutCopyMode = False

  23. Application.DisplayAlerts = True
  24. Application.ScreenUpdating = True

  25. End Sub
  26. Sub 取消合并()
  27. Application.ScreenUpdating = False
  28. Application.DisplayAlerts = False
  29. Dim i&, j&, m&, StrMer, s&
  30. i = Sheets("取消合并单元格").Cells(Rows.Count, 3).End(3).Row
  31. With Sheets("取消合并单元格")
  32.      For m = 1 To 2
  33.          For j = 5 To i
  34.              StrMer = .Cells(j, m).Value
  35.              s = .Cells(j, m).MergeArea.Count
  36.             .Cells(j, m).UnMerge
  37.             .Range(.Cells(j, m), .Cells(j + s - 1, m)).Value = StrMer
  38.             j = j + s - 1
  39.          Next
  40.      Next
  41. End With

  42. i = Sheets("取消合并单元格").Cells(Rows.Count, 8).End(3).Row
  43. With Sheets("取消合并单元格")
  44.      For m = 6 To 7
  45.          For j = 5 To i
  46.              StrMer = .Cells(j, m).Value
  47.              s = .Cells(j, m).MergeArea.Count
  48.             .Cells(j, m).UnMerge
  49.             .Range(.Cells(j, m), .Cells(j + s - 1, m)).Value = StrMer
  50.             j = j + s - 1
  51.          Next
  52.      Next
  53. End With



  54. Application.DisplayAlerts = True
  55. Application.ScreenUpdating = True


  56. End Sub
复制代码
回复

使用道具 举报

发表于 2014-9-9 21:00 | 显示全部楼层    本楼为最佳答案   
   c

合并与拆分.rar

15.24 KB, 下载次数: 21

回复

使用道具 举报

 楼主| 发表于 2014-9-9 21:04 | 显示全部楼层
谢谢老师{:011:}
回复

使用道具 举报

发表于 2014-9-9 21:22 | 显示全部楼层
本帖最后由 dsmch 于 2014-9-9 21:35 编辑
  1. Private Sub CommandButton1_Click()
  2. If CommandButton1.Caption = "合并单元格" Then
  3.     Call hb
  4.     CommandButton1.Caption = "取消合并单元格"
  5. Else
  6.     Call qx
  7.     CommandButton1.Caption = "合并单元格"
  8. End If
  9. End Sub
  10. Sub hb()
  11. Application.ScreenUpdating = False
  12. Application.DisplayAlerts = False
  13. s = 5
  14. For i = 6 To Range("a65536").End(xlUp).Row + 1
  15.     zf = Cells(i, 1) & "," & Cells(i, 2)
  16.     zf2 = Cells(i - 1, 1) & "," & Cells(i - 1, 2)
  17.     If zf <> zf2 Then
  18.         Range(Cells(s, 1), Cells(i - 1, 1)).Merge
  19.         Range(Cells(s, 2), Cells(i - 1, 2)).Merge
  20.         s = i
  21.     End If
  22. Next
  23. Application.DisplayAlerts = True
  24. Application.ScreenUpdating = True
  25. End Sub
  26. Sub qx()
  27. Range("a1").CurrentRegion.UnMerge
  28. For i = 6 To Range("c65536").End(xlUp).Row
  29.     If Cells(i, 1) = "" Then Cells(i, 1) = Cells(i - 1, 1): Cells(i, 2) = Cells(i - 1, 2)
  30. Next
  31. End Sub
复制代码
回复

使用道具 举报

发表于 2014-9-9 21:24 | 显示全部楼层
本帖最后由 dsmch 于 2014-9-9 21:38 编辑

以a-b列为例

合并与拆分.zip

12.13 KB, 下载次数: 6

评分

参与人数 1 +3 收起 理由
新一 + 3 很给力!谢谢老师。

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 18:53 , Processed in 0.340960 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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