|
所以请教一下有其他办法代替了,如有 Bug ,高手指点,谢谢!
版本二:自定义连字符函数版本二:可变动区域- Option Explicit
- Function phonetic_and_text(quyu As Range)
- '可以用本代码实现 连字符 函数功能,实现 按照单元格区域 连接
- Application.Volatile
- Dim xunhuan_cell As Range
- Dim zuhe
- zuhe = ""
- For Each xunhuan_cell In quyu
- If Application.WorksheetFunction.IsNumber(xunhuan_cell) = True Then
- If 1 * xunhuan_cell < 1 Then
- zuhe = zuhe & "0" & xunhuan_cell
- Else
- zuhe = zuhe & xunhuan_cell
- End If
- '最最重要的一个知识:在VBA中,0.x类型的小数结果,返回时会自动去掉前导0,而成为.x结果。
- Else
- zuhe = zuhe & xunhuan_cell
- End If
- Next
- phonetic_and_text = zuhe
- End Function
复制代码 版本一:自定义连字符函数版本一:固定行数,列标- Option Explicit
- Function phonetic_and_text(hangshu As Long, liebiao_first As String, liebiao_last As String)
- '可以用本代码实现 连字符 函数功能,实现 按照单元格区域 连接
- Application.Volatile
-
- Dim xunhuan_lieshu
- Dim lieshu_first
- Dim lieshu_last
- Dim zuhe
-
- '求取列数,起始 列标
- If Len(UCase(liebiao_first)) = 1 Then lieshu_first = Asc(UCase(UCase(liebiao_first))) - 64 '确认 列表为 字母 A 到 Z
- If Len(UCase(liebiao_first)) = 2 Then '确认 列表为 字母 AA 到 ZZ
- 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
- 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
- End If
- If Len(UCase(liebiao_first)) = 3 Then '确认 列表为 字母 AAA 到 XFD
- 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
- 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
- End If
- '求取列数,结束 列标
- If Len(UCase(liebiao_last)) = 1 Then lieshu_last = Asc(UCase(UCase(liebiao_last))) - 64 '确认 列表为 字母 A 到 Z
- If Len(UCase(liebiao_last)) = 2 Then '确认 列表为 字母 AA 到 ZZ
- 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
- 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
- End If
- If Len(UCase(liebiao_last)) = 3 Then '确认 列表为 字母 AAA 到 XFD
- 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
- 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
- End If
- zuhe = ""
-
- For xunhuan_lieshu = lieshu_first To lieshu_last
- If Cells(hangshu, xunhuan_lieshu) <> "" Then
- If Application.WorksheetFunction.IsNumber(Cells(hangshu, xunhuan_lieshu)) = True Then
- If 1 * Cells(hangshu, xunhuan_lieshu) < 1 Then
- zuhe = zuhe & "^0" & Cells(hangshu, xunhuan_lieshu)
- Else
- zuhe = zuhe & "^" & Cells(hangshu, xunhuan_lieshu)
- End If
- Else
- zuhe = zuhe & "^" & Cells(hangshu, xunhuan_lieshu)
- End If
- Else
- zuhe = zuhe
-
- End If
- Next
- phonetic_and_text = zuhe & "^"
- End Function
复制代码 |
评分
-
查看全部评分
|