これからの季節に親子でハイキング! >>

アクセス(まだデータベースのみです)とエクセルを相互リンクしたいのですが、マクロとかよく分からないので、方法を教えてください。将来的には職員全員が扱えるようにしたいのですが、アクセスでメニューバーをつくり、エクセルしか使えない人にはエクセルのフォームで入力してほしいのですが。アクセスで入れてもエクセルで入力しても、双方とも更新されるようにしたいのですが。尚、エクセルで作ったものをアクセスにインポートして作ってあります。よろしくお願いします

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

A 回答 (4件)

アクセスとエクセルは、相互にリンクすると思いますが...


簡単なので、以下のことを試してみてください。

(1)エクセルシートにA1にフィールド名、A2~A5(適当な行)にデータ(例えば数値)を入れたものを作成、保存(ファイル名:DATA.xls)し閉じます。
(2)アクセスを起動し、新規のデータベースを作成します。
(3)挿入/テーブルからテーブルのリンクを選択し、OKボタンをクリック。
(4)ファイルの種類にMicrosoft Excel(*.xls)を選択、ファイル名にDATA.xlsを選択しリンクボタン。
(5)先頭行をフィールド名として使うにチェックをいれて完了。

出来上がったアクセス上のデータベースにデータを追加すると、エクセルに反映されます。
(フォームを作成して入力しても構いません)
エクセルにデータを追加すると、アクセスのリンクしたテーブルに反映されます。
ただし、いずれかのアプリケーションは閉じておかないと書き込みできません。
その意味では、扱いは必ずしも良いとはいえませんので、その意味ではお勧めできませんが。
    • good
    • 1
この回答へのお礼

詳しい内容をありがとうございます。
がんばって作成します。

お礼日時:2004/10/13 20:54

>将来的には職員全員が扱えるようにしたいのですが


>データもかなり多いので
人数は、同時使用者数は、データ件数は、データ量は?
アクセスは、大人数の使用やデータの量や保全等を考えるといいとはいえません。参考URLを参照してください。
やはりデータベースは、市販のSQLServer、Oracleやフリーで使用できる
PostgresSQL、MYSQLを使用したほうがよいかと思います。
アクセスから上記のデータベースを利用できますので、データの入力等のインターフェースとしての使用をお勧めします。(ここは問題があるかも)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1040467
    • good
    • 0

> 固まったりする可能性大ですね。

VBAだとどうなりますか?
固まったりぐらいでおさまれば、まだいいですが。。


基本的には、データはどちらかに保存します。
ExcelとAccessなら、Accessに。

それを、ADOやDAOなどを使って更新してやるようにします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえず、しっかりとエクセルで作りますね。

お礼日時:2004/10/13 20:55

> アクセスで入れてもエクセルで入力しても、双方とも更新されるようにしたいのですが。



VBAを駆使しない限りムリでしょう。
駆使して作成したとしても、利用者が多ければ破綻する可能性大ですね。
    • good
    • 1
この回答へのお礼

やっぱりそうですか、データもかなり多いので。固まったりする可能性大ですね。VBAだとどうなりますか?

お礼日時:2004/10/13 18:31

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

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

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

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

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

QVbaでアクセスからエクセルにリンクテーブルする

Vbaでアクセスからエクセルにリンクテーブルするには?
エクセルの情報:
C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx

シート1の情報:
フィールド1 フィールド2
あああ    aaa
いい     iii
ううう    uuu
なのですが、
アクセスからVBAでリンクするにはどうすれば良いでしょう?

手作業なら
外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする
でリンクできますが、vbaで行いたいです。

Sub Sample01()
Dim db As DAO.Database, tb As DAO.TableDef

Set db = CurrentDb
Set tb = db.TableDefs("Sheet1")

tb.Connect = ";DATABASE=" & CurrentProject.FullName & ";TABLE=Sheet1"
tb.RefreshLink ' リンク情報の更新
End Sub

このコードは意味が違いますよね

エクセルのパスとシート名を指定してリンクする方法を教えてください。

最終定期にはシートをループして複数のテーブルを作成したいのです。
リンクが無理ならインポートでもOKです。

Vbaでアクセスからエクセルにリンクテーブルするには?
エクセルの情報:
C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx

シート1の情報:
フィールド1 フィールド2
あああ    aaa
いい     iii
ううう    uuu
なのですが、
アクセスからVBAでリンクするにはどうすれば良いでしょう?

手作業なら
外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする
でリンクできますが、vbaで行いたいです。

Sub Sample01()
Dim db As DAO.Data...続きを読む

Aベストアンサー

手作業でExcelへのリンクテーブルを作って
テーブルをデザインビューで開いてプロパティの「説明」を覗いてみた。
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=Sheet1$
これをConnect に渡せば良いらしい。
IMEX ?
ACCDB ?
分からないのでGoogleと
こちらでも素晴らしい回答をされているkikuさんの
http://kikutips.blog13.fc2.com/blog-entry-107.html
を発見。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsExcelLinkDataType.html
こちらではIMEXに関わる説明がされています。

docmd.TransferSpreadsheet acLink ,acSpreadsheetTypeEx・・後略でシートの一部分だけだと
(VBAのヘルプで↑を調べてください)
Excel 12.0 Xml;HDR=NO;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=sheet2$B5:D16
とかになりました。
直接、接続情報を指定するもよし、docmd.TransferSpreadsheet・・・でもお好きな方で。
今日はとても賢くなった。寝たら忘れるかも。。。

