|
hatenaさん
ご指導ありがとうございます。
>今回の処理に関係ないコードも提示していると言うことは、
>コードの内容、意味はほとんど理解できてないと思えますが、
>どうですか。
実際のところ申し訳ありませんが全ては理解できていません。
動きを調べてぬきだしてみました。
>少なくとも、今回の処理に関係ある部分だけ抜き出せるぐらいの
>VBAスキルがないと、このサイトの下記の基本方針に該当することに
>なりかねません。
下記内容が必要な部分で抜き出した見ました。
Function TextConv(文字列 As String) As String
Const 数字データ = "0123456789.", 四捨五入 As Currency = 0.05
Dim 数字列 As Integer, 変換数値 As String
Dim Idx1 As Long, Idx2 As Long, 文字列数 As Long
TextConv = 文字列
文字列数 = Len(文字列) + 1
For Idx1 = 1 To 文字列数
If Idx1 <> 文字列数 And _
InStr(1, 数字データ, Mid(文字列, Idx1, 1), vbBinaryCompare) > 0 Then
数字列 = 数字列 + 1
Else
If 数字列 > 0 Then
変換数値 = Mid(文字列, Idx1 - 数字列, 数字列)
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 10) / 10, "0.00")
If Len(変換数値) > 数字列 Then
TextConv = Left(TextConv, Idx1 + Idx2 - 数字列 - 1) & NumStr & _
Mid(文字列, Idx1)
Idx2 = Idx2 + 1
Else
Mid(TextConv, Idx1 + Idx2 - 数字列, 数字列) = 変換数値
End If
数字列 = 0
End If
End If
Next Idx1
End Function
>関係あるコードのみ提示して、
>自分でどのように修正してみたのか、
>あるいはコード内で理解できない部分は、どこか、
>など、自分が理解しようと努力したことを示すような
>質問をしてください。
>例示されたデータでは、数値は 1未満(0.88, 0.2006・・)のものだけですが、
>実際のデータもそうなのでしょうか。1以上のデータを含む場合もあるのでしょうか。
1.65、5.635、52.52695など1以上の数字にも対応できるようにしたいです。
少数第二位の場合
1.70、5.605、52.50695
となるように。
少数第三位の場合
1.65、5.640、52.53095
となるように
四捨五入をするに当たりどこで四捨五入をするかを任意で決めれるように
悩んでみた結果ですがうまくいきません・・・
Function TextConv(文字列 As String) As String
Const 数字データ = "0123456789.", 四捨五入 As Currency = 0.05
Dim 少数第何位 As Integer
Dim 数字列 As Integer, 変換数値 As String
Dim Idx1 As Long, Idx2 As Long, 文字列数 As Long
TextConv = 文字列
文字列数 = Len(文字列) + 1
変換数値 = 0
For Idx1 = 1 To 文字列数
If Idx1 <> 文字列数 And _
InStr(1, 数字データ, Mid(文字列, Idx1, 1), vbBinaryCompare) > 0 Then
数字列 = 数字列 + 1
Else
If 数字列 > 0 Then
変換数値 = Mid(文字列, Idx1 - 数字列, 数字列)
少数第何位 = Me.少数第何位
Select Case 少数第何位
Case 1
変換数値 = Format(Int((Val(変換数値) + 四捨五入)) / "0.0")
Case 2
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 10) / 10, "0.00")
Case 3
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 100) / 100, "0.000")
Case 4
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 1000) / 1000, "0.0000")
Case 5
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 10000) / 10000, "0.00000")
Case 6
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 100000) / 100000, "0.000000")
Case 7
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 1000000) / 1000000, "0.0000000")
Case 8
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 10000000) / 10000000, "0.00000000")
Case 9
変換数値 = Format(Int((Val(変換数値) + 四捨五入) * 100000000) / 10000000, "0.00000000")
End Select
If Len(変換数値) > 数字列 Then
TextConv = Left(TextConv, Idx1 + Idx2 - 数字列 - 1) & NumStr & Mid(文字列, Idx1)
Idx2 = Idx2 + 1
Else
Mid(TextConv, Idx1 + Idx2 - 数字列, 数字列) = 変換数値
End If
数字列 = 0
End If
End If
Next Idx1
End Function
とたとえば四捨五入の位を入れるテキストボックスに1〜9の数字を入れられた場合に処理を分けて見たりしたのですが。
1を入力ではオーバーフローしてしまい。
2入力でも
こんなデーターが
sdfg
fgsは0.7ですが0.80555dfgsdfhh。
egdは0.861ですが0.90に112あ.43216なりま112b.4c3216す。
こんなふうに
sdfg
fgsはですが0.800.80fgsdfhh。
egdは0.860.900.900.90ああ.4320.40ま112bb.4c3c321す。
なってしまいます。
|
|