アプリ版:「スタンプのみでお礼する」機能のリリースについて

CSVファイルをExcelで開くと、
12桁以上の数字が値として入っていた場合、
自動で対数表示されてしまいます。

現在、16桁の数字を扱っているのですが、
16桁を対数表示してしまうと、
1の位の数字が必ず0になってしまい、
元データの値を失ってしまいます。

CSVを開くときに、全セル文字列で開くことは出来ませんか?

A 回答 (9件)

こんにちは。



話の流れからするとマクロの利用が可能かどうかは微妙なところですが、下記のコードでご希望の動作は可能です。

1.マクロ[OpenCSV]を実行
2.CSVを開くためのダイアログが表示されます
3.ファイルを選択し、OKをクリック
4.新しいブックが作成され、データを読み込みます

新規ブック上にCSVファイルのデータを読み込むため、元のCSVファイルを直接編集できるわけではありません。
この点については、マクロを改造すれば可能かと思いますが。ご参考までに。

Sub OpenCSV()

  Dim strTarget As String
  Dim n As Long, i As Long
  Dim tmp As String, buf As Variant
  Dim WB As Workbook

  On Error GoTo ExitHandler

  'CSVファイルの指定
  strTarget = Application.GetOpenFilename(FileFilter:="CSVファイル,*.csv")
  '新規ブックの作成
  Set WB = Workbooks.Add
  '読込み処理
  Application.ScreenUpdating = False
  n = FreeFile
  Open strTarget For Input As #n
  i = 1
  Do Until EOF(n)
    Line Input #n, tmp
    buf = Split(tmp, ",") 'Split関数はExcel2000以上のみ
    WB.Sheets("Sheet1").Range(Cells(i, 1), Cells(i, UBound(buf) + 1)) = buf
    If i = 65536 Then
      MsgBox "65536行以上のデータは読み込めません。中止します。", vbCritical
      GoTo ExitHandler
    End If
    i = i + 1
  Loop

ExitHandler:
  Close #n
  Set WB = Nothing
  Application.ScreenUpdating = True

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
回答が届いている事に気付かずに一人迷走していました。
一応下記のコードでVBの実行ファイルを作ってみました。
KenKen_SPさんの方がスマートでしたね・・・

Private Sub Command1_Click()

On Error GoTo Err

Dim filename As String
Dim filename_new As String
Dim rec As String

CommonDialog1.CancelError = True
CommonDialog1.DialogTitle = "変換するファイルの選択"
CommonDialog1.Filter = "CSVファイル|*.CSV"
CommonDialog1.ShowOpen

filename = CommonDialog1.filename
filename_new = Left(filename, Len(filename) - 4) & "(データ変換済).csv"

