如何将带 "subscript" 分数的数字转换为 Excel 中的小数?
How can I convert numbers with "subscript" fractions to decimal in Excel?
我有成千上万的数字以无法使用的格式提供给我:
9⅝, 9¼, 9¾, 10¼
这是它们在 Excel 中每一行中的显示方式。我想将这些转换为小数。我试过 =FIXED(A2, 3)
但没有成功。出现问题是因为分数采用这种奇怪的格式。
是否有我可以实现的公式或宏来获得所需的小数结果?
非常感谢,复活节快乐!
因此,这是适合您的一种解决方案。我假设数字的格式已设置,并且您无法将分数分开。
它需要一些手动工作,只有当你有合理数量的可以手动调整的分数时才真正可行
这里...
假设原始数据在 A 列中,创建一些辅助列:
- B列:提取分数,例如:
=RIGHT(A2, 1)
- C 列:使用此信息现在提取整数,例如:
=SUBSTITUTE(A2, B2, "")
创建一个从无法使用的分数格式到您可以在 excel 中使用的分数格式的查找:
- 查找中的第一列应该是格式不可用的分数
- 第二列应该是可用格式的分数,首先格式化第二列中的单元格 > 单元格格式菜单 > 数字选项卡 > 类别为分数 > 类型 "Up to one digit (1/4)"
- 在相应的单元格中手动输入等效值(例如,在下面的单元格 H2 中写入 5/8)
现在在主table
中查找调整后的分数
- D列:查找调整后的分数,例如:
=VLOOKUP(B2, $G:$H, 2, 0)
- E列:重新计算可用整数,例如:
=C2 +D2
下面是完整的解决方案屏幕截图:
问题是您的每个分数都是单个 unicode 字符。如果我们在单元格中隔离单个字符并且 运行:
Sub WhatsIt()
Dim v As Variant
v = ActiveCell.Value
MsgBox Asc(v) & vbCrLf & AscW(v) & vbCrLf & Application.WorksheetFunction.Dec2Hex(AscW(v))
End Sub
我们看到:
现在可以轻松地将这些项目转换为实际值。这是一个开始:
Public Function Konvert(s As Variant) As Double
Dim d As Double
d = CDbl(Mid(s, 1, Len(s) - 1))
If AscW(Right(s, 1)) = 8541 Then d = d + 0.625
Konvert = d
End Function
您必须扩展此代码以包含其他分数。以下是一些常见的:
我有成千上万的数字以无法使用的格式提供给我:
9⅝, 9¼, 9¾, 10¼
这是它们在 Excel 中每一行中的显示方式。我想将这些转换为小数。我试过 =FIXED(A2, 3)
但没有成功。出现问题是因为分数采用这种奇怪的格式。
是否有我可以实现的公式或宏来获得所需的小数结果?
非常感谢,复活节快乐!
因此,这是适合您的一种解决方案。我假设数字的格式已设置,并且您无法将分数分开。
它需要一些手动工作,只有当你有合理数量的可以手动调整的分数时才真正可行
这里...
假设原始数据在 A 列中,创建一些辅助列:
- B列:提取分数,例如:
=RIGHT(A2, 1)
- C 列:使用此信息现在提取整数,例如:
=SUBSTITUTE(A2, B2, "")
创建一个从无法使用的分数格式到您可以在 excel 中使用的分数格式的查找:
- 查找中的第一列应该是格式不可用的分数
- 第二列应该是可用格式的分数,首先格式化第二列中的单元格 > 单元格格式菜单 > 数字选项卡 > 类别为分数 > 类型 "Up to one digit (1/4)"
- 在相应的单元格中手动输入等效值(例如,在下面的单元格 H2 中写入 5/8)
现在在主table
中查找调整后的分数- D列:查找调整后的分数,例如:
=VLOOKUP(B2, $G:$H, 2, 0)
- E列:重新计算可用整数,例如:
=C2 +D2
下面是完整的解决方案屏幕截图:
问题是您的每个分数都是单个 unicode 字符。如果我们在单元格中隔离单个字符并且 运行:
Sub WhatsIt()
Dim v As Variant
v = ActiveCell.Value
MsgBox Asc(v) & vbCrLf & AscW(v) & vbCrLf & Application.WorksheetFunction.Dec2Hex(AscW(v))
End Sub
我们看到:
现在可以轻松地将这些项目转换为实际值。这是一个开始:
Public Function Konvert(s As Variant) As Double
Dim d As Double
d = CDbl(Mid(s, 1, Len(s) - 1))
If AscW(Right(s, 1)) = 8541 Then d = d + 0.625
Konvert = d
End Function
您必须扩展此代码以包含其他分数。以下是一些常见的: