よろしくお願いします。

■前提条件
OS:XP
Access version: 不明(2003以降だと)
技術力:Accessの初歩段階です。提供されているマクロを
いじっている程度。プログラミングをAccessに書いたことなし。


■サマリー
Access-マクロ-ワークシートの変換(エクスポート)でクエリにあるデータの有無を判定し、データがあるクエリのみExcelに出力したいです。
■詳細
Accessで複数のクエリ(1~10クエリ)があるとします。
そのクエリには、各クエリが参照している大元データによって、
データあるクエリ、ないクエリがあります。

たとえば、クエリの1~5までデータがあり、残りはデータがない
とし、データがある1~5まで同一ファイルのExcel出力したいと
します。1ファイルの中に5シート(クエリ1~5)ある状態です。

Accessのマクロ-ワークシートの変換で、指定したクエリは同一ファイルに複数シートとして出力できることまではできています。
※この場合、ワークシートの変換には、すべてのクエリを指定し、
すべて出力することにしています。

ただ、データがないシートを出力したくないのですが、どのように
データある、なしを判断し、出力すれば良いのでしょうか?

補足
もしくは、一旦データの有無は関係なく、全てのデータは出力し、
Excelのマクロにて制限するなどが考えれますが・・・

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

A 回答 (2件)

> 技術力:Accessの初歩段階です。

提供されているマクロを
> いじっている程度。プログラミングをAccessに書いたことなし。

とあるのと、

> Accessのマクロ-ワークシートの変換で、指定したクエリは同一ファイルに
> 複数シートとして出力できることまではできています。

とのことから、恐らく、マクロの『アクション』列に、対象となるクエリの数だけ、
「ワークシート変換」が並んでいる状態ではないかと思います。

以下、この前提で、現在のマクロへの加筆修正の仕方を説明します。
(恐らく、現状でできる最も簡単な方法かと思いますので)


1)当該マクロをデザインビューで開く
2)マクロの『条件』列が表示されていない場合は、Accessのメニューで
 「表示(V)→条件(C)」を選択して、『条件』列を表示
3)「ワークシート変換」アクションで指定している『テーブル名』欄のクエリ
 の名前を「クエリ1」とした場合、その行の『条件』欄(=「ワークシート
 変換」の左隣)に、以下の式を入力:
  DCount("*","クエリ1")>0
4)以下、「ワークシート変換」が記載されている全ての行の『条件』欄に、
 同様の式を入力
5)マクロを保存して閉じる


・・・以上です。

なお、『ワークシート変換』の『テーブル名』で「=Forms!フォーム1!テキスト0」
といった形でフォームのテキストボックスを参照している場合は、『条件』欄の
式を以下のようにして下さい:
  DCount("*",Forms!フォーム1!テキスト0)

※上では「,」(カンマ)の後のクエリ名を「"」(ダブルクォーテーション)で囲んで
  いるのに対し、下の場合はその囲みがないので注意してください。
「Accessワークシートの変換における条」の回答画像2
    • good
    • 0
この回答へのお礼

DexMachinaさん

ありがとうございます。おかげで上手くいきそうです。

あとは、各クエリに対してこの条件を設定するという、マンパワー的な作業になります。・・・このマンパワーはどうにもなりませんよね

いずれにしても、ありがとうございます。

お礼日時:2009/06/07 22:52

クエリにデータがあるかどうかを調べる関数


Function データ有無(ByVal クエリ名 As String) As Boolean
  Dim S As String
  Dim R As DAO.Recordset
  S = CurrentDb.QueryDefs(クエリ名).SQL
  Set R = CurrentDb.OpenRecordset(S)
  データ有無 = Not R.EOF
  R.Close
End Function

ワークシートに変換する
DoCmd.TransferSpreadsheet acExport, , クエリ名, Excelファイル名

出力先(Excelファイル名)は同じものにしておきます。
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す

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

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

Qワークブーツのブランドに詳しい方、ご教授下さい。