Open filename For Input As #1
Open filename_new For Output As #2
Do Until EOF(1)
Line Input #1, rec
rec = Replace(rec, """,""", """,""'")
Print #2, rec
Loop
Close #2
Close #1

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Open(filename_new)
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True
xlApp.Application.DisplayAlerts = False

Dim x, y

x = 1

Do

xlSheet.Range(xlSheet.Cells(x, 1), xlSheet.Cells(x, 200)).NumberFormat = "@"

For y = 1 To 200
If Left(xlSheet.Cells(x, y), 1) = "'" Then
If Len(xlSheet.Cells(x, y)) = 1 Then
xlSheet.Cells(x, y) = ""
Else
xlSheet.Cells(x, y) = Right(xlSheet.Cells(x, y), Len(xlSheet.Cells(x, y)) - 1)
End If
End If
Next

x = x + 1
Loop Until xlSheet.Cells(x, 1) = ""

xlApp.ActiveWorkbook.SaveAs filename:= Left(filename, Len(filename) - 4) & "(データ変換済).xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Kill filename_new

End

xlApp.Application.DisplayAlerts = True

Exit Sub

Err:

End Sub

お礼日時:2004/11/25 20:18

 もし、ACCESSをお持ちなら、16桁を超える数値が入る部分をテキストとしてテーブルを取り込んで、そのままの形でExcelへ吐き出すといったマクロを作成してみればどうですか?


 起動時にマクロを実行させて、吐き出した後に自動でACCESSを終了させれば、作業をされる方にとっては、Wクリック一回分の手間が増えただけですみますよ。

上記の作業は別にプログラムを書かなくても可能ですし、意外と簡単に出来るのでどうでしょう。全くACCESSを触ったことが無ければ、少し難しいかもしれませんが。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
Accessでそんなことまで出来るんですね。
わざわざVBで実行ファイル作ってしまいました・・・

お礼日時:2004/11/25 20:20

カテゴリから外れてしまいますけど、


どうしてもExcelでなければダメでしょうか?

私も、スキルがまちまちな第三者のユーザにCSVファイルを扱ってもらわなければならないということがありまして、そのときの結論としましては「フリーのCSVエディタを使用していただく」というのがベストでした。

結構Excel風にできていますので、ユーザさんにとっても違和感なく操作できるようでした。

選択肢の一つとしてお考え下さい。

参考URL:http://www.asukaze.net/soft/cassava/index.html

この回答への補足

ありがとうございます。
ただ、やはりExcelでないとダメなんです。
納品の形式がExcel指定なので・・・

補足日時:2004/11/25 13:11
    • good
    • 0

そもそもExcelは15桁までしか扱えなかったはずです。

この回答への補足

そのようですね。
はじめからセルの書式を数値にしてやっても、
数字を16個以上入れると0表示になってしまうみたいです。

文字列なら16桁でも問題なく表示できるので、
簡単に文字列に変換できるといいのですが・・・

補足日時:2004/11/25 10:06
    • good
    • 0

#1



すみませんでません。旧バージョンです

「データ」-「外部データの取り込み」-「データの取り込み」で取り込むとでます

この回答への補足

この方法も素人には難しい気がします。

しかも、やっかいなことにこのCSVデータには不要な改行コードが含まれているせいで、この方法だとうまく表示されません。

補足日時:2004/11/25 10:05
    • good
    • 0

あいまいな記憶で申し訳ないのですが、開く対象のcsvファイルの拡張子がcsvだとExcelはウィザードを使用しないで勝手に開いてしまったと思います。


可能でしたらファイルの拡張子をtxtなどにしてやるとウィザードが動くと思います。
もしかしたらそこで書式を設定できるかも知れません。
間違っていたらごめんなさい。

それで出来ない場合は、#3さんの回答にあるとおり、開いた後で書式設定したほうがいいと思います。

この回答への補足

確かに拡張子変更でTXTデータにしてから、
Excelで開くと書式設定が出来ました。
しかし、操作を行うのはPCの素人で、
全角と半角を間違えてしまうくらいの
レベルです。
もっと簡単な方法はないでしょうか・・・

補足日時:2004/11/25 09:57
    • good
    • 0

Excelを開いたあと、セルを全選択し、右クリックで「セルの書式設定」「表示形式」タブで「数値」を選択したらちゃんと表示できないで

しょうか?

この回答への補足

一度対数変換されてしまってから数値に戻しても、
1の位は0のままのようです。

補足日時:2004/11/25 09:54
    • good
    • 0

こんにちは。



CSVファイルをダブルクリックして開くのではなく、エクセルの[ファイル]-[開く]からCSVファイルを開きます。
そうすると、テキストファイルウィザードが表示されます。
このウィザードの3ページ目(3/3)で、列のデータ形式を設定することができます。

試してみてください。

この回答への補足

Excelから開いてもウィザードは出ないです。
やり方は合ってると思うんですが・・・

Excel2002

補足日時:2004/11/25 09:44
    • good
    • 0

エクセルからcsvを開いてください。



ダイアログにしたがって文字列指定してください

この回答への補足

ExcelからCSVを開くときにダイアログは出ないのですが・・・

補足日時:2004/11/25 09:41
    • good
    • 0

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