- 締切済み
VBAでのファイル出力形式
VBAにてファイルに数値を出力する際 0.1を .1000+E00 -1.23を -.123+E01 の様に 1.指数表記 2.小数点の前の0は表記しない 3.文字長さは一緒 という形式で出力したい場合にはどうすれば良いのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>+E01 の部分は、理系の常識と違うが、これを質問のように(意識的に)拘るのか。 例えば一般には+部分はEの後に来て表記は、E+01だろう。 ーー A4に数値置いた例。 色々なケースをテストできてないが。 0はどうするか、質問ではわからないので、下記は手抜き。 下記でMsgboxのところを文字列変数に代入に変え、その文字列をファイルの項目として書き出す。 Sub Macro1() a = Range("A4") Select Case a Case Is > 0 MsgBox Format(Range("A4"), ".0000E+00") Case Is < 0 MsgBox Format(Range("A4"), ".000E+00") Case Else MsgBox Format(Range("A4"), "0") End Select End Sub
- n_na_tto
- ベストアンサー率70% (75/107)
""が無駄でした。修正します。 表示形式:ユーザー定義 .0000E+00;-.000E+00 コード Dim myName As String Dim myBook As Workbook Dim myRng As Range myName = "\test001.txt" 'テキストファイル名 Set myBook = ActiveWorkbook With ActiveSheet.Cells Set myRng = Application.Union(.SpecialCells(xlCellTypeConstants, 1), .SpecialCells(xlCellTypeFormulas, 1)) End With With myRng .NumberFormat = ".0000E+00;-.000E+00" myBook.SaveAs Filename:=myBook.Path & "\test001.txt", _ FileFormat:=xlText .NumberFormatLocal = "G/標準" End With
- n_na_tto
- ベストアンサー率70% (75/107)
No.1です。 シート全体の数値を対象にしているので、 日付の入っているところも変換してしまいます。 その場合は 列を指定するか、 ループしてIsNumericで判定するコードに 変更してください。
- n_na_tto
- ベストアンサー率70% (75/107)
VBAを使わなくても 表示形式:ユーザー定義 .0000E+00;"-".000E+00 としてからテキスト形式で 保存してはどうでしょうか? 無理してVBAでやるなら、 下のコードで近いことができるのではないか と思います。自信ないですが... Dim myBook As Workbook Dim myRng As Range Set myBook = ActiveWorkbook With ActiveSheet.Cells Set myRng = Application.Union(.SpecialCells(xlCellTypeConstants, 1), .SpecialCells(xlCellTypeFormulas, 1)) End With With myRng .NumberFormat = ".0000E+00;""-"".000E+00" myBook.SaveAs Filename:=myBook.Path & "\test001.txt", _ FileFormat:=xlText End With
お礼
ご指摘通り+EはE+の間違いでした。 Format指定の方法があったのですね、試したところうまくいきました。 ありがとうございます。