【问题标题】:VBA convert numbers stored as text to numbers on cell changeVBA 将存储为文本的数字转换为单元格更改时的数字
【发布时间】:2017-11-09 21:30:06
【问题描述】:

使用以下代码将存储为文本的数字转换为数字。我将如何自动化此宏以触发单元格更改?

例如。一旦我将数据从另一个来源粘贴到电子表格中,我希望 Y:Y 范围内新粘贴的单元格将存储为文本的数字转换为数字

尝试了一些不同的方法,但只有在将宏设置为手动运行时才会转换单元格。

Sub macro()

Range("Y:Y").Select 
With Selection
    Selection.NumberFormat = "0"
    .Value = .Value
End With

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    将下面的代码添加到您的 Worksheet 模块中,添加到 Worksheet_Change 事件中。

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("Y:Y")) Is Nothing Then
        Application.EnableEvents = False
    
        With Target
            .NumberFormat = "0"
    
            If InStr(.Value, "`") = 1 Then ' if leading character is apostrophe
                .Value = Mid(.Value, 2) ' start from second character
            Else ' regular number
                .Value = .Value
            End If
        End With
    End If
    Application.EnableEvents = True
    
    End Sub
    

    【讨论】:

    • 感谢 Shai,但这仍然不起作用。添加到我的原始评论中,这是当复制的数字数据包含前导撇号时,因此不适用于进一步的数学方程式或查找。删除字符功能在这里更合适吗?
    • @brittd 尝试编辑代码以删除前导撇号
    • 同样的问题,它似乎没有触发......是否会指定已粘贴的单元格范围,而不是整个列来解决这个问题?
    • @brittd 你确定你把代码放在了正确的工作表模块中吗?
    • 当然。工作表_更改。唯一有效的是原始手动宏。为了提供更多背景信息,将多行数据从另一个工作簿粘贴到 A:AD 列。进一步查找需要 Y 列,但这些值是以文本形式存储的数字(带有前面的撇号),因此需要进行转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多