【先着1,000名様!】1,000円分をプレゼント!

ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等)

データ件数が多すぎて、下記VBでエクスポート処理をしています。

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

お手数ですが、ご教授願います。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

例えばボタンにエクスポートの処理を書いているのでしたら


ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
xlApp.Cells.EntireColumn.AutoFit
xlApp.Range("A1").Select
xlApp.Visible = False

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

こんな感じで記述してください。

#1の中でxlApp.DisplayAlerts = False これは除いてください。保存しますかのメッセージが出ます。

この回答への補足

何度も有難うございます。

組み込んでみましたが。。。
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

の一番最初で、「ユーザー定義型は定義されていま
せん」とエラーが出てしまいます。

どうしたら宜しいでしょうか?

補足日時:2005/04/22 18:16
    • good
    • 0

ObjectLibraryが設定されていないと思われます。


メニューのツールのマクロからVisualBasicEditorを開き
ツールの参照設定で
Microsoft Excel *.* ObjectLibrary にチェックを入れて下さい。*.*はお使いのAccessのバージョンに合ったものが表示されているはずなのでそのObjectLibraryにチェックして参照するように設定してからやってみてください。

この回答への補足

有難うございましたm(__)m
無事に成功しました!!

もう一点行いたい事がありまして。。。

セルの自動設定後、ピボットテーブルも作成したいと
考えております。毎月データ件数が一定であれば、EXCELのマクロから引用したいと考えていたのですが、毎月のデータ件数が違う為(月毎に、ピボットテーブル作成の選択範囲が変わります)悩んでおります。

そもそもピボットテーブルは、ACCESSから操作可能なのでしょうか?

お手数ですが、ご教授頂けると幸いです。

補足日時:2005/04/25 09:07
    • good
    • 0

エクスポート処理に下記の必要な部分を追加してみてください。


Excelの\XX.xlsにエクスポートしたデータ巾にセルを合わせます。(\XX.xlsの部分はフルパスで指定してください)

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("\XX.xls") 
  Set xlSheet = xlBook.Worksheets(1)

  xlApp.Cells.Select         
  xlApp.Cells.EntireColumn.AutoFit
  xlApp.Range("A1").Select
  xlApp.Visible = False

  xlApp.DisplayAlerts = False
  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing

試してみてください。

この回答への補足

有難うございますm(__)m

実は私、VB超初心者でして。。。

Dim xlApp  As Excel.Application
Dim xlBook  As Excel.Workbook
Dim xlSheet As Excel.Worksheet

の後に

DoCmd.TransferSpreadsheet acExport, 8, "xxx)", "\XXXX.XLS", True, ""

Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open("\XX.xls") 
  Set xlSheet = xlBook.Worksheets(1)

  xlApp.Cells.Select         
  xlApp.Cells.EntireColumn.AutoFit
  xlApp.Range("A1").Select
  xlApp.Visible = False

  xlApp.DisplayAlerts = False
  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing

で良いのでしょうか?

すみません。素人でm(__)m

補足日時:2005/04/22 16:41
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess→Excelへエクスポートすると日付の表示形式が変化する

DoCmd.OutputTo acOutputQuery, "クエリ1", "MicrosoftExcelBiff8(*.xls)"

のように
クエリをエクセルへエクスポートしたときに
もともと「2009/05/27 23:21:00」と入力されていた(DATE型の)日付の形式が
エクスポート後は「27-May-09」に変わってしまいます。
そのままの書式でエクスポートするにはどうすればいいですか?

よろしくお願いします。

Aベストアンサー

> そのままの書式でエクスポートするにはどうすればいいですか?

確認したところ、
 1)クエリで書式設定あり
  → クエリの書式設定を反映
 2)クエリで書式設定なし・テーブルで書式設定あり
  → テーブルの書式設定を反映
 3)クエリ・テーブルとも書式設定なし
  → Excel側(OS側?)の設定で表示
となるようです。
(Accessでの書式設定が、Excelの『セルの書式設定』に引き継がれる)

ですので、テーブルかクエリで、日付表示フィールドで明示的に
書式を設定してやれば、Excel側もその設定に従った書式で
表示するようになると思います。


※テーブルの場合は、デザインビューの左下の『標準』タブの
  『書式』で設定できます。
※クエリの場合は、デザインビューで開いた後、Alt+Enter等で
 プロパティシートを表示し、画面下半分(フィールド追加領域)
 で対象フィールドを選択してフィールドのプロパティを表示させ、
 『標準』タブの『書式』で設定します。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessからExcelの出力について

お世話になります。

