|
本帖最后由 WYS67 于 2018-12-20 15:41 编辑
请老师帮忙创建一个 按指定条件对A列源数据上下连接的自定义函数。
重要提示:1.如果G:H列显示位置指定的行号数少于数据源组合成的三位数个数,则自动去掉排在上面的三位数,只保留最大行号能够恰好容纳的最下面的三位数;2.组合三位数时,自动忽略数据源A列中间和下面的空格。
多条件连接A列数据.zip
(19.16 KB, 下载次数: 7)
最简单的方法,是根据http://club.excelhome.net/forum. ... 1438068&pid=9764322 59楼反映的原代码,只需解决里面提到的两处问题就行了。
也就是59楼的计算结果几乎完全符合要求。其间偶尔出现遗漏的总是最后一个三位数,我觉得是没有正确计算结果显示的起始行号---如果把存放计算结果的起始行上移一行,然后顺次排列下来就行了!
附:http://club.excelhome.net/forum. ... 1438068&pid=9764322 原代码
Function SSLJ(rn As Range, a, Optional b = "")
Dim ar, br, cr, dr, c%, d&, i&, j&, m&, n&, x&, y&
Application.Volatile
ar = rn: x = Application.Count(rn)
c = (x - 2) Mod 3: d = Int(x / 3)
For j = UBound(ar) To 1 Step -1
If ar(j, 1) <> "" Then Exit For
Next
ReDim br(1 To j, 0): ReDim cr(1 To UBound(ar), 0): ReDim dr(1 To UBound(ar), 0)
For i = 1 To j
If ar(i, 1) <> "" Then y = y + 1: br(y, 0) = ar(i, 1)
Next
For i = 1 To UBound(ar)
m = i * 3 + c
If i < d Then cr(i, 0) = br(m - 2, 0) & br(m - 1, 0) & br(m, 0) Else: cr(i, 0) = ""
If b <> 0 And b <> "" Then
n = b - d - 3
If i > n And i < b - 3 Then dr(i, 0) = cr(i - n, 0) Else: dr(i, 0) = ""
End If
Next
If a = 1 And (b = 0 Or b = "") Then cr(d, 0) = br(x - 1, 0) & br(x, 0)
If a = 1 And b <> 0 And b <> "" Then dr(b - 3, 0) = br(x - 1, 0) & br(x, 0)
If b = 0 Or b = "" Then SSLJ = cr
If b <> 0 And b <> "" Then SSLJ = dr
End Function
此代码,当E:H列输入完整公式 {=SSLJ(数据区域,连接模式【0或1】,显示位置【0或指定行号】) 时,当A列数据个数除以3的余数为0或1时,显示的计算结果都非常正确;但余数为2时,就会出现如下所示的最后一个三位数被遗漏,而没有显示的错误。如下面最右边截图所示:
麻烦老师们看看是代码的哪一步计算出现的错误,并给予改正。下面是附件:
多条件连接A列数据.zip
(52.99 KB, 下载次数: 8)
|
|