
AccessVBAでCSVインポート時にゼロサプレスをせずに行いたいです。
現状は下記のソースでインポートしていますが数字のみが入っているテキスト項目でゼロサプレスが行われてしまいます。
DoCmd.TransferText acImportDelim, , [テーブル名], [ファイル名]
下記のものについては事情があって対処として厳しいです。
ゼロサプレスのみを止めるよい方法はないでしょうか。
■インポート定義を使用する
⇒50種類ほど列項目が異なるテーブルがあり、また時々フォーマット変更があるため事前に定義しておくことは難しい。
■表示フォーマットを指定する
⇒5桁項目に4桁のデータであったり3桁のデータである場合があるがそれらをそのまま保持したい。
■CSV作成時にダブルクオーテーションで囲む
⇒CSVの作成側に対応依頼はしたができないとの回答があった。
現状としてわかっていることとしては、値をダウブルクオーテーションで囲うことでゼロサプレスを回避できることはわかっているため、
Accessマクロの中でExcelを呼び出しダウブルクオーテーション付で保存できないかと考えていますがうまくいっていない状況です。
Access単独、Excelを使う方法などゼロサプレスを回避できる方法をご教示願います。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
MS社のお節介?を止める手段は無いものと思います。
地道にフォーマットが変更になるたびに毎回インポートウィザードで
データ型の指定を行うか。
インポート定義の修正をVBAで行うか
http://www.ruriplus.com/msaccess/tch/tch_040.html
ファイルそのものをAccessで正常に読み込めるように
各カラムの修正を正規表現などを駆使して行うか・・・
ファイルの作成元に泣きつくか報酬をはずむか・・・
だと思います。
近道は無いんじゃないかな?
No.2
- 回答日時:
そのCSVファイルが
0012,asd,234,2012/1/1
のように区切り記号の『,』が他では使われていない場合
"1,234"のような桁区切りが無いなら少しは簡単かもしれない。
ファイルを読み込んで、Split関数で各カラムに分けて配列に
格納します。
各配列の要素ごとにデータ型の推測をします。
Isdate、Isnumeric、後述のIsZeroを関数にして使い大きく分けます。
数値型のものはさらに桁数や小数点以下をみてInteger,Long,Doubleに分類
これを十行程度おこなってデータ型を決定して
そのデータ型を元にテーブルを作成してインポート処理。
0012,asd,234,2012/1/1
1234,asd,234,2012/1/1
のようなカラム中でゼロフィルでないものが含まれない場合は
(常にゼロフィルである場合)説明下手
もう少し単純に、IsZeroでFalseになった場合だけ、Replaceで
前後を""で括ったCSVファイルを別途出力してそれをTransfer・・
してやれば良いと考えます。
少しは参考になる・・・かな?
Sub isZero()
Dim oREG As Object
Dim arg As String
Dim argCol As Variant
Dim i As Integer
arg = "0012,asd,234,2012/1/1,0.12,,0"
argCol = Split(arg, ",")
Set oREG = CreateObject("vbscript.regexp")
With oREG
.Pattern = "^0+[0-9]"
.IgnoreCase = False
.Global = True
End With
For i = LBound(argCol) To UBound(argCol)
Debug.Print argCol(i), oREG.test(argCol(i))
Next
End Sub
No.1
- 回答日時:
テーブルの列定義で、すべてテキスト型にしたらどうなりますか?
私だったら、CSVファイルをSEQに行単位で読み込んで、カンマで分解して列に格納します。
この回答への補足
テーブル定義ではテキスト型としていますがゼロサプレスされてしまう状態です。
また行単位読み込みですが、値にカンマやダブルクオーテーション、バックスラッシュが入っているため、
1文字単位での処理が必要となってしまいパフォーマンス面で厳しいです。
(200カラム程度で1万レコードを読み込むためVBAでロジックを作ることは極力避けたいです)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセスでcsvに出力した際、頭の0が消えてしまいます
Access(アクセス)
-
ACCESSのテーブルのデータで、先頭に「000」を付与するほう右方
Access(アクセス)
-
テキストでは0が表示。アクセスだと消える
Access(アクセス)
-
-
4
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
5
Access インポート
Access(アクセス)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
MS-Accessのエクスポートで異常に時間がかかるようになった
その他(データベース)
-
8
Accessのリンク先を相対パスにしたい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlite(spatialite_gui)での...
-
symfowareのSQL文in句をバッチ...
-
accessのエクスポートエラーに...
-
SQLServer2005 データのCSVファ...
-
「マスタ」と「テーブル」の違...
-
オラクルではできるのにSQLSERV...
-
accessで移動平均する方法
-
数百万件レコードのdelete
-
ACCESS2000のテーブル構造
-
SI Object Browserのテーブルス...
-
請求と入金のテーブルの作成の...
-
VBAの実行時エラー'2522'について
-
SQLで○○の値以外を持っているレ...
-
更新クエリでキー違反
-
Access VBA [リモートサーバー...
-
SELECT時の行ロックの必要性に...
-
AccessShareLock はどの程度気...
-
SQL SERFVER で外部キーのエラ...
-
大きなテーブルに対する問い合...
-
ACCESSのODBCリンクテーブルに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessのエクスポートエラーに...
-
SQL Server のデータをCSVファ...
-
SQLServer2005でフラットファイ...
-
既に使用されているので、使用...
-
エクスポート時の改行コードに...
-
ACCESSでのエクセルインポート...
-
Accessのリンクテーブルについて
-
symfowareのSQL文in句をバッチ...
-
bcpインサートでのフォーマ...
-
Access2003でのエクスポートに...
-
ACCESSでのCSVデータの自動取り...
-
DBMAGICのプログラム解析
-
bcpによる、テーブル→CSVファイ...
-
AccessでCSVインポートのゼロサ...
-
アクセスのテーブルからエクス...
-
SybaseのBCPでファイル上書き
-
SQLServer2005 データのCSVファ...
-
[SQL Server] コマンドプロンプ...
-
MS-SQLプロシージャでファイル...
-
pl/sqlでcsvファイルダウンロード
おすすめ情報