[英]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.