在活动单元格上运行宏

时间:2015-04-08 00:02:15

标签: excel vba excel-vba

我正在尝试在活动单元格中完成此工作。我想定义它可以选择的单元格数量,它可以是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

1 个答案:

答案 0 :(得分:0)

您似乎正在使用“文本到列”来基于分号分隔符¹分割数据,并且只保留最后一个值。在完成拆分后你似乎还要留下一个空行,所以我会给你一个避免这种情况的选择。

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)。无论是否只有一个单元格或多个单元格,这将采用任何选择集中的第一个单元格。这可以被修改为循环遍历选择集中的多个单元格,但是应该应用额外的错误控制以确保执行某些操作而不会阻塞错误的值选择。

我正在检查所选单元格中的值是否至少包含一个字符,因为即使它不包含分号但根本没有任何值也不会拆分,因此将分割为至少单个值。

¹实际上有一个分号选项,你不需要使用其他:来指定它