如果行中有值,则串联列中的单元格 [英] Concatenate cells in a column if there is a value in the row

查看:27
本文介绍了如果行中有值,则串联列中的单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Excel宏的新手,因此我正在寻找一些帮助来创建宏,以便以下列格式连接包含详细信息的Excel工作表的列中的值。

我需要以下格式显示数据

我尝试在几个在线论坛上搜索解决方案,甚至尝试了使用Conatenate、If和IsBlank的不同功能组合,但我无法获得所需的结果。我提前道歉,以防解决方案是我可能忽略的非常简单的东西,但我在过去的几天里一直在这个问题上绞尽脑汁,我希望我能在这个论坛上找到解决问题的办法。如有任何帮助和指导,我们将不胜感激。

提前感谢。

推荐答案

我认为下面的过程会达到您预期的效果。请尝试。

Sub ConcatEntries()
    ' 299

    Const TitleClm      As String = "A"     ' change to suit
    Const ItemClm       As String = "B"     ' change to suit
    Const FirstDataRow  As Long = 2         ' change to suit
    
    Dim Spike()         As String           ' for output
    Dim i               As Long             ' index of Spike()
    Dim Concat          As String           ' concatenation
    Dim R               As Long             ' loop counter: sheet rows
    
    Application.ScreenUpdating = False
    ' the number of Spike elements should be much larger than what you ever expect
    ReDim Spike(1 To 100)                   ' prepare for results
    i = UBound(Spike)
    With Worksheets("Sheet1")               ' change to suit
        ' loop from last used cell to FirstDataRow
        For R = (.Cells(.Rows.Count, ItemClm).End(xlUp).Row) To FirstDataRow Step -1
            i = i - 1
            Spike(i) = .Cells(R, ItemClm).Value & " "
            If Len(.Cells(R, TitleClm).Value) Then
                .Cells(R, ItemClm).Value = Trim(Join(Spike))
                ReDim Spike(UBound(Spike))
                i = UBound(Spike)
            Else
                .Rows(R).Delete
            End If
        Next R
    End With
    Application.ScreenUpdating = True
End Sub

请注意代码顶部的三个常量。您可以调整它们的值,以满足工作表中的集设置。您还可以在代码中更改正在执行操作的工作表的名称。我的代码引用";Sheet1";。

这篇关于如果行中有值,则串联列中的单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