ハーレーの専門誌で紹介されている、
SLOWWEAR と言うブランドのブーツを見つけました。
(少し前ですので、正確な雑誌名は覚えていません。。)

取扱店舗も調べたのですが、都内にも数店舗あったと記憶しています。

ABCマートさんのような大きなSHOPさんで扱っているような、

有名ブランドではなさそうですが、詳細ご存知の方、いらっしゃりますか?

また、使用目的はアメリカンバイクに乗る&普段着でもと考えています。

Aベストアンサー

下記サイトから調べられますよ。

・Slow Wear Lion: http://www.slowwear.co.jp/stores/
・Slow Wear Lion通販: http://www.slowwear.jp/

QエクセルからACCESSへマクロでワークシート変換していますが・・・

ACCESSで作ったクエリを一度エクセルにエクスポート(マクロを使ってワークシート変換)後、エクスポート先のシートとは別シート(同一ブック内)で集計し、集計結果をACCESSへインポート(マクロを使ってワークシート変換)させたいのですが、前回の集計結果がインポートされてしまい、新しい集計結果が反映されません。

一度エクセルのブックを開けば新しい集計結果が取り込めます。
何故でしょうか?
またブックを開かずに最新のエクセルの集計結果をACCESSに反映させる方法はありますでしょうか?

Aベストアンサー

Excelのファイルを開いて保存する記述です。
下記の場合コマンドボタンCmd1のクリック時のイベントに記述した場合。
マクロでエクスポートする部分はDoCmd.TransferSpreadsheet・・の部分です。エクセルファイル名.xlsはフルパスで記述してください。
参照設定のMicrosoft Excel *.* ObjectLibraryにチェックされているか確認しチェックされてなければチェックを入れて下さい。*.*はお使いのAccessのバージョンに合ったものが表示されているはずです。

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", "エクセルファイル名.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("エクセルファイル名.xls")
Set xlSheet = xlBook.Worksheets(1)

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

Excelのファイルを開いて保存する記述です。
下記の場合コマンドボタンCmd1のクリック時のイベントに記述した場合。
マクロでエクスポートする部分はDoCmd.TransferSpreadsheet・・の部分です。エクセルファイル名.xlsはフルパスで記述してください。
参照設定のMicrosoft Excel *.* ObjectLibraryにチェックされているか確認しチェックされてなければチェックを入れて下さい。*.*はお使いのAccessのバージョンに合ったものが表示されているはずです。

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Cl...続きを読む

Qワークグループが勝手にWORKGROUPに変わった

(a)LANの形態
ルータを用いて次の3台でLANを組んでいます。
(1)Windows 7 Ultimate 64 SP1 デスクトップ
(2)Windows 7 Ultimate 64 SP1 ノート
(3)Windows XP Professional SP3 デスクトップ
3台ともワークグループをfamilyにして快調にデータのやり取りをしていました。

