【问题标题】:Run macro on active cell在活动单元格上运行宏
【发布时间】:2015-04-08 00:02:14
【问题描述】:

我正在尝试在活动单元格中进行这项工作。我想定义它可以选择的单元格数量,它可以是下面的 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

【问题讨论】:

  • 您是否真的需要制表符和分号作为分隔符,或者制表符只是一个剩余部分,因为它是在您录制宏时预先选择的?

标签: vba excel


【解决方案1】:

您似乎正在使用 Text to Columns 根据分号分隔符来拆分数据¹,并且只保留最后一个值。似乎您在完成拆分后会留下一个空白行,所以我会为您提供避免这种情况的选项。

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

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

¹ 其实有个分号选项,不需要用Other:来指定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多