アクセス2000でテーブルを作りエクセルからVBAを使用してテーブル更新行う処理を作ったのですが元々のデータ件数と変わらないにもかかわらず
容量を見てみると元が6メガだったものが120メガにも増えています
なぜでしょうか教えてください
ちなみに件数が多い為アクセスはMDEにしています
どうか解答 よろしくお願いします

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

A 回答 (2件)

こんにちは。

maruru01です。
Accessは更新情報などをどんどん記憶していくので、開くたびに容量が増えていきます。
なので、ときどき最適化をしましょう。
最適化は、ファイルだけをいったん閉じてから、
ツール→データベースユーティリティ→最適化/修復
を選択すれば出来ます。
驚くほど容量が減ることがありますよ。
では。
    • good
    • 0
この回答へのお礼

ありがとうございました
120メガあった容量が4メガになりました

お礼日時:2001/10/03 10:11

maruru01さんの回答通り最適化しないとダメです。


エクセルからデータ更新するということは削除したり追加したり更新したりされてますよね?削除した領域はそのまま未使用のまま残ってしまいますし、更新した場合もかな?

因みに件数が多いのでMDEにするっていうのは関係ないでしょう。
VBAを中間コードにコンパイルした形で保存して、ソースを持たなくなるだけですので、フォームやレポート、モジュールがたくさんある場合は容量がかなり変わってきたりAccess内のモジュールを呼び出す速度が早くなったりしますが、エクセルのVBAからテーブルを操作する場合は、影響しません。
    • good
    • 0
この回答へのお礼

ありがとうございました
また、MDEの説明までしていただき本当にありがとうございました

お礼日時:2001/10/03 10:13

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

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

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

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

Qアクセスで複数テーブルをひとつにする方法 以下3つのテーブルがあります。 Aテーブル Bテーブル C

アクセスで複数テーブルをひとつにする方法

以下3つのテーブルがあります。
Aテーブル
Bテーブル
Cテーブル
共にフィールド数、フィールド名は共通です。
3つのテーブルのレコードをまとめてDテーブルを作る場合はどのように操作するのでしょうか?

Aベストアンサー

「ユニオンクエリ」について調べてください。

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

Qアクセスのレコード件数ではなくフォーム上に表示されたそれぞれの項目についての件数について。

アクセスで検査データを管理していますが、ひとつのフォーム上で複数の項目が表示されている中のそれぞれの項目の件数を調べたいのですが、どのような方法があるでしょうか。アクセスで初めて取り組んでいますので、関数とか利用の仕方を大まかでいいので教えてください。よろしくお願いいたします。

Aベストアンサー

用語が適切でないのでよく分からないところがありますが

項目って何なんでしょう?フィールド?
それともフィールド内の値?

1つのフィールドに陽性という値と陰性という値があって
それぞれをカウントしたいのなら