(b)問題の発生
3カ月ほど前から(3)から(1)と(2)へアクセスできなくなりました。
(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

(c)問題発生後の対策
原因が分からずほっておいたのですが、今日別のことをしていて気付いたのですが、(1)と(2)のワークグループがWORKGROUPに変わっていました。(3)のみはfamilyのままでした。

私を含め、家族のだれも、ワークグループをWORKGROUPに変更することは勿論していませんし、OSの再インストール、ルータの再セットアップ、システムの復元なども一切していません。ただ、(1)~(3)とも、WindowsUpdateのサイトにアクセスして「重要な更新プログラム」は何度かインストールしましたが、そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

(d)質問
なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。考えられる原因をお教えいただけないでしょうか。

もっとも、(3)から(1)と(2)へアクセスできなくなっただけで、(b)の問題の発生後も、(1)、(2)から(3)へは何の問題もなくアクセスできていたので、これも不思議と言えば不思議なんですが.....。

(a)LANの形態
ルータを用いて次の3台でLANを組んでいます。
(1)Windows 7 Ultimate 64 SP1 デスクトップ
(2)Windows 7 Ultimate 64 SP1 ノート
(3)Windows XP Professional SP3 デスクトップ
3台ともワークグループをfamilyにして快調にデータのやり取りをしていました。

(b)問題の発生
3カ月ほど前から(3)から(1)と(2)へアクセスできなくなりました。
(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

(c)問題発生後の対策
原因が分からずほっておいたのですが、今日別のことをしていて気...続きを読む

Aベストアンサー

>(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

 同じ Windows 7 の (1)と(2)どうしも、お互いにアクセス出来ていた
わけですね?


>そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

 確証はありませんが、大いにあり得ることだと思います。

 当方、ワークグループ名では経験がありませんが、Windows Updateが
きっかけでシステム環境が変更されてしまったことは何度かあります。


>なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。

 Windows 7 の、或いは更新プログラムのバグかも知れません。


>(b)の問題の発生後も、(1)、(2)から(3)へは何の問題もなくアクセス
>できていたので、これも不思議と言えば不思議なんですが.....。

 Windows 7 特有の「ホームグループ」や「ホームネットワーク」など
という何だかよく分からない仕様が関係しているような気がします。

【Windows7】ネットワークの場所の設定でどれを選択すればいい?
http://long-distance.jp/sb/log/eid81.html

 個人的には、「社内ネットワーク」を使った設定を推奨したいところ
です。

Windows Vista と 7 でファイル共有
http://oshiete.goo.ne.jp/qa/7202832.html

ネットワークの場所をあとから変更したい
http://www.frontier-k.co.jp/faq/12/004293.htm

ネットワークの場所(ホーム/社内/パブリック)を切り替えるには
http://pc.nikkeibp.co.jp/article/technique/20100803/1026694/

 因みに、オイラの場合、「パブリックネットワーク」などという何と
なくヤバそうな管理方法については、関知したことがありません。


 また、アクセス出来なくなった時期と Windows7 側のワークグループ
名が変わった時期が、タイミング的に同じかどうかという問題もあると
思います。
 Windows Updateに原因がある場合、WinXP 側が、Vista 以降自動的に
有効になっているネットワーク設定の TCP/IPv 6なるプロトコルに引き
ずられているのかも知れません。

Windows VistaのIPv6を無効にする
http://www.atmarkit.co.jp/fwin2k/win2ktips/949vistav6rm/vistav6rm.html


 それから、Windows 7 (1)(2)でご利用のセキュリティソフトの状況が
よく分かりませんが、一応そちらの設定も確認してみましょう。

参考URL:http://oshiete.goo.ne.jp/qa/6074853.html

>(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

 同じ Windows 7 の (1)と(2)どうしも、お互いにアクセス出来ていた
わけですね?


>そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

 確証はありませんが、大いにあり得ることだと思います。

 当方、ワークグループ名では経験がありませんが、Windows Updateが
きっかけでシステム環境が変更されてしまったことは何度かあります。


>なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。

 Win...続きを読む

Qaccess 特定のレコード数までエクセルに出力したら、別のシートに出力先を変えたい

VBA初心者です。宜しくお願い致します。

テーブルのデータをエクセルに出力しているのですが
特定の行まで出力したら、別のシートに出力先を変更したいのです。
以下コードの★部分で処理するのではないかと思っているのですが
どのように書けばいいのかさっぱりわからず、ご質問させて
いただきました。

どうぞ、宜しくお願い致します。

-----------------------

'既存の Excel Book をテンプレートとして開き、
'位置を指定して、テーブルのデータを出力

Dim cnADO As ADODB.Connection 'ADO コネクション確立
Dim rsADO As ADODB.Recordset

Dim xls As Excel.Application
Dim wkb As Excel.Workbook
Dim fName As Variant
Dim stDetail As String 'Query OR Table Name
Dim stPath As String 'mdb & Excel Book Path
Dim stXLName As String 'Book Name
Dim stSheet As String 'Sheet Name
Dim stSheet2 As String 'Sheet2 Name
Dim stRng As String 'Range Address

stPath = "\\marketing\" '自mdb & Excel Book のパス
stXLName = "marketing.xls" 'テンプレート用の Book
stDetail = "出力テーブル" 'テーブル名
stSheet = "marketing" '出力するシート名1
stSheet2 = "marketing2" '出力するシート名2
stSheet3 = "marketing3" '出力するシート名3
stRng = "A26" '出力開始セル番地

Set cnADO = CurrentProject.Connection
Set rsADO = cnADO.Execute(stDetail)


'テンプレート としてオープン
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Add template:=stPath & stXLName
Set wkb = xls.Workbooks(1)


'★rsADOのレコード数を1行目のデータから30行目までに制限
'★明細データ貼り付け1(rsADOの1行目のデータから30行目までを貼り付け処理)

With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With


'★rsADOのレコード数を31行目のデータから75行目までに制限
'★明細データ貼り付け2(rsADOの31行目のデータから75行目までを貼り付け処理)
With wkb.Worksheets(stSheet2)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With


'★rsADOのレコード数を76行目のデータから100行目までに制限
'★明細データ貼り付け3(rsADOの76行目のデータから100行目までを貼り付け処理)
With wkb.Worksheets(stSheet3)
.Range(stRng).CopyFromRecordset Data:=rsADO
End With


'Excel画面を表示して終了(保存しない)
xls.Visible = True

Set xls = Nothing
Set wkb = Nothing
Set fName = Nothing

rsADO.Close: Set rsADO = Nothing
cnADO.Close: Set cnADO = Nothing

VBA初心者です。宜しくお願い致します。

テーブルのデータをエクセルに出力しているのですが
特定の行まで出力したら、別のシートに出力先を変更したいのです。
以下コードの★部分で処理するのではないかと思っているのですが
どのように書けばいいのかさっぱりわからず、ご質問させて
いただきました。

どうぞ、宜しくお願い致します。

-----------------------

'既存の Excel Book をテンプレートとして開き、
'位置を指定して、テーブルのデータを出力

Dim cnADO As ADODB.Connection ...続きを読む

Aベストアンサー

CopyFromRecordset メソッド をヘルプで調べてください。

expression.CopyFromRecordset(Data, MaxRows, MaxColumns)

MaxRows 省略可能です。バリアント型 (Variant) の値を使用します。ワークシートにコピーするレコードの最大数を指定します。この引数を省略すると、Recordset オブジェクトのすべてのレコードをコピーします。
-------------------------------------------------------------
MaxRows に、30, 45, 25 をそれぞれ指定して出力すればOKです。
 

Qワークシート名を変数に格納する方法

VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか?

下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。

Dim データ行 As Integer
Dim cnt As Integer
Dim データ数 As Integer
cnt = 4
データ行 = Cells(Rows.Count, 8).End(xlUp).Row
For データ数 = 11 To データ行

  If Worksheets("入力").Cells(データ数,1).Value= "2"Then

Worksheets("H").Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value
Worksheets("H").Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value
Worksheets("H").Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value
Worksheets("H").Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value
Worksheets("H").Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value
Worksheets("H").Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value
Worksheets("H").Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value
Worksheets("H").Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value
Worksheets("H").Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value
Worksheets("H").Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value
cnt = cnt + 1


End If

Next データ数

VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか?

下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。

Dim データ行 As Integer
Dim cnt As Integer
Dim データ数 As Integer
cnt = 4
データ行 = Cells(Rows.Count, 8).End(xlUp).Row
For データ数 = 11 To データ行

  If Worksh...続きを読む

Aベストアンサー

> 説明不足でした。ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

であるならば、その状態や条件も提示していただかないと的確に回答できませんよ。

8個のシート中、5個の対象シートがどこにあるか決まっていない。or 決まっている。
5個の対象シートの名前には決まった位置に共通する文字があり、残り 3個のシートには無い。
とか、、、

対象 5シートの位置が一番左から 5つである場合は
For i = 1 to ThisWorkbook.Worksheets.Count
 Set targetSheet = ThisWorkbook.Worksheets(i)
 ' 処理いろいろ
Next

4番目から 5つであれば
For i = 4 To 8
 Set targetSheet = ThisWorkbook.Worksheets(i)
Next

対象シートのシート名の先頭が必ず "H-" で始まっており、対象外シートは別の文字から始まっているのであれば
For Each targetSheet In ThisWorkbook.Worksheets
 If Left(targetSheet.Name, 2) = "H-" Then
  ' 処理いろいろ
 End If
Next
とか

規則性がぜんぜん無いけれど 5シートの各名前が決まっているのなら、あらかじめ文字列型の配列に対象シートのシート名を入れておき、
For i = 0 To 4
 Set targetSheet = ThisWorkbook.Worksheets(targetNames(i))
Next
とか。
または 対象 5シートの名前を 9つめのシートのセル A1~A5 に書いておけるならば、そのセルの値を読み込んで targetSheet で参照させるとか。

ともかく情報が必要です。

> 説明不足でした。ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

であるならば、その状態や条件も提示していただかないと的確に回答できませんよ。

8個のシート中、5個の対象シートがどこにあるか決まっていない。or 決まっている。
5個の対象シートの名前には決まった位置に共通する文字があり、残り 3個のシートには無い。
とか、、、

対象 5シートの位置が一番左から 5つである場合は
For i = 1 to...続きを読む

QAccessでの複数クエリ(テーブル)を用いたレポート出力

こんにちは。QNo.348201とQNo.350892では大変お世話になりました。

1)クエリ処理した『プロジェクト別予算簿』のレポート↓
費目   種別  月初残高 支出合計  100 … 200  月末残高
人件費  賞与  1,000,000 400,000 300,000 100,000 600,000
その他 外注費  400,000 100,000 100,000 300,000
    会議費 600,000 200,000 200,000 400,000

2)下記表を作りたい。
費目   種別  月初残高 支出合計  100 … 200  月末残高
人件費  賞与  1,000,000 400,000 300,000 100,000 600,000
その他 外注費  400,000 100,000 100,000 300,000
   ●管理費 800,000 200,000 600,000
   ■相当額 700,000 400,000 300,000
    会議費 600,000 200,000 200,000 400,000
-  - -  - -  - -  - -  - -  - -  -
合計金額
-  - -  - -  - -  - -  - -  - -  -
●=選択クエリ『管理費』の“一般管理費” フィールドをレポートの“支出合計”欄に転機したい
■=選択クエリ『相当額』の“消費税相当額”フィールドをレポートの“支出合計”欄に転機したい

これら『管理費』『相当額』は共に「テーブル作成クエリ」としても作っているのでテーブルにもファイル
として吐き出されています。
しかしどうしても 2)のレポートを作成出来ずに行き詰まっています。エラー内容は相変わらず
『選択したフィールドのレコードソースにアクセスできません。テーブルと、そのテーブルを基にしたクエリ
のフィールドを選択した可能性があります。もしそうであれば、テーブルかクエリのどちらかのフィールド
だけを選択して下さい』
です。

こんにちは。QNo.348201とQNo.350892では大変お世話になりました。

1)クエリ処理した『プロジェクト別予算簿』のレポート↓
費目   種別  月初残高 支出合計  100 … 200  月末残高
人件費  賞与  1,000,000 400,000 300,000 100,000 600,000
その他 外注費  400,000 100,000 100,000 300,000
    会議費 600,000 200,000 200,000 400,000

