Excel宏连接

时间:2010-03-23 08:57:49

标签: excel

需要帮助创建Excel宏。我有一个Excel工作表.Excel工作表不一致。 我打算让它统一和有条理。

例如

  A            B            C         D
1 test      tester         tester
2 hai       test
3 Bye       test           tested
4 GN        test           tested    Fine

  A            B            C         D
1 test      testertester   
2 hai       test
3 Bye       testtested     
4 GN        testtestedFine 

基本上我必须找到放置元素的最后一个单元格,以便我可以编写我的CONCATENATE函数。

在这种情况下,它将是D列,因此我的连接函数就是 = CONCATENATE(B1,C1,D1) 我想再次将结果存在于B1中,但如果我不得不隐藏则不是问题。

有人可以帮我这么做吗?

2 个答案:

答案 0 :(得分:4)

您可以使用以下VBA函数连接(连接)任意范围的单元格中的值,并使用可选的分隔符。

Public Function Join(source As Range, Optional delimiter As String)
    Dim text As String
    Dim cell As Range: For Each cell In source.Cells
        If cell.Value = "" Then GoTo nextCell

        text = text & cell.Value & delimiter

nextCell:
    Next cell

    If text <> "" And delimiter <> "" Then
        text = Mid(text, 1, Len(text) - Len(delimiter))
    End If

    Join = text
End Function

有关如何使用该功能的示例,请在电子表格的任意位置输入= JOIN(A1:D1)。

答案 1 :(得分:2)

= B1&安培; C1&安培; D1

Adam已经优化的功能。

Function Join(source As Range, Optional delimiter As String) As String
'
' Join Macro
' Joins (concatenates) the values from an arbitrary range of cells, with an optional delimiter.
'

'optimized for strings
'   check len is faster than checking for ""
'   string Mid$ is faster than variant Mid
'   nested ifs allows for short-circuit
'   + is faster than &

    Dim sResult As String
    Dim oCell As Range

    For Each oCell In source.Cells
        If Len(oCell.Value) > 0 Then
            sResult = sResult + CStr(oCell.Value) + delimiter
        End If
     Next

    If Len(sResult) > 0 Then
        If Len(delimiter) > 0 Then
            sResult = Mid$(sResult, 1, Len(sResult) - Len(delimiter))
        End If
    End If

    Join = sResult
End Function