AccessのテーブルデータをExcelへ出力をしたいのですが可能でしょうか?
詳細は、既存のExcelのファイルのセルを指定し、罫線を描いたり、データ型を指定したり、フォント、文字サイズ、セルの背景色、ヘッダーの指定、印刷時の用紙サイズ、印刷時の余白の設定なのですがAccessから操作できますでしょうか?

宜しくお願い致します。

Aベストアンサー

>コンパイルエラー:修飾子が不正です。
失礼しました。ざっと書いたものでSheetの宣言が一つ抜けてました。
Dim xlSheet As Excel.Worksheet
を追加してください。
Dim objExcelApp As Workbook
Dim strExcelFile As String
Dim strExcelSheet As String
Dim xlSheet As Excel.Worksheet '←追加
そして記述中の宣言以外の部分で使っているstrExcelSheet.Cells(1, 1).Value = "12"の部分から以下のstrExcelSheet.をxlSheet.に置き換えてください。
xlSheet.Cells(1, 1).Value = "12" のように。
VBEの編集の置換で簡単に出来ますので。

>データ型の指定・セルの背景色ヘッダーの指定の操作方法
Range("A1").Select
With Selection.Interior
.ColorIndex = 5 'ExcelのカラーNoの数字で指定
.Pattern = xlSolid
End With

ヘッダはWith xlSheet.PageSetupの中で
.LeftHeader = ""
.CenterHeader = "&""MS Pゴシック,太字""&16ヘッダ名"
.RightHeader = ""
で指定できます。上記は中ヘッダにゴシック太字ヘッダ名を指定。フッタは同様に下記で指定。
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""

Range("A19").Select
Selection.NumberFormatLocal = "\#,##0;\-#,##0;\0"
日付なら  = "yyyy/mm/dd;@" のように指定。

>コンパイルエラー:修飾子が不正です。
失礼しました。ざっと書いたものでSheetの宣言が一つ抜けてました。
Dim xlSheet As Excel.Worksheet
を追加してください。
Dim objExcelApp As Workbook
Dim strExcelFile As String
Dim strExcelSheet As String
Dim xlSheet As Excel.Worksheet '←追加
そして記述中の宣言以外の部分で使っているstrExcelSheet.Cells(1, 1).Value = "12"の部分から以下のstrExcelSheet.をxlSheet.に置き換えてください。
xlSheet.Cells(1, 1).Value = "12" のように。
VBE...続きを読む

QAccessからExcelに罫線付で出力したい

Access2010使用。

AccessのクエリからExcelにエクスポートした際、罫線などの体裁を整えて出力したいと思っています。

データは下記のコードでなんとか出るようになりましたが、このコードの中に罫線を引くコードを
入れる方法がどうしてもわかりません。

検索してあれこれ試しましたが「オブジェクトがない」や「サポートしてない」などエラーメッセージ
が出てしまい、VBAの基礎知識がない私にはどうしてもわかりませんでした。
どうかアドバイスお願いいたします。
(クエリ名は Q_ABC とします)

やりたいことは

・データがある行列に格子線を引き、1行目の項目列の下は二重線、外側は太線にしたい。
・行の高さを数値で指定したい。

です。なお、行数はその都度増えます。

また、できれば
印刷する際の設定で用紙を「A3横」で、常に横1ページに入るように縮小率を設定しておきたい
のですが可能でしょうか?

どうぞよろしくお願いします。

Private Sub コマンド0_Click()
Set xlapp = CreateObject("Excel.application")

Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim rs As New ADODB.Recordset
Dim objEXCEL As Object
Dim nYLINE As Integer
Dim nXLINE As Integer
Dim nRCNT As Integer
Dim strWORK As String

Set xlApp = CreateObject("Excel.Application")

Set objEXCEL = CreateObject("Excel.Application")

objEXCEL.Visible = True

objEXCEL.Workbooks.Add

objEXCEL.sheets.Add

re.Open "Q_ABC", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

'見出しを書き込む
objEXCEL.Range("A1") = "ID"
objEXCEL.Range("B1") = "氏名"
objEXCEL.Range("C1") = "住所"

 == 以下T列まで省略 ==

'項目名をセルの中央に
objEXCEL.Range("A1:T1").HoraizontalAlignment = xlHAilignCenterAcrossSelection

Dim yLINE As Integer '行カウンター

yLINE = 2  'ループ処理

While rs.EOF = False

'accessからデータのセット

objEXCEL.Cells(yLINE, "A") = rs.Fields("ID")
objEXCEL.Cells(yLINE, "B") = rs.Fields("氏名")
objEXCEL.Cells(yLINE, "C") = rs.Fields("住所")

