プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

なかなか面倒くさい。


エクセルに向いてない課題かな。
文字列で一貫して扱うことで実現した。
例データ
書式付  原テキスト 桁数    先頭からのカンマの位置
123.234123.23474
123.00123.0064
232320
23.123.143
23.023.043
23.00023.00063
234.234.44
元のデータの通り再現するよう細工した。
その後セル上でデータが変わるとおかしくなる(やり直さないとだめ)。危険はある。
どうしても拘るなら「単純に文字列でセットして、右詰に配置をッする」とかの方法もあり、計算は*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関数でうまく行かなかったが,私のやり方が悪いだけかと。
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2010/12/08 15:32

#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
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2010/12/08 15:35

少数以下が絶対に4桁以内と分かっているなら


書式を以下のようにします。
#,##0.####
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/12/08 15:31

固定した書式では無理でしょう。


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
ここがエラーになってしまいぬいた状態ではできました。
がカンマがつきません。

補足日時:2010/12/01 18:27
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/12/01 18:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています