- ベストアンサー
エクセルマクロ小数点桁数
テキストデータからエクセルマクロで吸出しを行う中で 数値データをNumberFomatLocalでカンマと小数点を指定したいのですが 小数点以下がセルによって2桁3桁だったり、なかったりとバラバラで データに合せてそのまま反映させたいのですが設定する方法がありますでしょうか。 "#,##0.0"だと当然関係なく小数点以下は1桁で反映されてしまいます。 .00でも表示させておきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
なかなか面倒くさい。 エクセルに向いてない課題かな。 文字列で一貫して扱うことで実現した。 例データ 書式付 原テキスト 桁数 先頭からのカンマの位置 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関数でうまく行かなかったが,私のやり方が悪いだけかと。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
#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
お礼
お礼が遅くなりました。 ごさっしのとおり、インポートした数字にカンマつけたいということです。 .00でも表示したいのは経理的な書類の為です。 うまく稼動させることができなかったのでせっかくですが 手作業にて処理したいと思います。 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
少数以下が絶対に4桁以内と分かっているなら 書式を以下のようにします。 #,##0.####
お礼
お礼が遅くなり申し訳ございません。 書式を変更しましたが、エラーとなってしまいました。 手作業で変更したいと思います。 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
固定した書式では無理でしょう。 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
お礼
補足がふそくしてました。 エラーを脱出できたのですが、カンマがつくのみでやはり小数点以下は表示されなくなってしまいました。
補足
回答ありがとうございます。 列を指定したい場合はどのようにするのが良いでしょうか。 Cells(y, x).NumberFormatLocal = F ここがエラーになってしまいぬいた状態ではできました。 がカンマがつきません。
お礼
お礼が遅くなり申し訳ございませんでした。 やはり、無謀なことをしようとしていたんですね。 御回答いただいたもので試してみましたが、私ではうまくいきませんでした。 手作業でがんばります。 ありがとうございました。