2)下記表を作りたい。
費目   種別  月初残高 支出合計  100 … 200  月末残高
人件費  ...続きを読む

Aベストアンサー

人件費・賞与・その他・外注費・会議費はテーブルからクエリなどで集計したフィ
ールドを表示しているのですか?
『管理費』『相当額』は別にテーブルを作成してありその集計値を表示すると言う
ことですか?

QVBAですべてのワークシートを処理したい

ブック内の全ワークシートに対して同じ処理をするために、

For each ワークシート in Worksheets
~処理~
Next ワークシート

を使ってみたのですが、その時にアクティブになっているシートしか処理されません。たとえば次のようなシンプルなコードでも、同様です。何が抜けているのでしょうか。

Sub allworksheets()
Dim WS As Worksheet
For Each WS In Worksheets
Range("a1") = "123"
Next WS
End Sub

マクロの勉強を始めたばかりで、基本的なことでつまづいてます。よろしくお願い致します。

Aベストアンサー

せっかくオブジェクトをWSに代入しているのですから、
きちんと使ってあげましょう。

誤: Range("a1") = "123"

正: WS.Range("a1") = "123"

Qaccess2002 追加クエリ?マクロ??

accessは数年前に2000を少し触ったことのある程度です。
SQLやVBAの記述などは出来ません。

