• 締切済み

vbscripでaccdb→xlsxの対応について

Windows Server2008R2上で cscript D:\aaaa.vbs で実行しているvbscriptにてサーバーの所定のフォルダに AccessD/B、EXCELブックを作成しています。 尚、Windows Server2008R2上にはOffice2013はインストールしておりません。 Microsoft.ACE.OLEDB12.0を再配布でインストールしています。 サーバー側で作成したAccessD/B EXCELブックを Office2013をインストールしてあるクライアントPCにて vbscriptにて作成したEXCELブック内の ・文字列の頭の空白 ・シート名 についてお伺いしたいのでよろしくお願いします。 -------------------------------------------------------------------- vbscriptの内容は以下のとおりです。 TEST.accdb内のTABLE1の全レコードをxlsx形式のEXCELブックに出力するために Set cnn = cat.ActiveConnection ・ Query = "select * into [Excel 12.0 Xml;DATABASE=TEST.accdb].[シート名] from [TABLE1]" cnn.Execute Query で実行しているのですが( Microsoft.ACE.OLEDB12.0 ) ■TABLE1のフィールドの内容は ○A12B95 (○は空白の意味です) なのですがEXCELには A12B95 と、文字列の頭の空白がカットされて出力されてしまいます。 ■シート名に()などの記号が含まれているとEXCELブック表示すると 「xxxx.xlsxの一部に問題が見つかりました。可能な限り内容を回復しますか・・・・・・・・・」 のメッセージが表示され、EXCELブックを開くと修復されますがシート名の記号が記号によっては 文字化けします。 以前は Access2003、Excel2003だったので( Microsoft.JET.OLEDB.4.0 ) TEST.mdb内のTABLE1の全レコードをxls形式のEXCELブックに出力しており Query = "select * into [Excel 8.0;DATABASE=TEST.mdb].[シート名] from [TABLE1]" cnn.Execute Query で正常に'○A12B95と出力できていました。 接頭辞「'」付きで また、シート名に()などの記号が含まれていても正常にシート名が作成され EXCELブック(xls)を開くことができました。 accdb形式のAccessD/BのテーブルをExcelのxls形式とxlsx形式に出力する場合とでは 文字列頭の空白処理やシート名の扱いが異なるのでしょうか。 ■試しに以下の処理をしてみましたが (1)accdb形式のAccessD/BのテーブルをAccess自体のメニューでエクスポートしてみましたが 文字列頭の空白は xls形式では・・・・'○A12B95 接頭辞「'」あり、空白○あり xlsx形式では・・・・A12B95 接頭辞「'」なし、空白○なし となってしまいます。 (2)EXCEL2013の詳細設定のLotus1-2-3形式のキー操作チェックボックスをオンにして(1)の エクスポートしてみましたが xlsx形式では・・・・'A12B95 「接頭辞「'」は付くものの、空白○なし となってしまいます。 (3)TEST.accdb内のTABLE1のレコードセットを作成し、テキスト項目には「'」を付けて 1レコード毎EXCELブック(xlsx)に行挿入( Addnew~Update )してみましたが EXCELブック(xlsx)を開きテキスト項目の内容を確認しましたところ '○A12B95  接頭辞「'」あり、空白○ありとなるものの Lenで文字数を確認すると 「'」を含めた文字数(8)になってしまいます。EXCELでは接頭辞「'」は文字扱いしないはずなのですが。 何故かテキスト項目のセルをクリックした後、再度Lenで文字数を確認すると文字数(7)になります。    ■ ○A12B95 はオーダー番号なので番号体系を変えることはできません。○の部分は空白以外もあります。 また、レコード件数も65,000件超のためxlsx形式でないと対処できません。 vbscriptで accdb形式のAccessD/B内のテーブルをxlsx形式のExcelに出力した場合に 文字列の頭の空白がなくならないよう、またシート名に記号()等を使っても 正常にEXCLEブックが開ける方法がございましたらご教示下さいますでしょうか。 できれば1件1件読み込んで処理する以外の方法が望ましいです。 レコード件数が多く以前その処理だと数十分~小一時間かかっていたので 上記方法select * into [Excel・・・に変更し数分で処理できるようになりましたので。 無理な場合は1件1件読み込んで処理する場合は上記(3)が改善できる方法があればと思います

みんなの回答

回答No.1

AccessからオートメーションでExcelを操作してはダメですか? 日本郵便の、Ken_all.csv をAccessにインポート(12万件)、 3レコードごとに適当なフィールドの値の先頭に半角スペース付与、 これで試したところ(Office2010)半角スペースは残りました。 下記(ローカル環境)では数秒でした。 Sub vv() Dim xl As Object Dim rs As DAO.Recordset Dim t As Single t = Timer Set xl = CreateObject("excel.application") Set rs = CurrentDb.OpenRecordset("select * from ken_all", dbOpenSnapshot) xl.workbooks.Add xl.workbooks(1).sheets.Add xl.workbooks(1).sheets(xl.sheets.Count).Name = "sheet(1)" xl.sheets("sheet(1)").range("A1").copyfromrecordset rs xl.workbooks(1).saveas "E:\tt.xlsx" xl.workbooks(1).Close xl.Quit Set xl = Nothing rs.Close: Set rs = Nothing Debug.Print Timer - t Beep End Sub ↑手抜きコードですが検証用という事で・・・。

okwave1027
質問者

お礼

残念ながら現時点ではACCESSからVBAでexcel.applicationでExcelブックに出力することは考えておりません。 この機能はサーバーで処理していますが、作成するAccess、Excelブックはいろいろあるのと、利用者は複数(数十人単位)のため同時使用もありexcel.applicationを使用すると複数のEXCELブックが立ち上がりWorkブックのACTIVE制御に難があります。ローカルで1人だけならexcel.applicationでも可能ですが。 Access/Excelインストール不要とし、VBSCRIPTで (1)DBエンジン接続 (2)CSVファイル読み込み (3)Access(accdb)創生→Access(テーブル)作成→CSVファイル→Access(テーブル)書き込み (4)Access(テーブル)→Excelブック創生 の一連の処理を全ておこなっています。 Excelの接頭辞「'」、文字列の頭の空白処理の扱いが Accessメニューで単純にエクスポートしただけなのに結果が異なること Access(mdb)→Excel(xls) と Access(accdb)→Excel(xlsx) の結果が異なること自体問題だと思います。 何故異なるのかを先ず知りたいです。もし異なるのであれば単純に何らかの設定変更だけで回避できるのでしょうか。 また JET.OLEDB.4.0 ACE.OLEDB.12.0を使用した外部プログラムからの処理では Excelの接頭辞「'」、文字列の頭の空白処理、シート名に記号を含む では扱いが異なる問題は解決しないのでしょうか。

関連するQ&A

  • Office2010 ベータ版 Excel間のシートのコピー

    Office2010 ベータ版 Excel間のシートのコピー Excel2010を試用しています。 AとBのブックを開いて、Aのシートを右クリック→移動またはコピー→移動先ブック名を 選択しても、開いているBのブック名が表示されません。 AとBの保存形式を「マクロ有効ブック」「Excelブック」「Excel97-2003ブック」と同じ 形式に保存し直して試しても状況は変わりませんでした。 どなたか解決策をご存じでしたら教えてください。 よろしくお願いします。

  • EXCEL2007で作ったxlsxファイルが開けない。

    EXCEL2007で作った拡張子が「xlsx」のファイルですが、 作ったパソコンで開こうとすると 「Excelでファイル'○○○.xlsx'を開くことが出来ません。ファイル形式またはファイル拡張子が正しくありません。 ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください」と出ます。 XPなど、前のオフィスのバージョンでこのエラーが出るなら分かりますが、作ったパソコンで開かないとはどういうことでしょうか? 仕事のファイルで急いでいます。 なにとぞ開く方法を教えてください。

  • "~$[ファイル名].xlsx"というファイルは?

    Excel2007です。 共有フォルダ上にある.XLSXファイルを数人で共用してます。共用と言っても、共用機能は使用していません。 ある人がファイルを使用すると、オリジナルファイルと同じフォルダに、"~$[ファイル名].xlsx"というファイルが作成されます。 そのファイルはオリジナルのファイルよりも容量が何倍も大きく、開こうとすると、以下のメッセージが出て開けません。 「Excelでファイル[ファイル名]を開くことができません。ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください」 質問です。 ・このファイルはなんなのでしょうか。 ・その、"ある人"のExcelの設定は見られないのですが、その人はよくオリジナルファイルを破壊します。 ファイル"~$[ファイル名].xlsx"が作成されることと、オリジナルファイルが破損することと、なにか因果関係はありますか。

  • xlsで事足りる内容のファイルは、xlsxとxlsのどちらで保存した方が良いのでしょうか

    最近Office2007を導入したので、 それまでExcel2003で使っていたxls形式のファイルを 互換モードで開いて使っていますが、 内容的にExcel2007の新要素を含んでおらず、2007の新形式の xlsx形式で保存し直す必要性がないので、 Excel97-2003と互換性のあるxls形式のまま、上書き保存しています。 しかし、このファイルは今後Excel2003以前のExcelで開くことは ないので(Excel2007が入っている自分のPCでしか使わないので)、 この互換性は特に必要ないのです。 このようなファイルは、xlsとxlsx、どちらで保存、運用するのが 良いのでしょうか? 見方によって一概にどちらがよいとは言えないかもしれませんが、 この2つの形式でのファイル動作のパフォーマンス (開いたり、保存したりするときの動作の軽快さ) と、ファイルサイズは特に気になります。 他の観点からでも「こういう理由でxlsの方が良いよ」 「別の理由でxlsxの方が良いよ」というのがあったら 教えていただきたいと思います。

  • xlsをxlsxに変換しても行が増えません

    以前よりExcel2003で使用していたxlsファイルがあり、 会社のExcelが2010になっても特に問題がなかったのでそのまま使っていたのですが、 最近65536行を超えそうになったためExcel2010のファイルタブの変換をつかい、 xlsxに変換を行いました。 ですが1つだけ行が65536行のまま増えないファイルがあります。 拡張子もファイル形式もxlsxになってしまっているのでもう変換もできません。 他のファイルは104万行まで増えたのですが。。。 何か同じ症状になった方、解決策をご存知の方はいらっしゃらないでしょうか。 よろしくお願いいたします。

  • .xlsxがコンバータを使っても開けない

    Excel2000を使用しています。拡張子が.xlsxのファイルがメールで送られてきたので、 Word/Excel/PowerPoint 用 Microsoft Office 互換機能パック http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466&DisplayLang=ja をインストールし、再起動して.xlsxファイルを開こうとしましたが、 「コンバータでファイルが保存されませんでした。」 というエラーメッセージが出て、開けません。 どうすれば開けるようになるのでしょうか? お手数ですが、教えてください。よろしくお願いします。 ・Excelのバージョン(バージョン情報によると) Microsoft (R) Excel 2000 (9.0.3821 SR-1) ・OS Windows 2000

  • エクセル、ブック間でのデータ読込

    教えてください。 Excel2010を使っています。  動作:閉じているブックからデータを読み出し、開いているブックに貼付けることです。  詳細:閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215のデータを      開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35に貼付けをた      いのですが。      応用1.        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B40~C55・D40~D55        閉じているブック’2014_11月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B60~C75・D60~D75        ・        ・        ・        閉じているブック’2015_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2015集計.xlsx、、シート’集計’、セル’B20~C35・D20~D35        それぞれのブックは事前に作成します。’2014_9月.xlsx’、’2014_10月.xlsx’、’2014_11        月.xlsx’、’2015_9月.xlsx’、’2014集計.xlsx、’2015集計.xlsx      応用2.        現状        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        開いているブック’2014集計.xlsx、シート’集計’セルB19’年’、セルC19’月’を変更する        ことにより        変更        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        と言うことは可能でしょうか。 エクセルのマクロは初心者で苦労をしています、ご教授頂ければ幸いです。 よろしくお願いいたします。        

  • エクセルシートをファイル名+シート名で保存したい

    エクセルのブック内にある複数のシートを分割して保存するとき ブック名+シート名.xlsx とファイル名を付けて保存する方法があれば教えていただけないでしょうか。 よろしくお願いします。

  • Excelファイル連続置換vba

    Excelで複数の文字列を一気に置換するvbaを教えていただけないでしょうか。 Book2の置換リストをBook1のSheet1に完全一致で置換したいのです。 Book1.xlsx:元ファイル Book2.xlsx:置換リスト ※下記のような配列 A列 B列 1 01_1 2 02_2 3 03_3 4 04_4 以上です。 よろしくお願いいたします。

  • Access2007のエキスポートについて

    Access2007でマクロを使ってExcel2007のファイル(xlsx)形式へエキスポートします。その際、 ・「ワークシート変換」を指定 ・ワークシートの種類に「Excel Work book」 ・出力ファイルパスに「(絶対パス)\(ファイル名).xlsx」 としました。 既にAccess2007のテーブルには、65535行を超える200000行のレコードが入っていることが確認できてます。 マクロを実行すると、「指定範囲を広げることができません」とダイアログが出てしまい、マクロが中断し、異常終了してしまいます。 windowsXP SP2 pentium4を使用。 異常終了せず、全レコードをファイルにエキスポートする方法はありませんか? 宜しくおねがいいたします。