设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[OFFICE] excel超强合并多个区域的内容(支持内存数组)

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-7 01:32:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
excel自定义函数超强合并不连续选区内的单元格,代码如下,通过 =超强合并(分隔符,是否去重复,要合并的若干个选区)  来完成 ,比如要合并A1:B9,C20:E:54中的所有有值的单元格的内容,并且用逗号连接,可以这样写
=超强合并(“,”,0, A1:B9,C20:E:54)

如果所选区域中有重复值,只需要对重复值合并一次的话,把第二参数由0改为1就行了。
=超强合并(“,”,1, A1:B9,C20:E:54)

所选区域支持内存数组。

当要去重复的时候,大小写字母和半角圆角的都会被判定为不重复的项。

  1. Function 超强合并(sr As String, cf As Boolean, ParamArray args() As Variant) As Variant

  2.   
  3.    '第一参数为自定义的分隔符,要用双引号引起来或者是直接引用单元格。不可忽略,必须书写,否则出错。
  4.    
  5.    '第二参数为逻辑值,不可忽略,必须书写。如果为false,则会依次按先行后列的顺序合并所有不为空的单元格。第二参数如果为true,对于区域中有重复值的单元格,只会对重复值合并一次,区分大小字母写及半角圆角。
  6.    
  7.    '第三参数为要合并的区域,可以是多个区域,也可以是单个的值,还可以是多区域与多个单值的混合。当第三参数中含有内存数组时,使用的时候要用CTRL+ALT+ENTER三键按下。
  8.    
  9.    
  10.     Application.Volatile True
  11.    
  12.    
  13.     '-------------------------------------以下是允许有重复值合并----------------------------------------------------------
  14.    
  15.    


  16.    
  17.     If cf = False Then
  18.          
  19.           Dim tmptext As Variant
  20.           tmptext = ""
  21.          
  22.         For Each R In args

  23.                If IsArray(R) Then

  24.                    For Each rr In R

  25.                        If rr <> "" Then tmptext = tmptext & sr & rr
  26.                        
  27.                    Next rr

  28.                Else

  29.                    If R <> "" Then tmptext = tmptext & sr & R

  30.                End If

  31.          Next R


  32.                
  33.           超强合并 = Mid(tmptext, Len(sr) + 1)                        '去掉开头多余分隔符
  34.    
  35.    
  36.    
  37.    
  38.    '------------------------------以上允许有重复值合并-----------------------------------------------------------------
  39.    
  40.    
  41.     '------------------------------以下不允许有重复值合并-----------------------------------------------------------------


  42.     Else

  43.           Dim d
  44.           Set d = CreateObject("Scripting.Dictionary")
  45. '          d.CompareMode = vbTextCompare                       '即文本比较模式,不区分大小写以及半角圆角。
  46.          
  47.            d.CompareMode = vbBinaryCompare                     '即二进制比较,区分大小写以及半角圆角。

  48.           For Each R In args

  49.                If IsArray(R) Then

  50.                    For Each rr In R

  51.                        If rr <> "" Then d(CStr(rr)) = ""

  52.                    Next rr

  53.                Else

  54.                    If R <> "" Then d(CStr(R)) = ""


  55.                End If

  56.          Next R


  57.          超强合并 = Join(d.Keys, sr)

  58.          Set d = Nothing

  59.   End If

  60. End Function
复制代码




也可以直接下载下面的附件,放在 C:\Documents and Settings\Administrator\Application Data\Microsoft\AddIns这个文件夹里面。可能不同的系统不太一样,这个文件夹是office加载项文件存放的默认位置。可以在c盘搜索AddIns,得到该文件夹位置。
放在那儿后,直接在任何一个excel中把该文件加载上就可以了。
具体步骤是 在菜单栏选择  文件——选项——加载项——转到(G) ,然后就弹出了加载宏的对话框,然后把里面的 “超强多区域支持内存数组合并(终版)”前面打上勾,就可以了。

超强多区域支持内存数组合并: 超强多区域支持内存数组合并(终版).xla (32.5 KB, 下载次数: 218)





回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-5-5 02:44 , Processed in 0.199854 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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