今、小規模の在庫管理・販売管理のデータベースを作っています。
例えば小物を販売するために小物の基本情報をまず登録するために、
[基本情報登録][販売種類登録][値段の情報]
のテーブルを3つと
「基本登録フォーム」「基本登録サブフォーム」
のフォームを2つ作りました。

[基本情報登録]
基本NO  商品名    形状    重さ
1  くまのぬいぐるみ  毛糸    500g
2  ねこのぬいぐるみ  フェルト  400g

[販売種類登録]
種類NO 種類
 h01 店
 h02 店(お得意様)
 h03 店(値引き)
 h04 不良品

[値段の情報]
値段NO 基本NO 種類NO 金額
01   1   h01   200円
02   1   h02   150円
03   1   h04    0円 
04   1   h01   150円
05   2   h03   120円
06   2   h04    0円

フォーム[基本情報登録]
サブフォーム[販売種類登録][値段の情報]

入力するときは、フォーム・サブフォームで表示させて商品の新規登録時に値段も登録するようにしています。
ただ、不良品であれば値段は絶対に0円です。(販売フォームを作ったときに、値段の参照をするので入れておきたい)
登録する度に入力するのは何か違うな、と思います。
なので「追加クエリ」でフォームに新しい商品が登録されたときに自動で[値段の情報]テーブルに「1 h04 0円」と入ればいいのでは、と思ったのですが…。
クリエ起動→追加クエリに変更
抽出…条件……?
追加クエリというものは、
「入力済のものを抽出してその抽出したものを別テーブルに追加する」
という機能で、私のやりたい事はマクロになるのでしょうか…?
マクロを新規作成してみると「値の代入」というものがあり、これか?と思いましたがそこで躓きました…。
教えて頂けると助かります。
宜しくお願い致します。

