Aqui está uma macro bastante simples, mas robusta e inteligente, que normaliza microgramas a miligramas:
'============================================================================================
' Module : <any standard module>
' Version : 0.1.0
' Part : 1 of 1
' References : N/A
' Source : https://superuser.com/a/1333314/763880
'============================================================================================
Option Explicit
Public Sub NormaliseUnits()
Dim ¡ As Long
Dim rngTarget As Range
For Each rngTarget In Selection.Areas
'Minimise the number of cells to be processed
Set rngTarget = Intersect(rngTarget, rngTarget.Parent.UsedRange)
If rngTarget Is Nothing Then Exit For 'Nothing to do as the mimimised Area doesn't contain any data
' Expand the minimised target to include the previous column:
If rngTarget.Column > 1 Then
Set rngTarget = rngTarget.Offset(ColumnOffset:=-1).Resize(ColumnSize:=rngTarget.Columns.Count + 1)
End If
' Expand the minimised target to include the next column:
If rngTarget.Column + rngTarget.Columns.Count - 1 < Columns.Count Then
Set rngTarget = rngTarget.Resize(ColumnSize:=rngTarget.Columns.Count + 1)
End If
' Loop through all cells (skipping the first column) looking for a "ug" to fix
Dim rngRow As Range
For Each rngRow In rngTarget.Rows
For ¡ = 2 To rngRow.Columns.Count
If rngRow.Cells(¡) = "ug" _
And rngRow.Cells(¡ - 1) <> vbNullString _
Then
Dim strValue As String: strValue = CStr(rngRow.Cells(¡ - 1).Value2)
Dim strLessThan As String: strLessThan = vbNullString
If InStr("<>", Left$(strValue, 1)) Then
strLessThan = Left$(strValue, 1)
strValue = Mid$(strValue, 2)
End If
If IsNumeric(strValue) Then
rngRow.Cells(¡ - 1).Value2 = strLessThan & CStr(CDbl(strValue) / 1000)
rngRow.Cells(¡) = "mg"
End If
End If
Next ¡
Next rngRow
Next rngTarget
End Sub
Na verdade, é tão inteligente que você pode selecionar qualquer coisa, linhas inteiras, colunas inteiras, células únicas, até mesmo intervalos não contíguos, e encontrará e normalizará todos os valores / unidades apropriados.
Notas:
- Os valores precedidos por
<
ou>
são corretamente normalizados - Se o valor estiver em branco ou não for um número, ele e a unidade permanecerão inalterados