• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • 小数点以下の数字の桁数表示について

    VB6.0で小数点以下の数値が0の場合でも指定した桁数で0も表示するにはどのようにしたらよいですか? 例えば、四捨五入のROUND(0.195000,4)のとき返ってくる数値が「0.195」となり最後の0が表示されません。(以下は4桁表示したいのに) (小数点以下第5位が5なら切り上げで最後に1が表示されますが) エクセルだとセルの書式設定で表示桁数を設定するだけだったのですが。 FIXED関数、TEXT関数はVB6.0では使えないのですよね? VB6.0に詳しい方よろしくお願いします。お手数です。

  • Excelの小数点以下の桁数の既定値を変更する

    いつも勉強させていただいております。 Excelで数値(例えば50000)を入力して、桁区切りをすると、勝手に50,000.00と小数点第二位までが表示されてしまいます。 私はただ50,000という風になればいいだけなのですが、いちいち、セルを選択して数値の小数点桁数を0に変更するという余分な作業が発生しています。 (または、小数点桁下げボタンをクリックしたり) 桁区切りを押したときに、既定値として小数点以下は表示しないようにするにはどうしたらよいのでしょうか? 宜しくお願い致します。

  • EXCEL 小数点以下の桁数を条件によって変えるには

    G列の書式設定を数値、小数点以下0桁に設定してあります D列にある特定の文字が入力された時だけ、小数点以下の桁数を1桁にしたいのですが、どのようにすればよいでしょうか? それと小数点以下0桁、1桁の数字の桁位置をそろえることはできますか

  • エクセルのセル表示。整数は整数、小数点は小数点で。

    エクセル2003です。 セルに数値を入力した際、以下のようにすることは可能でしょうか。  (1)5と入力→5と表示  (2)5.5と入力→5.5と表示 セルの書式設定で小数点表示の設定、例えば小数点1桁表示をすると (2)はうまくいきますが、(1)は5.0となります。 これを「5」にできればベストなのですが、無理でしょうか。

  • Accessデータをテキスト変換する時、小数点以下の桁数が切れてしまう

    Accessデータをマクロを利用して、csv出力(テキスト変換)する際、 2.564580→2.56 2.125400→2.13 というように、小数第3位で切れた状態でエクスポートされてしまいます。データ自体が切り捨てられているようで、3位以下は「0」です。 データ型は、数値型-倍精度ですし、表示書式等の設定は行っていません。(また、書式設定等で小数点以下を7桁に固定してもダメです) どうすれば、もとの数値のままエクスポートできるでしょうか? よろしくお願い致します。

  • Excelで数値の小数点を揃える方法は?

    Excelの数値データで、小数点以下1桁とか2桁とかの表示にした時、整数の小数点以下を表示しない方法はありますか?しかも、小数点を中心に桁を揃えて。   12.2  300   20.4 こんな感じです。

  • エクセルで小数点以下を入力した通りに表示する

    エクセルでデータを 152.5 168.0 216.15 といった感じのデータを入力していくんですが 小数点以下が168.0など、0の場合は168と表示されてしまいますし、 セルの設定で小数点以下1桁にすると216.15は216.1になってしまいます セルの表示設定を一括で設定できないでしょうか?

  • 小数点以下の桁数

    Excelの関数で指定したセルの小数点以下の桁数を返すようなものはありますか?例えば、「1.12345」だったら「5」と返すような・・・。

  • エクセル2007での小数点以下の表示について

    エクセル2007を使用しています。 ある列のセル内に表示された数字の小数点以下において0が出る手前まで表示したいのです。 ちなみにセルにはなんらかの規則性のある式を列の1~2行目で入れておくことにします。 以下の行はそれをコピーして同じ規則性で自動的に入力してあります。 簡単に言うと「C1=1 C2=1 C3=C1+C2」とかしてC4以下にコピー等という意味です。 つまり直接数字を入力するのは序盤の数行のみということです。 その後の行は前述した一定の規則性のあるように設定したコピペです。 で、問題の箇所ですが例えば 1.62,1.93,1.9413・・・ と縦の列に表示したいのに 1.6、1.9、1.9・・・ となったりします。 そこでセルの書式設定の「分類」で「数値」を選び小数点以下何桁まで入れるか手動で設定してみましたが、直接数字を入力しないので、どの数値がどのくらいの小数点以下まで表示できるか分からないものですから、例えば小数点以下3桁まで任意に設定すると、上の例において 1.620,1.930,1.941・・・ となり末尾の0が表示されたり、全部表示し切れなかったりします。 エクセル側で自動的に小数点以下は0の手前までのみに合わせてくれる方法はあるのでしょうか。 それとも自分で見当をつけて設定しないといけないのでしょうか・・・。 よろしくお願いします。

  • 差し込み印刷での小数点表示について

    マイクロソフト2010での差し込み印刷で困っています。 エクセルの数字のデータをワードで差し込み印刷しようとすると、小数点以下が10桁くらい表示されてしまいます。  エクセルのデータをセルの設定で文字列に変更しても、数字にして小数点を1桁に設定しても同じです。  小数点第1位まで表示させるにはどうしたらいいでしょう? 初心者なので、できればわかり易い回答をお願いいたします。

専門家に質問してみよう