Excel 数据导入为 '15/2,要转换为数字的宏?

Excel Data Imported as '15/2, Macro to convert to number?

我正在通过电源查询将数据从 API 导入 excel。

由于一些数据是小数部分,这造成了一些噩梦。因此我无法使用 'number',它会抛出错误,所以我必须导入为文本。

这样做时,数据导入如下,前面有一个“'”:

因为我需要数据每分钟更新一次,然后 运行 上面有公式,所以我需要它是一个数字。最简单的方法是什么(从 '15/2 转换为数字的宏)或修复 Power Query 并允许它为 import/convert 分数(那将是完美的!)。

非常感谢

然后您可以逐步浏览所选单元格并检查每个单元格的前缀字符是否为撇号。如果是,那么您需要做的就是让宏按照以下方式执行相当于手动重新键入单元格内容的操作:

For Each c In Selection
    If c.PrefixCharacter = "'" Then
        c.Value = c.Value
    End If
Next c

请注意,宏会检查 PrefixCharacter 属性 中的内容。这个属性可以读入VBA,但是不能直接改。这就是为什么宏需要使用看似简单的行将每个单元格的值重新分配给单元格的原因——本质上是重新键入内容。

如需完整指南,请参阅: http://excel.tips.net/T003332_Searching_for_Leading_Apostrophes.html

这是我自己的代码:

Public Sub tryit()
Dim i As Long
For i = 1 To 20 'repeat until your last record
    With ThisWorkbook.Sheets("Sheet1")
        If .Cells(i, 5).PrefixCharacter = "'" Then
            MsgBox "removing 1 apostrophe..."
            .Cells(i, 5).FormulaR1C1 = "=" & .Cells(i, 5)
        End If
    End With
Next i
End Sub

还有...瞧!

这是一个要使用的宏(假设您的屏幕截图具有正确的列位置)。您需要做的唯一调整是使用数据的最后一行调整 "intLastRow"。

Sub SO()
    Dim intLastRow As Integer, strIn As String
    intLastRow = 100
    For I = 2 To intLastRow
        For t = 4 To 21
            If InStr(1, Cells(I, t).Value, "/") > 0 Then
                strIn = Cells(I, t).Value
                Cells(I, t).Value = Val(Left(strIn, InStr(1, strIn, "/") - 1)) / Val(Right(strIn, Len(strIn) - InStr(1, strIn, "/")))
            Else
                Cells(I, t).Value = Val(Cells(I, t).Value)
            End If
        Next t
    Next I
End Sub

也许这是您要查看的另一个问题的宏 vba 代码:

Public Sub tryit()
    Dim i As Long
    For i = 1 To 20 'repeat until your last record
        With ThisWorkbook.Sheets("Sheet1")
            .Cells(i, 5).FormulaR1C1 = "=" & .Cells(i, 5)
        End With
    Next i
End Sub

将数学表达式解析为数字的 Power Query 解决方案非常简单!

只需添加自定义最后一步 Table.TransformColumns(SomeLastStep, {}, Expression.Evaluate)。这通过 运行 文本输入(例如 915/2 作为一个 returns 数字的小程序来工作。

(之后您可能还想将列转换为数字。)

完整示例的查看 > 高级编辑器:

let
    SomeLastStep = #table( {"data1", "data2"}, { {"9", "15/2"}, {"10", "8"}, {"11", "10"}, {"11", "10"} } ),
    Custom1 = Table.TransformColumns(SomeLastStep, {}, Expression.Evaluate),
    #"Changed Type" = Table.TransformColumnTypes(Custom1,{{"data1", type number}, {"data2", type number}})
in
    #"Changed Type"