【最大10000ポイント】当たる!!質問投稿キャンペーン!

Accessからエクセルへのエクスポートで質問です。

Accessのテーブルの中の一つのフィールド(名前は[合計])で、=[単価]*[数量]という計算をさせたとします。

このテーブルをエクセルにエクスポートし、エクセル上で例えば
[単価]の累積合計 =SUM(**:**)
[数量]の累積合計 =SUM(**:**)
[合計]の累積合計 =SUM(**:**)
をしたとすると、[単価]と[数量]は値が得られるのですが、Accessで計算させた[合計]は0になって値を得ることができません。

[単価]と[合計]は通貨型、[数量]は数値型に設定しています。

Accessのテーブル上では[単価]と[合計]には¥マークがついているのですが、エクセルにエクスポートすると、[単価]は¥マークがついておらず、[合計]には¥マークがついています。

Accessで計算させたフィールドは、エクセルにエクスポートした場合、数字として認識されないのでしょうか?文字になってる?

うまく説明出来なくてすみませんが、Accessをエクスポートし、エクセルで加工計算を色々したいのですが、[合計]が計算出来なくて困っているという事です。

何故なのか全く判らないので教えてください。

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

A 回答 (2件)

【解決策】


「=[単価]*[数量]」の演算を、クエリで行わせるようにして下さい。

【説明】
> Accessのテーブルの中の一つのフィールド(名前は[合計])で、
> =[単価]*[数量]という計算をさせたとします。

Accessのテーブルでは、「=[単価]*[数量]」といった計算を行わせる
ことはできません。
これが、テーブルと同様の表示になる『フォームのデータシートビュー』
についてのお話であれば、こちらの環境(WindowsXP/Access2003)で
現象の再現が確認できました。

どうやら、フォームのテキストボックスなどでの演算結果は、Excelへの
出力後はテキスト(文字列)扱いになってしまうようです。
一方、フォームのレコードソースにクエリを使用し、「=[単価]*[数量]」の
演算をそちらで行わせ、フォームではその結果を表示させる形にすると、
Excel出力後も数値として扱われました。

ですので、現在のフォームに使用しているテーブルを基にクエリを作成し、
そこで添付画像のような『合計』という演算フィールドを追加して、
フォームの『合計』テキストボックスのコントロールソースにこのフィールドを
指定してやれば、Excel出力後も合計が計算できるようにできます。

※演算フィールドでは、先頭の「=」は無用です。
 (「=[単価]*[数量]」ではなく、「合計: [単価]*[数量]」と指定)
 *演算結果を「合計」という名前で表示させる場合。
  (「:」の左側が名前、右側が求める結果を出すための式)
 *「単価」「数量」というフィールド名が、クエリで使用しているテーブルの
  複数で該当する場合は、「=[テーブル1].[単価]*[テーブル2].[数量]」
  のように指定します。(「.」の存在に注意)
※フォームのレコードソースは、フォームのプロパティシートの『データ』
 タブで指定できます。
※テキストボックスのコントロールソースは、フォームのデザインビューで
 テキストボックスに直接入力して指定することもできます。
「Access⇒エクセルへのエクスポートに」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございました。
出来ました。
判り易いご説明、本当にありがとうございます。

お礼日時:2010/04/17 10:14

jyurymickeさん 今日は!


>Accessで計算させたフィールドは、エクセルにエクスポートした場合、数字として認識されないのでし>ょうか?文字になってる?うまく説明出来なくてすみませんが、Accessをエクスポートし、エクセルで>加工計算を色々したいのですが、[合計]が計算出来なくて困っているという事です。
AccessからExcelにデータをエキスポートした場合、Excelの形式で取り込まれます。
私自身は過去にAccess98で、会社の業務プログラムを作成しましたが当時のExcelは単なる表計算ソフト
でしたのでAccess→Excel→Accessの経験はありませんが、参考サイトを紹介します。
■ExcelとACCESSのデータ交換
http://www.excel.studio-kazu.jp/lib/e3e/e3e.html
概要:MS-ACCESSとMS-Excel でデータを交換する方法を説明します。
(A) Excelの書類をACCESS側から使う [相関図のインポートの矢印]
(B) ACCESSの書類をExcel側から使う [相関図の開く矢印]
(C) ACCESS書類をExcel側から使う [相関図のエクスポート矢印]
●Excel と Access との間でデータを交換する方法について
http://office.microsoft.com/ja-jp/excel/HP052349 …
概要:1.Access のレコードを Excel にコピーする。
2.更新可能な形式で Access データを Excel に取り込む。
3.Excel データを Access データベースにリンクする。
4.Excel データを Access データベースにインポートする。
5.Excel 範囲を Access データベースに変換する。
6.Excel データから Access レポートを作成する。
7.Access フォームを使用して Excel データを入力する。

