• ベストアンサー

エクセルマクロ小数点桁数

テキストデータからエクセルマクロで吸出しを行う中で 数値データをNumberFomatLocalでカンマと小数点を指定したいのですが 小数点以下がセルによって2桁3桁だったり、なかったりとバラバラで データに合せてそのまま反映させたいのですが設定する方法がありますでしょうか。 "#,##0.0"だと当然関係なく小数点以下は1桁で反映されてしまいます。 .00でも表示させておきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

なかなか面倒くさい。 エクセルに向いてない課題かな。 文字列で一貫して扱うことで実現した。 例データ 書式付  原テキスト 桁数    先頭からのカンマの位置 123.234 123.234 7 4 123.00 123.00 6 4 23 23 2 0 23.1 23.1 4 3 23.0 23.0 4 3 23.000 23.000 6 3 234. 234. 4 4 元のデータの通り再現するよう細工した。 その後セル上でデータが変わるとおかしくなる(やり直さないとだめ)。危険はある。 どうしても拘るなら「単純に文字列でセットして、右詰に配置をッする」とかの方法もあり、計算は*1で1をかけてから行うとか。 ーー 標準モジュールに Sub test01() i = 1 Dim a As String Open "小数点数.txt" For Input As #1 While Not EOF(1) Line Input #1, a 'p = InStrRev(a, ".", , 1) p = InStr(a, ".") If p = 0 Then Cells(i, "A").NumberFormatLocal = "##,###" GoTo ex End If q = Len(a) - p Select Case q Case 0 If p = Len(a) Then Cells(i, "A").NumberFormatLocal = "##,###." Else Cells(i, "A").NumberFormatLocal = "##,###" End If Case 1 Cells(i, "A").NumberFormatLocal = "##,###.0" Case 2 Cells(i, "A").NumberFormatLocal = "#,###.00" Case 3 Cells(i, "A").NumberFormatLocal = "#,###.000" Case 4 Cells(i, "A").NumberFormatLocal = "#,###.0000" End Select Cells(i, "A") = a Cells(i, "B") = "'" & a Cells(i, "C") = Len(a) Cells(i, "D") = p ex: i = i + 1 Wend Close #1 End Sub ーー InstrRev関数でうまく行かなかったが,私のやり方が悪いだけかと。

twokidsdad
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 やはり、無謀なことをしようとしていたんですね。 御回答いただいたもので試してみましたが、私ではうまくいきませんでした。 手作業でがんばります。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3のimogasiさんの回答には何も付けていないようですから、もう投げ出してしまっているので、こちらの回答も無視されるのは必至ですが、imogasiさんの書いたものに手を加えてみました。 ご質問者さんは、基本的なExcelの書式表示について、何か勘違いしているような気がします。というか、本来、次のステップで、そのデータをどう扱うかによって、その表示や扱い方が変わるわけで、単発的にどう処理するかは重要なのではありません。ただ、以下は、ワザ的なものだけです。 >小数点以下がセルによって2桁3桁だったり、なかったりとバラバラで >データに合せてそのまま反映させたいのですが設定する方法がありますでしょうか。 単に、インポートした数字データにカンマをつけたいということではないでしょうか? だったら、整数部と小数部とを分けて処理すればよいです。 >.00でも表示させておきたいです。 ただし、Excelでは、一般的に .00という表示などはありえませんね。Wordのほうがよいのではないかと思います。 '// Sub Test2() '文字で貼りつけ  Dim n As String  Dim i As Long, j As Integer  Dim U As String, L As String  i = 1  Open "numbers.txt" For Input As #1  Do While Not EOF(1)   Line Input #1, n   If IsNumeric(n) Then    If InStr(n, ".") > 0 Then     j = InStr(n, ".") - 1     U = Mid(n, 1, j)     L = Replace(n, U, "")    Else     U = n     j = 0    End If    U = Format$(U, "#,##0")    Cells(i, 1).Value = "'" & U & L   Else    Cells(i, 1).Value = n   End If   U = "": L = ""   i = i + 1  Loop  Close #1 End Sub '// Sub Test3() '書式変更  Dim n As String  Dim i As Long  Dim j As Integer, k As Integer  i = 1  Open "numbers.txt" For Input As #1  Do While Not EOF(1)   Line Input #1, n   If IsNumeric(n) Then    If InStr(n, ".") > 0 Then     j = Len(Mid(n, InStr(n, ".") + 1))    Else     j = 0    End If    Cells(i, 2).NumberFormat = "#,##0" & IIf(j > 0, "." & String(j, "0"), "")   End If   Cells(i, 2).Value = n   i = i + 1  Loop  Close #1 End Sub

twokidsdad
質問者

お礼

お礼が遅くなりました。 ごさっしのとおり、インポートした数字にカンマつけたいということです。 .00でも表示したいのは経理的な書類の為です。 うまく稼動させることができなかったのでせっかくですが 手作業にて処理したいと思います。 ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

少数以下が絶対に4桁以内と分かっているなら 書式を以下のようにします。 #,##0.####

twokidsdad
質問者

お礼

お礼が遅くなり申し訳ございません。 書式を変更しましたが、エラーとなってしまいました。 手作業で変更したいと思います。 ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

固定した書式では無理でしょう。 F = "#,##0" '書式 S = CStr(値) '数値を文字列化する P = Instr(S, ".") '小数点の位置を求める If P > 0 Then     '小数点がある場合は桁数分の"0"を繋げる     F = F & "." & String(Len(S) - P, "0") End If '書式を設定する Cells(y, x).NumberFormatLocal = F

twokidsdad
質問者

お礼

補足がふそくしてました。 エラーを脱出できたのですが、カンマがつくのみでやはり小数点以下は表示されなくなってしまいました。

twokidsdad
質問者

補足

回答ありがとうございます。 列を指定したい場合はどのようにするのが良いでしょうか。 Cells(y, x).NumberFormatLocal = F ここがエラーになってしまいぬいた状態ではできました。 がカンマがつきません。

関連するQ&A

専門家に質問してみよう