Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2061 / 9994 ←次へ | 前へ→

【11213】Re:四捨五入のPGをもう少し工夫したいのですが。
回答  tomomi  - 09/10/7(水) 10:49 -

引用なし
パスワード
   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す。

なってしまいます。
771 hits

【11208】四捨五入のPGをもう少し工夫したいのですが。 tomomi 09/10/6(火) 9:40 質問[未読]
【11209】Re:四捨五入のPGをもう少し工夫したいので... hatena 09/10/6(火) 18:12 回答[未読]
【11211】Re:四捨五入のPGをもう少し工夫したいので... tomomi 09/10/7(水) 9:38 回答[未読]
【11212】Re:四捨五入のPGをもう少し工夫したいので... hatena 09/10/7(水) 10:09 回答[未読]
【11213】Re:四捨五入のPGをもう少し工夫したいので... tomomi 09/10/7(水) 10:49 回答[未読]
【11214】Re:四捨五入のPGをもう少し工夫したいので... 超初心者 09/10/7(水) 11:33 発言[未読]
【11215】Re:四捨五入のPGをもう少し工夫したいので... tomomi 09/10/7(水) 14:11 発言[未読]
【11216】Re:四捨五入のPGをもう少し工夫したいので... 超初心者 09/10/7(水) 15:59 発言[未読]
【11217】Re:四捨五入のPGをもう少し工夫したいので... tomomi 09/10/13(火) 10:01 お礼[未読]
【11227】Re:ちょっとひどいのでは? たん 09/10/15(木) 22:35 発言[未読]
【11228】Re:ちょっとひどいのでは? tomomi 09/10/16(金) 8:57 回答[未読]

2061 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078197
(SS)C-BOARD v3.8 is Free