Access2000でマクロを使って簡単にデータ取り込み等を実現しようとしています。
しかし、インポート元のCSVに、日付を表わす8桁の数字(2000年12月1日なら20011201)があり、これを日付型のフィールドにインポートしようとすると、データが削除されてしまいます。
どなたか、簡単にデータを変換、取り込む方法をご存知の方がおりましたら、お教えください。お願いします!!!

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

A 回答 (2件)

横から失礼します。


オフコン系のシステムを使っているところではよくある話です。
まずは、インポートする前にCSVファイルをリンクします。
日付フィールドは文字型とします。
リンクしたテーブルを使って、アクションクエリでテーブルを更新・作成する手順がいいと思います。

日付の変換方法は以下の式で実現できます。
CDate(Left(RS!日付, 4) & "/" & Mid(RS!日付, 5, 2) & "/" & Mid(RS!日付, 7, 2)")
    • good
    • 0
この回答へのお礼

遅くなりましたが、やり方わかりました!ありがとうございました!

お礼日時:2002/03/17 15:53

アクセスにそのまま取り込み(数字列)必要な時に


Mid関数やLeft関数Right関数で細切れにして使用しましょう。
この3つの関数はよく使うので覚えて損は有りません。
    • good
    • 0
この回答へのお礼

さっ、さすがです。
かなり核心をついておられるとみた。
しかし私は初心者でして、具体的にデザインビューのここにこれを入れたらよい、というようなご意見をいただければありがたいです。
お手数ですがよろしくお願いします。

早速のご対応をありがとうございました。

お礼日時:2002/02/05 01:28

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

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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"...続きを読む

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

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

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

Aベストアンサー

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

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クエリーで両方のテーブルの全てのデータを表示することは可能ですか?

Accessの本来の主旨にあってないと思うのですが・・・。

とあるデータの入ったテーブルをA:1月分・B:2月分と分けて作成して
おります。
この2つのテーブルをクエリーでひとつのデータにまとめたいと思い、
品番をキーにクエリーを作成しましたが、結合の種類ではA・B両方一致した
データか、AのすべてのデータとBの一致したデータというように片方を
主にしたデータしか表示することができません。
AにはあるがBにはない、AにはないがBにはあるといった具合に、
一致したデータはもちろんのこと、一致しないデータも片方だけではなく
両方のテーブルのデータを表示することは可能でしょうか?

そもそも、同じ構造のテーブルならひとつにまとめてクロス集計クエリーで
品番別に月単位で表示するようにしたらよいのでしょうか?
できればテーブルはひとつにまとめたくないのですが・・・。
Accessの構造をあまり知らなくてごめんなさい。
よい解決策があったら教えてください。

Aベストアンサー

このようなクエリはいかがでしょう。

新規にデザインビューを開き[表示]-[SQLビュー]を選択して下さい。
そこに下記のようなSQLを記述します。

SELECT A.* FROM A
UNION ALL
SELECT B.* FROM B;

なおUNION ALLをUNIONに変更するとAとBで重複される行は一つに纏められます。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=184339

QACCESSでの桁数のあわせ方

EXCELで
(1)ERPソフトからの抽出データと
(2)手入力で管理しているデータ
をACCESSで取り込んで、加工をします。

それぞれ入力方法が
(1)のERPからのデータは必ず10桁(0000012345とか0000000123)で
(2)は有効分(12345とか123)
となっていますのでACCESSへ、インポートする際に
桁数が異なってしまい、クエリーで結び付けられません。

そこで、(2)のデータを(1)のように必ず10桁にして
桁数あわせに0が入るといった方法、つまり12345なら0000012345、123なら0000000123と変換させる
方法はありませんでしょうか。
出来れば、(2)をACESSで取り込んでからACCESSで処理をしたいです。

Aベストアンサー

format関数を使用してクエリーで変換するのがよいかと思います。
変換したいフィールドを「顧客コード」とします。
更新クエリーでフィールドに「顧客コード」、
レコードの更新に「=format([顧客コード],"0000000000")」と入れます。
「!」実行ボタンで完了です。

10桁のものはそのまま、10桁以下のデータの頭にゼロが付く形となります。
その代わり、この式のままではブランクの場合も10桁のゼロで埋まってしまいます。

QAccessからExcelへエクスポートするときにファイル名を指定したい。

Access2002を使用しています。
Accessで集計した結果をExcelへエクスポートしています。
Accessのフォームで集計する範囲を設定し、コマンドボタンをクリックするとExcelのへエクスポートしています。
このとき、Excelのファイル名を次のように設定したいのですが・・・
 売上表200607.xls
売上表は常に同じで、”200607” が集計する範囲で異なります。
このようなことは可能でしょうか?
以上、よろしくお願いします。

Aベストアンサー

集計する範囲の指定をどのようにしているかわかりませんが、
文字列で [年月] に "200607" と入力していると仮定して

Dim YM As String
YM = Me.年月 '※ 範囲の指定方法によってここを変えます。
DoCmd.TransferSpreadsheet acExport, 8, "Q_URIAGE", "c:\売上表" & YM & ".xls", False, ""

※例
年と月が別のテキストボックスだったら
 YM = Me.年 & Format(Me.月,"00")

日付型で入力しているなら
 YM = Format(Me.開始日,"yyyymm")
のように。

その他の場合、ファイル名決定の元になる情報を補足してください。

QACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 | |
| B剤  | 歯痛 |生理痛|   | |
| C剤  | 頭痛 |   |   | |

ことって出来るのでしょうか?
効果の数はいくつになるか分かりません。現在は最大7つですが、今後それ以上の物が出る可能性もあります。

ACCESSでは無理なことでしょうか?

また、ACCESSのバージョンは2002です。なお、ACCESSについては、使用法を含め初心者に毛が生えたくらいの知識しかありません。申し訳ありませんが「サル」にもわかるくらいの優しさでご指導願えれば幸いです。

よろしくお願いします。

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 ...続きを読む

Aベストアンサー

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

このように、<薬剤別効果一覧>テーブルにデータを登録するコードは以外と簡単です。

Private Sub コマンド_薬剤別効果一覧追加_Click()
  Dim isOK  As Boolean
  Dim strSQL As String
  
  isOK = CnnExecute("DELETE FROM 薬剤別効果一覧")
  If isOK Then
    strSQL = "INSERT INTO 薬剤別効果一覧 " & _
         "(薬剤名, 効果総数, 効果名_1, 効果名_2, 効果名_3)" & _
         " Values " & _
         "('A剤', 3, '頭痛', '生理痛', '発熱')"
    isOK = CnnExecute(strSQL)
    If isOK Then
      MsgBox "[薬剤別効果一覧] にデータを追加しました。"
    End If
  End If
End Sub

僅かに、CnnExecute()を自作ライブラリに追加するだけで、このように読めば判るコードが書けます。
これならば、質問者にとっても別に難しいことではないと思います。
SQL文は、Accessプロジェクトのそれですので Jetとは違うかも知れませんが基本は同じです。
課題は、strSQL の生成にあります。
ここが一つにハードルです。
まあ、それも含めて書くと、一つのプロシージャ全体を請け負うことになりますのでチョットです。

質問レベルからして、いずれ、この領域に踏み込む必要ありと感じましたので・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _
      vbExclamation, " ADO関数エラーメッセージ"
End Sub

Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
   Dim isOK As Boolean
   Dim cnn As ADODB.Connection
  
   isOK = True
   Set cnn = CurrentProject.Connection
   With cnn
     .Errors.Clear
     .BeginTrans
     .Execute strSQL
     .CommitTrans
   End With
Exit_CnnExecute:
On Error Resume Next
   cnn.Close
   Set cnn = Nothing
   CnnExecute = isOK
   Exit Function
Err_CnnExecute:
   isOK = False
   If cnn.Errors.Count > 0 Then
     ErrMessage cnn.Errors(0), strSQL
     cnn.RollbackTrans
   Else
     MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
        vbExclamation, " 関数エラーメッセージ"
   End If
   Resume Exit_CnnExecute
End Function

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

この...続きを読む

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。


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

人気Q&Aランキング