EXCEL VBA | 单元格等于select

(我们现在称之为J1)所以,如果用户通过鼠标拖动selectA1,A2,A3,A4J1值将显示"A1:A4" ,然后用一些VBA代码连接这些单元格以显示由“;”分隔的单元格值。 问题是,当用户select不正确的单元格时(通过按住CTRL键),就像A1,A5,A11J1值连接时会显示"A1,A5,A11" ,会给出“#VALUE”错误。

我们可以用单元格值replace这里的每个单元格引用吗? 并将“逗号”留在原来的位置。 那么以后我们可以Subtitute逗号“”来Subtitute逗号。

对不起,如果我的问题似乎有点无知:)

我的select代码:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Dim s As String Set rng = Application.Selection If rng.Count < 2 Then Range("H1").Value = Cells(Target.Row, Target.Column).Value Else Range("H1").Value = rng.Address End If End Sub 

代码连接:

 Function ConcatenateRange(ByVal cell_range As Range, _ Optional ByVal seperator As String) As String Dim cell As Range Dim lastrow Dim choice Dim lastrowmodified Dim rangy Dim newString As String Dim cellArray As Variant Dim i As Long, j As Long cellArray = cell_range.Value For i = 1 To UBound(cellArray, 1) For j = 1 To UBound(cellArray, 2) If Len(cellArray(i, j)) <> 0 Then newString = newString & (seperator & cellArray(i, j)) & ";" End If Next Next If Len(newString) <> 0 Then newString = Right$(newString, (Len(newString) - Len(seperator))) End If ConcatenateRange = newString End Function 

如果我理解正确,你想要一个单元格,说J1来包含所有选定单元格的 ,用分号隔开? 如果是这样,你可以修改你的第一sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Set rng = Application.Selection Dim vCell as Range Range("J1").Value = "" ' Cycle through cells in range For each vCell in rng ' Use if so that J1 doesn't start with a semi colon If Range("J1").Value = "" Then Range("J1").Value = vCell.Value Else Range("J1").Value = Range("J1").Value & ";" & vCell.Value End If Next vCell End Sub 

另一种方法是将string数组与JOIN函数结合使用。 这适用于非连续的select:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim c as Range, i as Integer Dim arr() As String ReDim arr(0 To Selection.Count - 1) As String If Selection.Count < 2 Then Range("J1").Value = Selection.Value Else For Each c In Selection.Cells arr(i) = c.Value i = i + 1 Next c Range("J1").Value = Join(arr, ";") End if End Sub