Excel精英培训网

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

我自己写的,分享自定义连字符函数,谢谢!

[复制链接]
发表于 2016-3-1 16:27 | 显示全部楼层 |阅读模式

所以请教一下有其他办法代替了,如有  Bug ,高手指点,谢谢!

版本二:自定义连字符函数版本二:可变动区域
  1. Option Explicit
  2. Function phonetic_and_text(quyu As Range)
  3. '可以用本代码实现 连字符  函数功能,实现 按照单元格区域 连接
  4.       Application.Volatile
  5.       Dim xunhuan_cell As Range
  6.       Dim zuhe
  7.       zuhe = ""
  8.       For Each xunhuan_cell In quyu
  9.               If Application.WorksheetFunction.IsNumber(xunhuan_cell) = True Then
  10.                       If 1 * xunhuan_cell < 1 Then
  11.                           zuhe = zuhe & "0" & xunhuan_cell
  12.                       Else
  13.                           zuhe = zuhe & xunhuan_cell
  14.                       End If
  15.                       '最最重要的一个知识:在VBA中,0.x类型的小数结果,返回时会自动去掉前导0,而成为.x结果。
  16.               Else
  17.                       zuhe = zuhe & xunhuan_cell
  18.               End If
  19.       Next
  20.       phonetic_and_text = zuhe
  21. End Function
复制代码
版本一:自定义连字符函数版本一:固定行数,列标
  1. Option Explicit

  2. Function phonetic_and_text(hangshu As Long, liebiao_first As String, liebiao_last As String)
  3. '可以用本代码实现 连字符  函数功能,实现 按照单元格区域 连接
  4.       Application.Volatile
  5.       
  6.       Dim xunhuan_lieshu
  7.       Dim lieshu_first
  8.       Dim lieshu_last
  9.       Dim zuhe
  10.       
  11.       '求取列数,起始 列标
  12.       If Len(UCase(liebiao_first)) = 1 Then lieshu_first = Asc(UCase(UCase(liebiao_first))) - 64 '确认 列表为 字母 A 到 Z
  13.       If Len(UCase(liebiao_first)) = 2 Then   '确认 列表为 字母 AA 到 ZZ
  14.              lieshu_first = (Asc(Mid(UCase(UCase(liebiao_first)), 1, 1)) - 64) * 26 + (Asc(Mid(UCase(UCase(liebiao_first)), 2, 1)) - 64) Mod 26 '确认 列表为 字母 AA 到 ZZ
  15.              If Len(UCase(liebiao_first)) = 2 And ((Asc(Mid(UCase(UCase(liebiao_first)), 2, 1)) - 64) Mod 26) = 0 Then lieshu_first = (Asc(Mid(UCase(UCase(liebiao_first)), 1, 1)) - 64) * 26 + 26
  16.       End If
  17.       If Len(UCase(liebiao_first)) = 3 Then   '确认 列表为 字母 AAA 到 XFD
  18.              lieshu_first = ((Asc(Mid(UCase(UCase(liebiao_first)), 1, 1)) - 65) Mod 26) * 676 + (((Asc(Mid(UCase(UCase(liebiao_first)), 2, 1)) - 64) Mod 26) + 26) * 26 + (Asc(Mid(UCase(UCase(liebiao_first)), 3, 1)) - 64) '确认 列表为 字母 AAA 到 XFD
  19.              If Len(UCase(liebiao_first)) = 3 And ((Asc(Mid(UCase(UCase(liebiao_first)), 2, 1)) - 64) Mod 26) = 0 Then lieshu_first = ((Asc(Mid(UCase(UCase(liebiao_first)), 1, 1)) - 65) Mod 26) * 676 + (26 + 26) * 26 + (Asc(Mid(UCase(UCase(liebiao_first)), 3, 1)) - 64) '确认 列表为 字母 AAA 到 XFD
  20.       End If
  21.       '求取列数,结束 列标
  22.       If Len(UCase(liebiao_last)) = 1 Then lieshu_last = Asc(UCase(UCase(liebiao_last))) - 64 '确认 列表为 字母 A 到 Z
  23.       If Len(UCase(liebiao_last)) = 2 Then   '确认 列表为 字母 AA 到 ZZ
  24.              lieshu_last = (Asc(Mid(UCase(UCase(liebiao_last)), 1, 1)) - 64) * 26 + (Asc(Mid(UCase(UCase(liebiao_last)), 2, 1)) - 64) Mod 26 '确认 列表为 字母 AA 到 ZZ
  25.              If Len(UCase(liebiao_last)) = 2 And ((Asc(Mid(UCase(UCase(liebiao_last)), 2, 1)) - 64) Mod 26) = 0 Then lieshu_last = (Asc(Mid(UCase(UCase(liebiao_last)), 1, 1)) - 64) * 26 + 26
  26.       End If
  27.       If Len(UCase(liebiao_last)) = 3 Then   '确认 列表为 字母 AAA 到 XFD
  28.              lieshu_last = ((Asc(Mid(UCase(UCase(liebiao_last)), 1, 1)) - 65) Mod 26) * 676 + (((Asc(Mid(UCase(UCase(liebiao_last)), 2, 1)) - 64) Mod 26) + 26) * 26 + (Asc(Mid(UCase(UCase(liebiao_last)), 3, 1)) - 64) '确认 列表为 字母 AAA 到 XFD
  29.              If Len(UCase(liebiao_last)) = 3 And ((Asc(Mid(UCase(UCase(liebiao_last)), 2, 1)) - 64) Mod 26) = 0 Then lieshu_last = ((Asc(Mid(UCase(UCase(liebiao_last)), 1, 1)) - 65) Mod 26) * 676 + (26 + 26) * 26 + (Asc(Mid(UCase(UCase(liebiao_last)), 3, 1)) - 64) '确认 列表为 字母 AAA 到 XFD
  30.       End If

  31.       zuhe = ""
  32.       
  33.       For xunhuan_lieshu = lieshu_first To lieshu_last
  34.               If Cells(hangshu, xunhuan_lieshu) <> "" Then
  35.                      If Application.WorksheetFunction.IsNumber(Cells(hangshu, xunhuan_lieshu)) = True Then
  36.                             If 1 * Cells(hangshu, xunhuan_lieshu) < 1 Then
  37.                                        zuhe = zuhe & "^0" & Cells(hangshu, xunhuan_lieshu)
  38.                             Else
  39.                                        zuhe = zuhe & "^" & Cells(hangshu, xunhuan_lieshu)
  40.                             End If
  41.                      Else
  42.                             zuhe = zuhe & "^" & Cells(hangshu, xunhuan_lieshu)
  43.                      End If
  44.               Else
  45.                      zuhe = zuhe
  46.               
  47.               End If
  48.       Next
  49.       phonetic_and_text = zuhe & "^"
  50. End Function
