簡體   English   中英

EXCEL VBA | 細胞等於選擇

[英]EXCEL VBA | Cell equals selection

我有一個關於在我的工作表中的特定單元格內顯示選擇值的問題。(現在我們稱之為J1)所以,如果用戶拖動選擇(通過鼠標) A1,A2,A3,A4 J1值將顯示"A1:A4" ,之后使用一些VBA代碼我連接這些單元格以顯示以“;”分隔的單元格值。 問題是,當用戶選擇不按順序的單元格(通過按住CTRL)時,如A1,A5,A11 當我連接時, J1值將顯示"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

如果我理解正確,你想要一個單元格,比如說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

另一種方法是將字符串數組與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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM