【问题标题】:Excel Data Conversion Macro Not Recognising Numbers with < at the StartExcel 数据转换宏无法识别开头带有 < 的数字
【发布时间】:2018-06-26 21:24:59
【问题描述】:

我正在处理大量实验室测试结果,这些结果显示在 excel 的一列中,但是结果来自不同实验室的不同单位,因此我需要转换一些数据,以便所有实验室数据都在相同单位。

我创建了一个宏,用于查找我想要更改的实验室数据并将转换数据,但是某些结果显示为

任何人都可以建议一种方法,我可以修改以下宏来转换包含

Sub CONVERT_UNITS()
'
' CONVERT_UNITS Macro
'

'
    ActiveCell.FormulaR1C1 = _
        "=IF(RC12=""ug/kg"",RC11/1000,IF(RC12=""mg/l"",RC11*1000,RC11))"
    Range("M2").Select
    Selection.AutoFill Destination:=Range("M2:M" & Range("L" & Rows.Count).End(xlUp).Row)
    Range(Range("M2"), Range("M2").End(xlDown)).Select
End Sub

作为参考,我的实验室数据包含在 K 列中,单位在 L 列中显示。我希望将转换后的实验室结果放在 M 列中(参见下面的示例数据)。我只转换 ug/kg(结果除以 1000)和 mg/l(结果乘以 1000)的结果,所有其他结果将保持原样。

【问题讨论】:

  • 这些单元格的格式是什么?通常&lt;0.07 应该作为文本阅读,所以你不能将它用作数字也就不足为奇了。您将需要测试 &lt; 和 &gt; 并在进行计算之前将其删除,然后重新插入

标签: vba excel data-conversion


【解决方案1】:

我会为此创建一个用户定义函数:

Public Function convertResults(ByVal result As Variant, ByVal unit As String) As Variant
    Dim hasSmaller As Boolean
    If Left(result,1) = "<" Then
        hasSmaller = True
        result = Replace(result, "<", "")
    End If
    If unit = "ug/kg" Then result = result / 1000
    If unit = "mg/l" Then result = result * 1000
    If hasSmaller Then result = "<" & result
    convertResults = result
End Function

...然后(例如在单元格M2)只写=convertResults(K2, L2)。

【讨论】:

  • 啊,太棒了,效果很好,谢谢:)
猜你喜欢
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多