accessは数年前に2000を少し触ったことのある程度です。
SQLやVBAの記述などは出来ません。

今、小規模の在庫管理・販売管理のデータベースを作っています。
例えば小物を販売するために小物の基本情報をまず登録するために、
[基本情報登録][販売種類登録][値段の情報]
のテーブルを3つと
「基本登録フォーム」「基本登録サブフォーム」
のフォームを2つ作りました。

[基本情報登録]
基本NO  商品名    形状    重さ
1  くまのぬいぐるみ  毛糸    500g
2  ねこのぬいぐるみ  フ...続きを読む

Aベストアンサー

新しいデータをテーブルに追加したいときは追加クエリ
今あるデータを変更したいときは更新クエリ

レコードを追加したときに自動で他のデータを追加するためには、少々のVBA(かマクロ)を使用する必要がある。
バッチ処理みたいな感覚で、クエリ実行するとh04が登録されていない商品に関して全件0円登録をすることも可能だが、クエリがほんの少し複雑。

お勧めとしては、商品マスターや出庫テーブルの構造を見直すこと。
私が作るなら、

割引率が違う店舗の数が2,3種類に限られ、商品数も限定されるなら商品マスターに割引後価格を持たせる。
店舗により割引金額が異なるなら、顧客マスター側に割引率を持たせて、出庫テーブルに理由などのデータを持たせて、不良品を識別する。

QWindowsXPでのワークグループ作成について

