![](/img/trans.png)
[英]Excel VBA - automatic if Cell A equals X then copy and paste in Cell B
[英]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.