【问题标题】:EXCEL VBA | Cell equals selectionExcel VBA |单元格等于选择
【发布时间】:2016-12-22 08:04:27
【问题描述】:

我有一个关于在工作表的特定单元格中显示选择值的问题。(我们暂时称它为 J1) 因此,如果用户拖动选择(通过鼠标)A1,A2,A3,A4J1 值将显示 "A1:A4",然后使用一些 VBA 代码连接这些单元格以显示由“;”分隔的单元格值。 问题是,当用户选择不按顺序排列的单元格时(通过按住 CTRL),就像A1,A5,A11J1 值将在我连接时显示 "A1,A5,A11",它给出“#VALUE”错误。

我们可以在这里用单元格值替换每个单元格引用吗? 并保留其间的“逗号”。 稍后我们可以Subtitute逗号加上“;”

如果我的问题似乎有点无知,请原谅:)

我的选择代码:

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

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    如果我理解正确,您是否希望一个单元格(例如 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
    

    【讨论】:

    • 是的!没错,这就是我想要达到的目标。像魅力一样工作。非常感谢队友:)
    【解决方案2】:

    另一种方法是将字符串数组与JOIN 函数结合使用。这适用于非连续选择:

    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
    

    【讨论】:

    • 这也适用于我,这似乎比我想象的要容易得多。谢谢你的时间伙伴:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多