excel vba 代码或函数

11.522.533.544.5结果112,4.5111111111~4.51111.5~2.5需求:返回非空白单元格对应标题行的值当标题行的值是连续的取首尾的值,中间用... 1 1.5 2 2.5 3 3.5 4 4.5 结果

1 1 2,4.5

1 1 1 1 1 1 1 1 1~4.5

1 1 1 1.5~2.5

需求:
返回非空白单元格对应标题行的值
当标题行的值是连续的取首尾的值,中间用~号隔开
当标题行的值是不连续的,取对应的值,中间用,号隔开

vba 代码或函数都可以

感谢各位大侠!
主要是返回标题行值, 有连续的取首尾值中间用~连接, 不连续的用,连接
1 1.5 2 2.5 3 3.5 4 4.5 结果

1 1 1 1 1 1~2,3.5,4.5
展开
 我来答
落叶l无情
推荐于2016-08-11 · TA获得超过1417个赞
知道大有可为答主
回答量:1372
采纳率:0%
帮助的人:1402万
展开全部

在模块里面输入下列代码:

Function js(r)
    js = ""
    rg = Range("A1:H1").Value  '第一行数据所在区域
    For i = 1 To UBound(rg, 2)
        If Cells(r, i) <> "" Then js = js & rg(1, i) & ","
    Next
    js = Left(js, Len(js) - 1)
End Function

使用:在需要显示结果的地方输入 =js(ROW()) ,可下拉填充

追问
这个结果没有实现:当返回标题行的值是连续的, 则取首尾的值,中间用~号隔开  帮我再想想怎么实现,谢谢.
追答
Function js(r) 
    js = ""
    rg = Range("A1:H1").Value
    For i = 1 To UBound(rg, 2)
        If Cells(r, i) = "" Then rg(1, i) = ""
    Next
    For i = 1 To UBound(rg, 2)
        j = 0
        Do While rg(1, i + j) <> ""
            j = j + 1
            If i + j > UBound(rg, 2) Then Exit Do
        Loop
        j = j - 1
        If j > 1 Then  '3个及以上连续的,使用~,如果包括2个的,请改1为0
            js = js & rg(1, i) & "~" & rg(1, i + j) & ","
            i = i + j
        Else
            If rg(1, i) <> "" Then js = js & rg(1, i) & ","
        End If
    Next
    js = Left(js, Len(js) - 1)
End Function
liuyinde
2014-09-14 · TA获得超过6979个赞
知道大有可为答主
回答量:8941
采纳率:45%
帮助的人:1942万
展开全部
只能是这样,I2=IF(A2<>"",A$1&",","")&IF(B2<>"",B$1&",","")&IF(C2<>"",C$1&",","")&IF(D2<>"",D$1&",","")&IF(E2<>"",E$1&",","")&IF(F2<>"",F$1&",","")&IF(G2<>"",G$1&",","")&IF(H2<>"",H$1,"")向下填充。
追问
谢谢,但这个结果也没实现:当返回标题行的值是连续的, 则取首尾的值,中间用~号隔开,不连续的用,号隔开
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biuul
2014-09-14 · TA获得超过251个赞
知道小有建树答主
回答量:444
采纳率:100%
帮助的人:171万
展开全部
如果是1,1.5,2,3.5,4.5
结果是什么?
追问
1~2,3.5,4.5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式