如何用"下标"转换数字? Excel中的分数到十进制?

时间:2016-03-27 09:37:05

标签: excel excel-vba excel-formula converter vba

我有数以千计的数字以无法使用的格式提供给我:

9⅝, 9¼, 9¾, 10¼

这是它们在Excel中每行中的显示方式。我想将这些转换为小数。我已经尝试了=FIXED(A2, 3),但这并没有成功。问题出现是因为分数是这种奇怪的格式。

我是否可以使用公式或宏来获得所需的小数结果?

非常感谢和复活节快乐!

2 个答案:

答案 0 :(得分:3)

问题是你的每个分数都是一个unicode字符。如果我们在单元格中隔离单个字符并运行:

Sub WhatsIt()
    Dim v As Variant
    v = ActiveCell.Value
    MsgBox Asc(v) & vbCrLf & AscW(v) & vbCrLf & Application.WorksheetFunction.Dec2Hex(AscW(v))
End Sub
我们看到了:

enter image description here

现在可以轻松地将这些项目转换为实际值。这是一个开始:

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

enter image description here

您必须展开此代码才能包含其他分数。以下是一些常见的内容:

enter image description here

答案 1 :(得分:1)

所以这是一个适合你的解决方案。我假设数字的格式已设置,并且您无法将该分数分开。

它需要一些手动工作,如果您有合理数量的可以手动调整的分数,它们才真正可行

这里......

假设原始数据在A列中,请创建一些帮助列:

  • B列:提取分数,例如:=RIGHT(A2, 1)
  • C列:使用此信息立即提取整数,例如:=SUBSTITUTE(A2, B2, "")

创建从不可用的分数格式到可以在excel中使用的格式的查找:

  • 查找中的第一列应为不可用格式的分数
  • 第二列应该是可用格式的分数,首先格式化第二列中的单元格>格式单元格菜单>数字标签>分类为分数>输入"最多一位数(1/4)"
  • 在相应的单元格中手动执行等效值(例如,下面的单元格H2写入5/8)

enter image description here

现在在主表中查找调整后的分数

  • D栏:查找调整后的分数,例如:=VLOOKUP(B2, $G$2:$H$4, 2, 0)
  • E栏:重新计算可用的整数,例如:=C2 +D2

以下完整解决方案屏幕截图:

enter image description here