|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 香川群子 于 2014-7-24 14:23 编辑
中山郎 发表于 2014-7-24 13:07
根据我的请求做的
稍稍修改一下,把各列元素合并组合为一个字符串然后输出的代码:
需要输入分隔符。(可以默认留空,或直接在代码中固化设置好。)
- Dim sj, jg(), m&, n&, k&, w$ '公共变量中增加了一个分隔符w$变量
- Sub MultiColumnCombin() 'by kagawa
- Dim i&, j&, tms#
-
- 'l = MsgBox("Yes to output Multi-Columns, No to only One Column", vbYesNo)
- 'If l = vbNo Then w = InputBox("Please input insert-word", "One Column Only")
- l = MsgBox("是 = 多列输出, 否 = 单列合并输出", vbYesNo)
- If l = vbNo Then w = InputBox("请输入分隔字符", "单列合并输出")
- '如果单列输出时不需要分隔符,或把分隔符设置为固定字符串,那么这一句可以改成这样
- 'If l = vbNo Then w = "" '不需要分隔符时
- 'If l = vbNo Then w = "-" '固定设置为中杠或其它字符串时 (分隔符长度不限)
- tms = Timer
-
- sj = [a1].CurrentRegion
- m = UBound(sj): n = UBound(sj, 2)
- k = 1
- For j = 1 To n
- For i = 1 To m
- If sj(i, j) = "" Then Exit For
- Next
- If i > m Then k = k * m Else k = k * i
- Next
-
- [a1].Offset(, n + 2).CurrentRegion = ""
- If l = vbYes Then '多列输出时
- ReDim jg(k, 1 To n)
- k = 0: Call dgMN(1)
- [a1].Offset(, n + 2).Resize(k, n) = jg
- Else '单列合并字符串输出时
- ReDim jg(k, 0)
- k = 0: Call dgMN1("", 1)
- [a1].Offset(, n + 2).Resize(k) = jg
- End If
- MsgBox Format(Timer - tms, "0.000s ") & k
- End Sub
- Sub dgMN(j&) '多列输出时的递归过程
- Dim i&, l&
- For i = 1 To m
- If sj(i, j) = "" Then
- Exit For
- Else
- jg(k, j) = sj(i, j)
- If j = n Then
- For l = 1 To n
- If jg(k, l) = "" Then jg(k, l) = jg(k - 1, l) Else Exit For
- Next
- k = k + 1
- Else
- Call dgMN(j + 1)
- End If
- End If
- Next
- End Sub
- Sub dgMN1(s$, j&) '单列合并输出时的递归过程
- Dim i&
- For i = 1 To m
- If sj(i, j) = "" Then
- Exit For
- Else
- If j = n Then
- jg(k, 0) = Mid(s & w & sj(i, j), Len(w) + 1): k = k + 1
- Else
- Call dgMN1(s & w & sj(i, j), j + 1)
- End If
- End If
- Next
- End Sub
复制代码 上面代码可以由用户自己选择输出【多列/或单列合并】方式。其实也很简单那。
|
评分
-
1
查看全部评分
-
|