以上参考にされては、2.更新可能な形式で Access データを Excel に取り込む方法で操作すればExcelで編集が可能と為るはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
助かりました。
色々あるのですね。
これからもっと勉強します。

お礼日時:2010/04/17 10:16

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

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

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

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

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

Qアクセスからエクセルへコピーすると文字列になってしまう

アクセスのクエリの数値データをコピーして、エクセルのシートにペーストすると文字列になってしまいます。他のPCではそういうことないのですが、何か設定が必要でしょうか。バージョンはどちらも2002です。

Aベストアンサー

恐らくコピーした段階で書式が「文字列」として
コピーされてしまうという仕様でしょう。
エクセルに貼り付けるときに
「形式を選択して貼り付け」を選んで
形式を選択する
等でしか回避方法はないかな、
と思います。

QACCESS側からEXCELの書式を設定するには?

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

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

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

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

Aベストアンサー

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンを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 これは除いてください。保存しますかのメッセージが出ます。

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンを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
...続きを読む

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で空白のデーターをクエリで判定/識別する方法を教えてくださ

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

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

Aベストアンサー

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

QExcelのデータ(数字)をテキスト型としてaccessにインポートする方法

Excelの「セルの書式設定」を「文字列」にして、数字を入力し、accessで「インポート」すると「データ型」が「倍精度浮動小数点型」となって「1(2)」や「1&2」と入力した行がインポートできずerrorとなります(普通の数字はインポートできます)。Excelの書式設定を「ユーザ定義」→「@」としても同じです。またaccessでテーブルのデザインでそのインポートするフィルドを「データ型」としておいてインポート操作をしてもインポートされません。Excelを開きそのセルや行の書式設定を確認しましたが文字列となっています。どこが問題なのでしょうか?
また正しくインポートできる方法を教えてください。
accessとExcelのバージョンは2003です。
よろしくお願いします。

Aベストアンサー

Excelの「表示形式」を「文字列」にしているのに…というのを疑問に感じていらっしゃるようですが、この設定は、そもそも原則としては「表示上」のデータを整形する機能として用意されたもので、Access等のデータベースで、フィールド型を指定する機能とは、根本的に異なります。この点を理解されておいたほうがいいでしょう。

では、ExcelデータをAcessにインポートするときには、どのようにしてフィールド型を判別しているのかと言えば、1件目のデータからであると思われます。
文字列にしている列の1件目のデータは、数字のみ等の数値として認識できるデータではないでしょうか? これによって、「倍精度浮動小数点型」が自動設定されるのでしょう。ところが、「1(2)」などのデータは、型が違うので、エラーが表示されると。
「ANo.#2」さんの「方法3」ならうまくいくというのも、この理由でしょう。

ただ、私がExcel2002とAcess2002で試してみたところでは、おっしゃるような問題が発生しませんでした。何が、違うんでしょうねぇ。「ANo.#2」さんの「方法2」についても、私はうまく行きました。「方法1」のTXTファイルとして保存する方法ですが、Excelでカンマ区切りやタブ区切り形式で保存すれば、空白セルがあっても、問題ないと思いますがいかがでしょうか。

Excelの「表示形式」を「文字列」にしているのに…というのを疑問に感じていらっしゃるようですが、この設定は、そもそも原則としては「表示上」のデータを整形する機能として用意されたもので、Access等のデータベースで、フィールド型を指定する機能とは、根本的に異なります。この点を理解されておいたほうがいいでしょう。

では、ExcelデータをAcessにインポートするときには、どのようにしてフィールド型を判別しているのかと言えば、1件目のデータからであると思われます。
文字列にしている列の1件目の...続きを読む

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QAccessでテキスト型→数値型への変換方法

Access2000を使用しており、クエリを作成しています。
テーブルから[回答]というフィールドをひっぱってきています。
フィールド[回答]にて、最初の3文字に対応時間を入れており、
Mid関数にて対応時間を抽出しました。

対応時間:Mid([回答],1,3)

しかし、Mid関数でとったフィールドは文字列として認識されています。(Ex:001など)
この文字列を数値に変換する関数、又は方法などお教えくださいませ。
よろしくお願い致します。

以下にイメージ図を記載致します。
=================================
回答            対応時間
001 ●●●~        001
=================================
(対応時間を数値で扱えるようにしたい、ということです)

Aベストアンサー

対応時間が、整数(-32,768 ~ 32,767)であれば、

対応時間:CLng(Mid([回答],1,3))


また、長整数(-2,147,483,648~2,147,483,647)であれば、

対応時間:CLng(Mid([回答],1,3))

とすればokのハズです。

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の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

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?


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

人気Q&Aランキング