复制代码

自定义连字符函数版本二:可变动区域.zip

14.62 KB, 下载次数: 32

自定义连字符函数版本一:固定行数,列标.zip

21.02 KB, 下载次数: 10

评分

参与人数 1 +14 收起 理由
橘子红 + 14 来学习了

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-3-1 16:48 | 显示全部楼层
版本2可以简化一下
  1. Function phonetic_and_text(quyu As Range)
  2. '可以用本代码实现 连字符  函数功能,实现 按照单元格区域 连接
  3.       Application.Volatile
  4.       Dim x As Range, y$
  5.       For Each x In quyu
  6.         y = CStr(x)
  7.         If IsNumeric(y) And Left(y, 1) = "." Then y = "0" & y
  8.         phonetic_and_text = phonetic_and_text & y
  9.       Next
  10. End Function
复制代码

评分

参与人数 1 +14 收起 理由
橘子红 + 14 来学习了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-1 16:57 | 显示全部楼层
grf1973 发表于 2016-3-1 16:48
版本2可以简化一下

谢谢......................................
回复

使用道具 举报

发表于 2016-3-1 17:01 | 显示全部楼层
版本1可以简化一下:
  1. Function phonetic_and_text(hangshu As Long, liebiao_first As String, liebiao_last As String)
  2. '可以用本代码实现 连字符  函数功能,实现 按照单元格区域 连接
  3.       Application.Volatile
  4.       Dim x As Range, y$, zuhe$
  5.       For Each x In Range(Cells(hangshu, liebiao_first), Cells(hangshu, liebiao_last))
  6.           y = x
  7.           If Len(y) > 0 Then
  8.             If IsNumeric(y) And Left(y, 1) = "." Then y = "0" & y
  9.             zuhe = zuhe & "^" & y
  10.           End If
  11.       Next
  12.       phonetic_and_text = zuhe & "^"
  13. End Function
复制代码
回复

使用道具 举报

发表于 2016-3-1 17:04 | 显示全部楼层
原代码中 “.3"会自动改成"0.3",但"0.3"会自动改成”00.3“,我觉得这是不对的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 12:58 , Processed in 0.302811 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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