インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

有効数字 今度こそ大丈夫??

まだ変なとこありましたので,書き直してみた。

うーん。なんと面倒な。。気にせずやれればいいんですが(;´▽`A`` 固定小数点でやれない数値の扱いって面倒ですね。

できるだけシンプルな方法を今後も考えます。主目的がここじゃないせいで,トライアンドエラーでしかやってない(;´▽`A``

Function 有効数字表示(As Variant,As Long, 指数表示 As Boolean) As String
    Dim Val_ As String, Format_ As String
    If= 1 Then Format_ = "0e-0" Else Format_ = "0." & String(- 1, "0") & "e-0"
    Val_ = Format(CSng(), Format_)
    
    If 指数表示 = True Then
        有効数字表示 = Replace(Val_, "e", "×10^")
    Else
        Dim 数値部分, 桁部分, tmp, tmp2, tmp3, tmp4
        数値部分 = Left(Val_, InStr(Val_, "e") - 1)
        桁部分 = Mid(Val_, InStr(Val_, "e") + 1)
        有効数字表示 = CSng(数値部分 & "e" & 桁部分)
        If= 1 Then Exit Function
        
        If InStr(有効数字表示, "E") = 0 Then
            If InStr(有効数字表示, ".") > 0 Then tmp = Len(有効数字表示) - 1 Else tmp = Len(有効数字表示)
            tmp = Format(CSng(数値部分) / CSng(有効数字表示), "0e-0")
            tmp2 = Replace(数値部分, ".", "")
            tmp3 = Mid(tmp, InStr(tmp, "e") + 1)
            Select Case tmp3
                Case Is = 0
                    有効数字表示 = 数値部分
                Case Is > 0
                    If tmp = 1 Then
                        有効数字表示 = "0." & tmp2
                    Else
                        有効数字表示 = "0." & String(tmp3 - 1, "0") & tmp2
                    End If
                Case Is < 0
                    tmp4 = Len(有効数字表示)
                    If tmp4 <Then
                        有効数字表示 = 有効数字表示 & "." & String(- tmp4, "0")
                    End If
            End Select
            
        End If
        
    End If
End Function

ちまちま確かめていると,間違いに気づかないのでExcelにこのFunctionを放り込んでチェック

f:id:chemiphys:20181103103757p:plain

大丈夫そうだけどなぁ(;´▽`A``