我正在通过电源查询将数据从 API 导入 excel。
由于一些数据是分数,这导致了一些噩梦。因此我不能使用“数字”,它会引发错误,所以我必须作为文本导入。
这样做时,数据导入如下,前面带有“'”:
由于我需要每分钟更新数据,然后对其运行公式,因此我需要将其作为一个数字。什么是最简单的方法(从 '15/2 转换为数字的宏)或修复 Power Query 并允许它导入/转换分数(这将是完美的!)。
非常感谢
我正在通过电源查询将数据从 API 导入 excel。
由于一些数据是分数,这导致了一些噩梦。因此我不能使用“数字”,它会引发错误,所以我必须作为文本导入。
这样做时,数据导入如下,前面带有“'”:
由于我需要每分钟更新数据,然后对其运行公式,因此我需要将其作为一个数字。什么是最简单的方法(从 '15/2 转换为数字的宏)或修复 Power Query 并允许它导入/转换分数(这将是完美的!)。
非常感谢
这是一个要使用的宏(假设您的屏幕截图具有正确的列位置)。您需要进行的唯一调整是使用数据的最后一行调整“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
然后,您可以逐步浏览选定的单元格并检查每个单元格的前缀字符是否为撇号。如果是,那么您需要做的就是让宏执行相当于手动重新键入单元格内容的操作,方式如下:
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
还有……瞧!
也许这是您想针对另一个问题查看的宏 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)
。这通过运行文本输入9
或15/2
作为返回数字的小程序来工作。
(您可能还想在之后将列转换为数字。)
查看 > 高级编辑器以获取完整示例:
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"