[英]Run macro on active cell
我正在嘗試在活動單元中進行這項工作。 我想定義它可以選擇的單元格數目,它可以是下面的6個或20個,或者是我在運行宏之前定義的任何數目。”
Sub Macro3()
'
' Macro3 Macro
'
' Keyboard Shortcut: Option+Cmd+z
'
ActiveCell.Select
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1))
Selection.Offset(0, 6).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=True
ActiveCell.Offset(-1, 0).Select
Selection.Offset(0, 6).Select
Selection.ClearContents
End Sub
您似乎在使用“文本到列”來基於分號定界符¹拆分數據,並且僅保留最后一個值。 似乎在完成拆分后您將留下空白行,因此我將為您提供避免這種情況的選項。
Sub Macro3()
' Macro3 Macro
' Keyboard Shortcut: Option+Cmd+z
Dim vVALs As Variant
'option 1 - replace active cell with last split value
With Selection.Cells(1, 1)
If CBool(Len(.Value)) Then
vVALs = Split(.Value, Chr(59)) 'split on a semi-colon
.Cells = vVALs(UBound(vVALs))
End If
End With
End Sub
Sub Macro4()
' Macro4 Macro
' Keyboard Shortcut: Option+Cmd+z
Dim vVALs As Variant
'option 2 - put last split value into row below, clear active cell
With Selection.Cells(1, 1)
If CBool(Len(.Value)) Then
vVALs = Split(.Value, Chr(59)) 'split on a semi-colon
.Cells.Offset(1, 0) = vVALs(UBound(vVALs))
.Cells.ClearContents
End If
End With
End Sub
如果當前選擇了多個單元格,則使用Selection.Cells(1, 1)
。 這將采用任何選擇集中的第一個單元格,而不管是只有一個單元格還是多個單元格。 可以對其進行修改,以使其在選擇集中的多個單元格中循環,但是應應用附加的錯誤控制,以確保將要執行的操作不會阻塞錯誤的值選擇。
我正在檢查所選單元格中的值是否具有至少一個字符,因為即使其中不包含分號,但所有內容都將拆分為至少一個值,但根本不會拆分任何值。
¹ 實際上有一個分號選項,您無需使用其他:來指定它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.