== 以下T列まで省略 ==

rs.MoveNext
yLINE = yLINE + 1
Wend

'シートの列幅の自動調整
objEXCEL.Cells.EntireColumn.AutoFit

rs.Close
Set rs = Nothing

End Sub

Access2010使用。

AccessのクエリからExcelにエクスポートした際、罫線などの体裁を整えて出力したいと思っています。

データは下記のコードでなんとか出るようになりましたが、このコードの中に罫線を引くコードを
入れる方法がどうしてもわかりません。

検索してあれこれ試しましたが「オブジェクトがない」や「サポートしてない」などエラーメッセージ
が出てしまい、VBAの基礎知識がない私にはどうしてもわかりませんでした。
どうかアドバイスお願いいたします。
(クエリ名は Q_ABC とします)

や...続きを読む

Aベストアンサー

>> 印刷する際の設定で用紙を「A3横」で、常に横1ページに入るように縮小率を設定しておきたい
のですが可能でしょうか?

を忘れていました。

Excel の印刷がらみの設定は PageSetup を変更して行います。

  ' ズーム設定(自動で行うので設定はしない)
  objEXCEL.sheets(1).PageSetup.Zoom = False
  ' ページの高さに合わせる
  objEXCEL.sheets(1).PageSetup.FitToPagesTall = False
  ' ページの幅に合わせる(下記は横のページを1ページで納める設定です)
  objEXCEL.sheets(1).PageSetup.FitToPagesWide = 1
  ' 用紙サイズの設定(A3 サイズ)
  ' その他の定数については、http://msdn.microsoft.com/ja-jp/library/office/ff834612.aspx を参照
  objEXCEL.sheets(1).PageSetup.PaperSize = xlPaperA3
  ' 印刷方向(横向き設定、縦の場合は xlPortrait)
  objEXCEL.sheets(1).PageSetup.Orientation = xlLandscape

>> 印刷する際の設定で用紙を「A3横」で、常に横1ページに入るように縮小率を設定しておきたい
のですが可能でしょうか?

を忘れていました。

Excel の印刷がらみの設定は PageSetup を変更して行います。

  ' ズーム設定(自動で行うので設定はしない)
  objEXCEL.sheets(1).PageSetup.Zoom = False
  ' ページの高さに合わせる
  objEXCEL.sheets(1).PageSetup.FitToPagesTall = False
  ' ページの幅に合わせる(下記は横のページを1ページで納める設定です)
  objEXCEL.sheets(1).PageSet...続きを読む

QVBAでAccessからExcelのセルフォーマットを変更するには?

タイトルのとおり、VBAでAccess2003からExcel2003のセルフォーマットを変更しようとしていますが、Excel上のVBAで利用できるWorksheet-Range-Selectやその他いくつかのメソッドが、Accessからは利用できません(Accessでは"Microsoft Excel 11.0 Object Library"を参照しています)

実現したいのは、AccessからExcelのセルの結合をすること・書式(文字列、日付等)を変更することなのですが、これらのメソッドを利用できないとなると、ほかに方法が思いつきません。

もしご存知でしたらお教えいただければ幸いです。

Aベストアンサー

> Excel上のVBAで利用できるWorksheet-Range-Selectやその他いくつかのメソッドが、
> Accessからは利用できません

使えます。が、Access(など他のアプリ)から使う場合は、Application オブジェクト
から参照する必要があります。

コード例としては、

Visual Basic を使用して Microsoft Excel を自動化する方法
http://support.microsoft.com/kb/219151/ja

こちらが参考になると思います。
また、以下についても参照してください。

ダウンロード センターで入手可能な Microsoft Office 2000 オートメーションのヘルプ ファイル
http://support.microsoft.com/kb/260410/ja

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QAccessからExcelにエクスポートする時に常に上書きしたい

AccessのテーブルをExcelへ出力する際に、常に同じファイル名で保存する場合、
2回目以降は、上書きするかどうかを尋ねるメッセージが表示されます。
「常に上書きする」と決まっているので、メッセージを表示させたくないのですが、どうしたらいいのでしょうか。

現在、マクロで作成しており、出力の前後に「メッセージの設定」を入れてみたのですが、ダメでした。
VBAなら可能でしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

エクスポートする直前に、元のファイルを削除するか、移動するか、リネームするのはどうですか。(VBAですが)


削除
Kill "C:\エクスポート.xls"

移動
Name "C:\エクスポート.xls" As "C:\移動後\エクスポート.xls"

リネーム
Name "C:\エクスポート.xls" As "C:\エクスポート_1.xls"

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング