AccessVBAで、Excelのシートを削除したいです。
AccessのクエリをExcelの指定したシートにエクスポートする処理をしたいのですが、
同じ名前のシートが存在すると
「テーブル○○○は既に存在しています」
とゆうエラーになってしまいます。
上書きしてくれれば良いのですが、上書きされないのですよね?

いろいろ調べたのですが、ExcelVBAでシートを削除する方法しか見つけることが出来ませんでした。

エクスポートはODAを使用せずに、
SELECT * INTO ~文で実行しています。

初心者です。よろしくお願いいたします。

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

A 回答 (3件)

サンプルが必要なら 補足してください

    • good
    • 0

もしも 逆に Excelで Accessのデータをインポートできるなら


その方法でもいいでしょうか
決まったシートにエクスポートするなら そのあとでExcelを開くと思います
それなら Accessから出す のではなく Excelにボタンを付けて
毎回 同じ場所に Accessのデータを取り出す という機能をつければ
Excelの処理がスムーズにできると思います

シートのボタンでスタート 前回データを消去して インポート
http://www.happy2-island.com/vbs/cafe02/capter00 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
その逆の発想はすごいですね。思いつきませんでした。
業務のためのものでしたので、
Excelを基準にしていいものかどうかは別問題ですが、
こうゆう考え方もあるんだなと関心しました。
この方法でも試してみたいと思います。
驚きです。

お礼日時:2007/11/14 09:46

>ExcelVBAでシートを削除する方法しか見つけることが出来ませんでした


>初心者です,
をエクセルVBあの初心者とすれば、鉄則は「マクロの記録」が使えないか、考えることです。
Sub Macro1()
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.Delete
End Sub
ーー
Sub test01()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
MsgBox sh.Name
Next
End Sub
でSheet2が消えたことは間違いない。
ーー
削除可か警告が出ます。
出さないようにするため
Sub test02()
Application.DisplayAlerts = False
Sheets("Sheet3").Select 'Sheet3に変えた
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub
これで出ません。用意はできなした。
ーー
初心者のうちは、一気にACCESSVBAとの連携は余りお勧めできませんが(エクセルVBAでも上級の課題です。)
ACCESSのモジュールに
Sub test04()
Dim exapp As Object
Dim wb As Object
Set exapp = CreateObject("Excel.Application")
exapp.Visible = True
myFLName = "C:\Documents and Settings\xxxx\My Documents\" & "Book1.xls"
Set wb = exapp.workbooks.Open(myFLName)
exapp.DisplayAlerts = False
wb.Sheets("Sheet4").Delete
exapp.Save
exapp.DisplayAlerts = True
Set exapp = Nothing
Set wb = Nothing
End Sub
この辺はむつかしいです。
何か起こるとエクセルVBAを知り抜いていないと途方にくれる。
エクセル側だけで実行できるやり方から始めるべきです。

この回答への補足

ありがとうございます。
ExcelVBAは多少さわったことがあります。
でも多少です…
ExcelVBAからExcelをいじることは調べたら結構出てくるので、
わかりやすかったですが、
AccessからExcelを見るのが本当に難しいです。
業務で使うため、ゆっくり勉強していられなくて、
焦っていました。

補足日時:2007/11/14 09:38
    • good
    • 0

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

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

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

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

QエクセルVBAでファイルを連続して処理する方法は

エクセルVBAで、エクセルファイルを開いた状態で特定処理を行う仕組みを作りました。
ただ、複数のファイルを処理したいのですが、いちいちファイルを開いてから処理しなければならないため効率が今ひとつです。
ファイル名称をテーブル化するなどして、一気に連続して処理するようにしたいのですが、どのように行えばいいでしょうか。

また、処理したいのは、更新日付が一定日以降のエクセルファイルです。
更新日付と対象ファイルのフォルダーを指定すれば、更新日がそれ以降のファイルを検索し、それが順次処理されていくようなVBAをつくりたいと考えています。

部分的にでもよいので、どなたか分かる方、教えてください。
ちなみにエクセルのバージョンは2000です。
よろしくお願いします。

Aベストアンサー

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLSファイル順次処理()

  Dim fso As FileSystemObject
  Dim sDir As String
  
  ' // 日付のフィルタ条件設定 例)10日前の 0:00 以降更新のファイルを対象とする場合
  mDateFilter = DateAdd("d", -10, Date) + TimeValue("00:00:00")

  ' // 対象ファイルのあるフォルダを指定
  sDir = BrowseForFolder()
  If Len(sDir) = 0 Then
    Exit Sub
  End If

  Set fso = CreateObject("Scripting.FileSystemObject")
  
  Dim fld As Folder
  Dim iRes As Integer
  
  If fso.FolderExists(sDir) Then
    Set fld = fso.GetFolder(sDir)
    iRes = 0
    If fld.SubFolders.Count > 0 Then
      iRes = MsgBox("サブフォルダも検索しますか?", _
             vbYesNoCancel Or vbInformation)
    End If
    Select Case iRes
      Case vbYes:  Call FindFiles(fld, True)
      Case vbNo, 0: Call FindFiles(fld, False)
      Case Else:  ' // User Cancel
    End Select
  End If
  
  Set fld = Nothing
  Set fso = Nothing


End Sub

' // XLS ファイルを検索するサブプロシージャ
Private Sub FindFiles( _
  ByRef fld As Folder, _
  ByVal fCheckSubfolders As Boolean _
)

  ' // ファイルへの処理
  Dim f   As Object
  For Each f In fld.Files
    If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then
      If f.DateLastModified >= mDateFilter Then
        ' // 処理例
        Call MainProc(f)
      End If
    End If
  Next

  ' // サブフォルダ検索オプション
  Dim subFolder As folder
  If fCheckSubfolders Then
    ' // 再帰呼び出し
    For Each subFolder In fld.SubFolders
      Call FindFiles(subFolder, True)
    Next
  End If

End Sub

' // メイン処理 -- FindFiles から順次呼び出されます
Sub MainProc(ByRef f As file)

  ' // ここにご自分で書いたプロシージャを
  ' // とりあえず、セルにでも書き出してみます
  Dim i As Long
  i = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Cells(i, "A").Value = f.Name
  Cells(i, "B").Value = f.DateLastModified

End Sub

' // フォルダ選択ダイアログ
Private Function BrowseForFolder() As String

  Const BIF_RETURNONLYFSDIRS = &H1

  Dim fld As Object
  Set fld = CreateObject("Shell.Application") _
       .BrowseForFolder(0&, "選択します", BIF_RETURNONLYFSDIRS)
  If Not fld Is Nothing Then
    BrowseForFolder = fld.Self.Path
  End If
  Set fld = Nothing

End Function

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLS...続きを読む

QExcelシートのグループ化時に、一つのシートのみに入力したい(勝手に全シートに入力しないでほしい)

以前検索について質問させていただいたのですが、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2333302

シートをグループ化するのはいいのですが、グループ化した状態で入力を行うと、(入力したくない)他のシートにも入力されてしまいます。具体的には、Sheet"A"のA1に入力すると、Sheet"B"やSheet"C"のA1にまで変更が反映されてしまいます。今になってそのことに気付いて、データがかなり破壊されてしまい、修復する気も起こりません(TT)

関係ないシートをクリックし、グループ化を解除して入力すれば問題ないのでしょうが、データベース的に使っており検索をしょっちゅうかけるので、不便きわまりません。データを複数シートに分けたのがそもそもの間違いだったのでしょうか?

以上を踏まえ、複数シートに分散したExcelデータベースで検索をひんぱんにかけ、グループ化時にもそのシートにだけ入力したいのです。

何かいい解決案はないでしょうか?

Aベストアンサー

皆さんがおっしゃるようにシートを1枚にする手間を1度だけかけたほうが楽だとは思うのですが・・・。
でも、質問者様の言いたいことも分からないでもないです。
いろいろ考えましたが、マクロを使う以外にいい解決案が浮かびません。

検索して修正ならば・・・検索ではなくCtlr+Hで置換を行えば、該当のシートにのみ変更が反映されます。
(全て置換ではなく、次を検索→該当のものが選ばれた状態で置換と行います)

ただ、なんとなく聞いていると検索は検索、入力は入力で別の作業ということなのかな?
それなら検索だけVlookupなどで作ってあげればいいと思いますが・・・。(全てのシートの最上列に作っておけばどこからでも使えるし)

あとはシート数にもよりますが、マウスを使わずに行えば、少しは作業が楽になるかも知れません。
検索をかけるときはCtrl+Fで検索し、フォームはAlt+F4で閉じます。シートの変更は右手でCtrl+PgUpやPgDn・・・と言うようにやるとか。

全部のシートを選ぶのはたとえば
Sub 全シート選択()
Worksheets.Select
End Sub
こんな記述を書くだけです。
いい機会なのでマクロにも手を出して見てはどうですか?

余談ですが、「グループ化時に、シートの書き込みをすると全シートに書かれてしまう」のは仕様です。
書式設定なんかも全て全シートに適用されるので便利だと思いますが・・・。

皆さんがおっしゃるようにシートを1枚にする手間を1度だけかけたほうが楽だとは思うのですが・・・。
でも、質問者様の言いたいことも分からないでもないです。
いろいろ考えましたが、マクロを使う以外にいい解決案が浮かびません。

検索して修正ならば・・・検索ではなくCtlr+Hで置換を行えば、該当のシートにのみ変更が反映されます。
(全て置換ではなく、次を検索→該当のものが選ばれた状態で置換と行います)

ただ、なんとなく聞いていると検索は検索、入力は入力で別の作業ということなのかな...続きを読む

QエクセルVBA 2千万行のCSVファイルを開きたい

上から順に読み込み、順次処理していき最終的には全部処理します。CSVファイルは読むだけです。

やり方はいくつか考えられます。
1
100万行ずつシートに読み込み、終わったら次を読み込む。CSVファイルは開きっぱなし。

2
100万行ずつのエクセルファイルに分割し、順次開いて処理。ファイル開閉に時間がかかる

3
2千万行の巨大な配列に代入し、順次処理。
CSVファイルは閉じることが出来る。

3がいいように思えますが、どうでしょうか?使用メモリは1と同じですか?

Aベストアンサー

> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。

それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。

だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。

なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。

QExcelで住所録。最初にページ設定して同じ項目で4シートあります。これを1シートに結合させるには。

住所録を作った時に最初ページ設定をして、1シートずつ独立した物を作ってしまいました。1シート目を誕生月毎に括って1月生まれ、2月生まれと保存し、2シート目に移って同じ様に保存しようとしたら出来ませんでした。内容は同じです。一つのシートに結合させるにはどうしたらいいでしょうか。

Aベストアンサー

すみませんが意味がさっぱりわかりません。

>内容は同じです。
4枚のシートに同じデータが入力されているのなら、わざわざ1枚のシートにまとめる必要はないですね

同じ形式のシートが4枚あって、それぞれに入力されているデータを1枚のシートにまとめたいということであれば、たかだか4枚ですからコピー&ペーストでまとめても大した労力ではないでしょう。

それとも4枚のシートのデータが一部重複していて、1枚のシートにまとめてから重複データを取り除きたいという意味ですか?
それであればコピー&ペーストで1枚のシートにまとめた後で「データ」→「フィルタ」→「フィルタオプション」で「重複したデータは無視する」で除外することは可能です。

とにもかくにも質問の意味をもう少し分かるように補足していただかないと回答のしようがありません。

QVBAからファイルをセル入力から開く方法

VBAからファイルをセル入力から開く方法

だれかご教授頂けませんでしょうか?VBAからエクセルファイルを開こうとしています。
そこでシート1のA1セルにファイル名を記述してあり、そのファイル名からファイルを開く事は出来ますでしょうか?
何か良い方法がありましたら教えて頂きたいのですが。

Aベストアンサー

下記で試してください。
パス名の最後には\を付けるようにしてください。

Workbooks.Open "D:\ABC\" & Sheets("シート1").Range("A1").Value


ワークシートのイベントを使う方法も考えられると思います。
BeforeDoubleClickイベント辺りを使って
ファイル名セルをダブルクリックすれば

Excel(エクセル) VBA入門:ワークシートのイベント
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

QEXCELで複数のシートの中から特定のシートを連続印刷したいです。

EXCELで複数のシートの中から特定のシートを連続印刷したいです。シート1、シート2だけを連続印刷出来るマクロを教えて下さい。

Aベストアンサー

#02さんの言われるとおりマクロ記録でもできると思います。
こんなマクロになります。マクロはALT+F11でVBE画面を開き、右上のVBAprojectの該当ブック名を右クリック→挿入→標準モジュールで開く画面に貼り付けます。マクロの実行はALT+F8でマクロ一覧を開き、マクロ名を選んで「実行」です。

Sub Macro1()
  Sheets(Array("Sheet1", "Sheet2")).Select
  ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q【Excel】シート1に入力した内容を、シート2にも表示させたいのですが…

例えば、シート1には、1年分の予定が日付ごとに入力されていて

予定
10/1 歯医者
10/2 デート
11/2 歯医者
11/5 試験
12/3 面接


シート2には、1週間のスケジュールがより細かく入力されていて

日付 曜 午前 午後 予定
11/1 月 仕事 仕事
11/2 火 仕事 仕事
11/3 水 仕事 仕事
11/4 木 休み 仕事
11/5 金 仕事 休み
11/6 土 休み 休み
11/7 日 休み 休み


シート2の「予定」の列に、シート1で予め入力されている
日付別の情報を元に、自動的にその日の予定が表示されるようにしたいと考えております。

日付 曜 午前 午後 予定
11/1 月 仕事 仕事
11/2 火 仕事 仕事 歯医者←コレ
11/3 水 仕事 仕事
11/4 木 休み 仕事
11/5 金 仕事 休み 試験←コレ
11/6 土 休み 休み
11/7 日 休み 休み


自分の知識ではIF関数を使うという方法を思いつくのが限界でした。
もっと便利で効率的な方法は無いでしょうか。

Excelを自らの脳細胞の如く使いこなす玄人の方々に、
是非そのお知恵をお借りしたく存じます。

例えば、シート1には、1年分の予定が日付ごとに入力されていて

予定
10/1 歯医者
10/2 デート
11/2 歯医者
11/5 試験
12/3 面接


シート2には、1週間のスケジュールがより細かく入力されていて

日付 曜 午前 午後 予定
11/1 月 仕事 仕事
11/2 火 仕事 仕事
11/3 水 仕事 仕事
11/4 木 休み 仕事
11/5 金 仕事 休み
11/6 土 休み 休み
11/7 日 休み 休み


シート2の「予定」の列に、シート1で予め入力されている
日付別の情報を元に、自動的にその日の予定が表示されるよ...続きを読む

Aベストアンサー

ちょっとSheet1は違ってきますが
Sheet1
A B
予定
11/1
11/2 歯医者
11/3
11/4
11/5 試験
11/6
11/7

Sheet2
A B C D E
日付 曜 午前 午後 予定
11/1 月 仕事 仕事
11/2 火 仕事 仕事 歯医者←コレ
11/3 水 仕事 仕事
11/4 木 休み 仕事
11/5 金 仕事 休み 試験←コレ
11/6 土 休み 休み
11/7 日 休み 休み

ならば
Sheet2のE2に
=Sheet1!B2と入力して
E3以下はE2をコピーし貼り付ければ
Sheet1 B列に入力した文字がSheet2 E列にも表示されます。

Q他のExcelファイルのVBAコードを検索したい

他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。

仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。

「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。

なお環境はWindowsXPのExcel2003です。
よろしくお願いいたします。

Aベストアンサー

開いたブックにあるVBAコードをテキストに出力する方法
Sub VBExport(WKB As Workbook)
  Dim A, B
  Set A = WKB.VBProject.VBComponents
  For Each B In A
    B.Export "C:\~" '★テキストファイルでエクスポート
    xxxxxx '★上記テキストファイルを調べる処理
  Next
End Sub
ブックやシートにあるコードも(空でも)出力されます。
もし、標準モジュールのみ処理したい場合は「B.Type = 1」に限り
エクスポートします。

QExcel2003で作成したワークシートがExcel2007では一部に不具合あり。

Excel2003で作成したマクロ付きのワークシートをExcel2007で開くと、
日本語文字列の一部が正常に表示されません。
例えば、外国語と表示すべき個所が「外国…」、スポーツが「ス…」や「スポー…」と、なります。
2003では正常に表示印刷されているのに2007では異状ありの状態です。
文字数やフォントの問題ではなさそうです。上位非互換になる、考えられる原因を挙げてもらえませんでしょうか。

Aベストアンサー

列幅を広げても表示できませんか?


人気Q&Aランキング

おすすめ情報