WindowsXPPro×1、WindowsXPHome×4でワークグループを作成し、ファイルを共有しようとしています。
ワークグループ名:WORKGROUP
コンピュータ名:XPがfileserver,homeエディションが
pc01~pc04
設定の仕方は
マイネットワーク→プロパティ→ホーム/小規模オフィス
→(デフォルトで次へ→デフォルトで次へ)
→コンピュータ名(上記pc01~pc04とfileserver)
→ワークグループ名(WORKGROUP)でお互いが見れるようになり、共有フォルダが使えます。
ただ、1台(XPhomeエディション)だけ上記と同じ操作をやっても、ワークグループ名が「MSHOME」のデフォルトのままで、「WORKGROUP」と入力しても変わりません。
原因とか、何か別の方法とかご存知の方教えてください。

Aベストアンサー

マイコンピュータの右クリックでプロパティを出し、コンピュータ名の変更ボタンからワークグループ名を入力しては?

無論ファイヤーウォールは適切に設定され、相互に繋がる状態で使いましょう。

QACCESSでのエクセルインポート時のシート有無の判定について

ACCESS上でエクセルファイルをインポートするにおいてそのファイルが存在するかの判定用IF文は
If Dir("C:\インポートファイル.xls") = "" Then MsgBox "インポートファイル.xlsファイルがありません。"
End If
でうまくいくのですが

インポートファイル.xls
______________________________
/シート2/シート3/シート4/

インポート用EXCELファイルのシート1が無いことを判定するときの設定方法がネットを調べても発見することが出来ませんでした、やり方があるようなら教えてください

If Dir("C:\インポートファイル.xls" ※恐らくここに何か追加が必要だとは思うのですが※ ) = "" Then
MsgBox "インポートファイル.xlsファイルのシート1がありません。"
End If
一度質問を登録したのですが、登録失敗していたので再度質問しました。よろしくお願いします。

Aベストアンサー

下記の文で一応テストしましたが、内容通り動いてくれました。(わざとシートを抜けた状態でインポートしてみました。)但し、#3の方のエラーコードと違うのでちょっとその辺がどうなのか実際のシートで試してみればいかがですか?
又、TransferSpreadsheetの各スイッチ等については、実際の環境の数値に合わせて下さい。くわしくはヘルプに出ていますので確認して下さい。

Private Function インポート()
On Error GoTo Errインポート

Dim strテーブル名 As String
Dim strシート名 As String
Dim intカウント As Integer
Dim strエラーメッセージ As String

intカウント = 1
strエラーメッセージ = ""

DoCmd.RunSQL "delete * from 売上1テーブル"
DoCmd.RunSQL "delete * from 売上2テーブル"
DoCmd.RunSQL "delete * from 売上3テーブル"
DoCmd.RunSQL "delete * from 売上4テーブル"

Do While intカウント <= 4
strテーブル名 = "売上" & intカウント & "テーブル"
strシート名 = "シート" & intカウント & "!"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, strテーブル名, "C:\インポートファイル.xls", True, strシート名 & "A1:C5"
intカウント = intカウント + 1
Loop

MsgBox ("処理終了しました。" & Chr(13) & strエラーメッセージ)

Exit Function

Errインポート:
Select Case Err.Number
Case 3011
strエラーメッセージ = strエラーメッセージ & "," & strシート名 & "が存在しませんでした。"
Resume Next
Case Else
MsgBox (Err.Number & ":" & Err.Description)
Exit Function
End Select

End Function

下記の文で一応テストしましたが、内容通り動いてくれました。(わざとシートを抜けた状態でインポートしてみました。)但し、#3の方のエラーコードと違うのでちょっとその辺がどうなのか実際のシートで試してみればいかがですか?
又、TransferSpreadsheetの各スイッチ等については、実際の環境の数値に合わせて下さい。くわしくはヘルプに出ていますので確認して下さい。

Private Function インポート()
On Error GoTo Errインポート

Dim strテーブル名 As String
Dim strシート名 As String
Dim int...続きを読む


人気Q&Aランキング

おすすめ情報