手作業でExcelへのリンクテーブルを作って
テーブルをデザインビューで開いてプロパティの「説明」を覗いてみた。
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=D:\DB\SampleData\Small.xlsx;TABLE=Sheet1$
これをConnect に渡せば良いらしい。
IMEX ?
ACCDB ?
分からないのでGoogleと
こちらでも素晴らしい回答をされているkikuさんの
http://kikutips.blog13.fc2.com/blog-entry-107.html
を発見。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsExcelLinkDataType.html
こちらではIMEXに関わる説...続きを読む

Qアクセスでリンクしたエクセルを更新したい

アクセス2002で、エクセルファイルをリンクしたテーブルを作成しました。
参照はできるのですが、更新、追加、削除ができません。

97の頃は、できたような気がしたのですが、できなくなってしまったのでしょうか。

更新する方法がありましたら、教えてください。

ACCESS 2002
EXCEL 2002
WindowsXP Pro
ユーザはアドミニ権限

Aベストアンサー

追伸、
Office(Access)2002(XP)なら、SP3まで当てても大丈夫だと思います。
http://www.microsoft.com/downloads/details.aspx?FamilyID=7497d7f0-bef5-4054-b854-b1240b5135f5&DisplayLang=ja
『この更新プログラムをインストールするには、以下の環境が必要です。
 Office XP Service Pack 3 (SP-3)』
なので、KB904018 のパッチあてだけを避ければ当面は大丈夫かもしれません。

Acc2003は確かSP2に同梱されているらしいので、SP1 までだと思います。

間違ってたら・・ ごめんなさい。

ただ、今後他のアップデートと抱き合わせで入ってきてしまう可能性や
次期Accessでは当初から出来ないこと、他の人のAccessでそのMDBを使用される場合を考えると
一時的な回避策でしかないです。

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

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

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

Aベストアンサー

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

QAccessのハイパーリンクをクリックしてもファイルが開かない

Accessでハイパーリンク型を設定して、そこにローカルのファイルまでの
絶対パスを記載しています。

絶対パスは作成したフォームのテキストボックスに記述されたパスを
VBAでUpdate文を利用してテーブルへ取りこんでいます。

その後、検索処理を行い作成した表形式のフォームに検索結果を表示します。
その際に、表示されたハイパーリンクをクリックすると該当ファイルが
開くようにしたいのですが、開くことができません。

文字列は青くなり、マウスカーソルも指型になっているのですが、
クリックしても何も反応がありません。

どなたか解決法を教えてください。
よろしくお願いいたします。

Aベストアンサー

> テキストボックスに記述されたパスをVBAでUpdate文を利用してテーブルへ

このUpdate文の記述はどうなっていますか。

ハイパーリンクのフィールド名を URL と仮定した時、
 ・・・ SET URL='" & Me.テキストボックス & "' ・・・・
となているところを、
 ・・・ SET URL='#" & Me.テキストボックス & "#' ・・・・

としてみるとどうなりますか。

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で計算式を挿入

テーブルで、A・B・Cのフィールドがあります。
C=A/(B/100)^2
という式があります。

この場合、更新クエリを使ってCのフィールドに値を入れるしかないのでしょうか。

もともとあるテーブルを元にフォームを作成しました。
このフォームを使って、AとBを入力すれば自動的にCに値が入る、という事をイメージしていたのですが行き詰っています。
式ビルダは使用してみたのですが、データが反映されません。
元のテーブルCフィールドには式はなく、ただ数値があるだけです…。

どんな作業が足りないのでしょうか。
もしくは別な方法がよいのでしょうか。
よろしくお願いします。

Aベストアンサー

クエリで新フィールドに計算式を入れて、C=A/(B/100)^2のフィールドを作ります
その後「クエリのテーブル化」をすれば何のことはないのでは。
ただクエリで済むものをテーブル化は普通はしません。
やり方は、クエリのデザインの画面で、メニュのクエリーテーブルの作成-テーブル名を指定-OKー実行ー確認に答える、でよいのでは。

Qエクセルのデータをアクセスへ自動インポート(エクスポート)したい。

いつも大変お世話になっております。m(_ _)m
質問させてください。

エクセルに存在するデータベースのデータを、アクセスにインポートしたいのですが、アクセス側の「取り込み」みたいなボタンを押せば、ある程度自動的にするような仕組みを作りたいです。
「ある程度」というのは、「ボタン1つですべて実行されるように」というところまで自動化されなくても大丈夫です。
参照先、インポート先のテーブル名などのマウス操作は入っても大丈夫です。

そのようなことができますでしょうか?

できるだけ具体的に教えていただけると助かります。
よろしくお願いします。

Aベストアンサー

こんにちは。

VBAで、DoCmdオブジェクトのTransferSpreadsheetメソッドでよいのではありませんか?

 DoCmd.TransferSpreadsheet acImport,
      [シートのタイプ],
      [テープル名],
      [ファイル名],
      [Excel側のフィールドを使うかどうか],
      [Excelの範囲]

実際のコード
 DoCmd.TransferSpreadsheet acImport, , "TestTable", "D:\Test.xls", True, "Sheet1!A1:D20"


"Sheet1!A1:D20"
これはなくてもよいです。

QAccess フォーム上でのテキストボックスとテーブルの連結

フォームヴィザードからフォームを作成すると、
テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

Aベストアンサー

#2です。
デザインビューの空欄スペース(グレー1色のところ、升目なし)で右クリックをするとプロパティが出てきます。また、フォームウィザードの途中で、そのフォームと連結するテーブルかクエリを選択する画面が出てきます。

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む


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

人気Q&Aランキング