陽性カウント:Sum(IIf(フィールド名="陽性",1,0)
陰性カウント:Sum(IIf(フィールド名="陰性",1,0)

項目がフィールド名なら単純にCount関数を使用すれば
Nullを除いてカウントしてくれます

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

Qアクセスのテーブルに別のテーブルを加えて一つのテーブルにしたい

エクセルファイル内の複数のシートをインポートして複数の同じフォーマットのテーブルを作る所まではできました。次のその複数のテーブルをまとめて、一つのテーブルにしようと思ったのですが、その方法がわかりません。どなたか教えてください。

Aベストアンサー

インポート済みのテーブルの
フィールド名・データ型・並び順が一緒だとして
ユニオンクエリでまとめてからそのクエリを元にテーブル作成クエリを作成しては?
クエリのデザインビューでは出来ないのでSQLビューで行います。

select * from テーブル名1
union all
select * from テーブル名2
union all
select * from テーブル名3
;

↑をテーブル名を実際のものに替えて
SQLビューにコピペ。このクエリが出来たら後はテーブル作成クエリですが
クエリウィザードで出来ると思います。

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

QアクセスのMDEファイルでレポート印刷したい。

MDEファイルからレポート印刷できません。
下記構文の下から4行目「acViewDesign」を開けないからだと思います。
回避しようと「acViewDesign」を省くようにいろいろ試みているのですが、
レポート印刷はできるようになっても、
レポート内容(詳細セクション)が空になってしまいます。

どなたかご教授くだされば幸いです。
よろしくお願いいたします。

----------------------------------------------------------------------
Dim strDate As String
strDate = "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"

Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ"

DoCmd.OpenReport "r棚卸_結果表示", acViewDesign
[Reports]![r棚卸_結果表示].[RecordSource] = Sql
DoCmd.OpenReport "r棚卸_結果表示", acViewPreview

End Sub
----------------------------------------------------------------------

MDEファイルからレポート印刷できません。
下記構文の下から4行目「acViewDesign」を開けないからだと思います。
回避しようと「acViewDesign」を省くようにいろいろ試みているのですが、
レポート印刷はできるようになっても、
レポート内容(詳細セクション)が空になってしまいます。

どなたかご教授くだされば幸いです。
よろしくお願いいたします。

----------------------------------------------------------------------
Dim strDate As String
strDate = "#" & Month(Me.txt日付) & "/" &...続きを読む

Aベストアンサー

No6、No7と作成しておいて、何ですが。
q棚卸_結果表示を開けばそのままデータが
表示できないものであるかもしれない
という前提でつくっています。いくつかの
フォームなどのデータによるフィルタ
がかかっているかもしれない、という
ことです。

しかし、q棚卸_結果表示を単独で開けばそのまま
データが表示できるものであるとするならば、
簡易な方法で言えば、やはりフィルタをレポートの
レコードソースにそのままかけるのが一番ですが。


No1の考えをフィルタにするならば、

(1) レポートの作成
r棚卸_結果表示のレコードソースをq棚卸_結果表示
として、レポートをデザインビューで開き、プロパティから、
レコードソースの右端をクリックしてクエリビルダを
開き、フィールドをすべて設定し、メーカー名とカナの
並び替えを設定します。


(2) フォームの作成その(1)
新規作成から「q棚卸_結果表示」を基にして表形式
のフォームを作成します。名前を一応「F棚卸」とします。
出来たフォームをデザインビューにし、詳細のところに
マウスを当て、十字になったら詳細を適当に押し下げ、
残りのラベルも詳細のところにもっていきます。
次に、以下のテキストボックス、コンボボックス、
ボタンを設定します。

txt日付
txtSchコード    (テキストボックス)
txtSchSyouhinName  (テキストボックス)
cmbSchMaker    (コンボボックス)
cmbSchBunrui    (コンボボックス)
cmd抽出      (ボタン)


Private Sub コマンド20_Click()
Dim strWhere As String
Dim strQry1 As String

'Tレポート用の初期化のSQL文
strQry1 = "DELETE * FROM Tレポート用;"

'日付が必ず入力されているものとします
If IsNull(Me!txt日付) Then
MsgBox ("日付が設定されていません")
Exit Sub
End If

'strWhereを日付から設定
'strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#"

strWhere = strWhere & "#" & Year(Me.txt日付) & "/" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "#"

If Me.txtSchコード <> "" Then
strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'"
End If

If Me.txtSchSyouhinName <> "" Then
strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')"
End If

If Me.cmbSchMaker <> "" Then
strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'"
End If

If Me.cmbSchBunrui <> "" Then
strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'"
End If

Me.Filter = strWhere
Me.FilterOn = True

DoCmd.OpenReport "r棚卸_結果表示", acViewPreview, strWhere

End Sub



(3) フォームの作成その(2)
(2)とは違い、単なる単票形式では、フォームの
レコードソースを設定せずに、
txt日付
txtSchコード    (テキストボックス)
txtSchSyouhinName  (テキストボックス)
cmbSchMaker    (コンボボックス)
cmbSchBunrui    (コンボボックス)
cmd抽出      (ボタン)
を設定し、
(2)から
Me.Filter = strWhere
Me.FilterOn = True
を除けば出来てしまいます。


何だかだんだん簡易になっていくような感じですが、
だいたいこのようなところです。

No6、No7と作成しておいて、何ですが。
q棚卸_結果表示を開けばそのままデータが
表示できないものであるかもしれない
という前提でつくっています。いくつかの
フォームなどのデータによるフィルタ
がかかっているかもしれない、という
ことです。

しかし、q棚卸_結果表示を単独で開けばそのまま
データが表示できるものであるとするならば、
簡易な方法で言えば、やはりフィルタをレポートの
レコードソースにそのままかけるのが一番ですが。


No1の考えをフィルタにするならば、

(1) レポートの作成
r棚卸_...続きを読む

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

Qアクセスでテーブルの一部を他テーブルを使って更新をしたい

[ユーザーリスト]というテーブルがあり、その中にはユーザー名、住所、電話番号などが入っています。
後から電話番号の更新があったユーザーを修正するために、新しい電話番号とユーザー名だけが入っている[更新リスト]というテーブルを使って、[ユーザーリスト]の電話番号だけを一括で修正することはできるのでしょうか。

わかりにくい説明で申し訳ありませんが、ご回答の方宜しくお願いします。

Aベストアンサー

こんばんは。

更新クエリで簡単に出来ます。
更新クエリで、
[ユーザーリスト]    [更新リスト]
ユーザー名----------ユーザー名
住所            電話番号
電話番号
  ・
  ・

と、2つのテーブルをユーザー名で関連付けして、
[ユーザーリスト]の電話番号をクエリのフィールドとして選択して、
レコードの更新欄に
[更新リスト]![電話番号]
と入れて、クエリを実行すると、[ユーザーリスト]の電話番号が
[更新リスト]の電話番号に書き換えられます。
[更新リスト]に存在しないユーザー名の電話番号は、
書き換えられず、そのままの値を保持します。


人気Q&Aランキング

おすすめ情報