IBM AS/400のデータ転送でファイルタイプBIFFでEXCELファイルに落としたものをACCESS2000でインポートすると外部フォーマットが正しくないとなります。以前はACCESS VER.2.0では出来たのですが。どなたかご存知の方、お教えねがえないでしょうか

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

A 回答 (3件)

エクセルのバージョンはどれをお使いになっていますか?


エクセルのバージョンが古いとひょっとしてAccess2000では読めない可能性があります。

また、一手間かかりますが、エクセルからCSV形式に出力して、Accessで取り込む回避策も考えられます。

この回答への補足

oribeyakiさんアドバイス有難うございます。
EXCELLは2000です。
IBMAS/400でEXCELLにデータ転送するとEXCELLの中は下の様になってます。
A B C D E F G H I J K L M
1 TSUKI HI KINGAKU
2 09 29 \3,000
3
4
上記の様に一行目にフィールド名が必ず入ってしまうのです。
たぶんACCESS2000ないでEXCELLの一行目を削除してからインポートすれば良いと思いますが、やりかたが解かりません
引き続きアドバイス願えればありがたいのですがお願い致します。

補足日時:2001/09/29 09:27
    • good
    • 0

返答が遅くなりすいません。


推測のレベルでしかないのですが・・・複数の原因があるように思えます。

AS400側の「BIFF」作成部分というのは旧来のままですか?
そうであるとすると、「BIFF」のバージョン違いによるエラーが考えられます。
(Excel2000対応:BIFF,BIFF3,BIFF4,BIFF5,BIFF8)
また、「BIFF8」になって、かなり機能拡張がありました。

また、別の事例で「CSV」形式のファイルをExcel取り込み→Accessインポートの過程で同様のエラーが出ているものがありました。
これは、Access97とAccess2000のテキストドライバの違いでこのエラーが起こるとの事でした。

推測1
ExcelではそのBIFF形式は問題なく読み込めるが、Accessではそのバージョンの形式を認識できない。もしくは「xls」にひもついているExcel2000(BIFF8)の形式と判断して読み込もうとして失敗している。

推測2
Excel2000ではそのBIFF形式を認識していない。また、開いた時は入っているように見えても内部コードがおかしい。
(開いてみると何かメッセージが出るかも?手がかりになりそうならめっけもん)

対処方法(これも推測)
場あたり的対処
一度その「xls」ファイルを開いて、「最新のバージョンに変換しますか?」が出たら変換してセーブ、出なかったら一度テキスト形式(CSVとか)に落として、それを新規のExcelに取り込み。
その後、Accessで取り込み。
(ようは、力押しで最新のExcel形式にしてしまってから取り込み。)

抜本的対処
AS400のファイル作成プログラムを「BIFF8」の形式で作成しなおす。

※ただし、AS400側の「BIFF」作成部分が旧来のままという前提に立ったコメントにつき、おおはずしの可能性大(爆)
まあ、ドライバのバージョン違いと形式のバージョン違いに起因するエラーには間違いないとは思いますが・・・^^;
(BIFFは扱ったこと無いので良く判らないんです。すいません。)

原因個所が絞り込めてきましたので、問題解決まで後少しってとこですかね。

また、補足、私の勘違い、意味がわからないなどありましたら、ご返答ください。

この回答への補足

こんにちわ、oribeyakiさん
返答有難うございます。
場あたり的対処やってみました。最新のバージョンに変換したら出来ました。
有難うございます。
あと、出来ればEXCELLを開いて、最新のバージョンに変換しますか?を
ACCESS2000のマクロ又は、モジュールを使って出来ないでしょうか。
しつこくてすみません。
宜しくお願いします。

補足日時:2001/10/01 14:22
    • good
    • 0
この回答へのお礼

色々長々と質問してすみませんでした。
とりあえず場あたり対処でやっていきます。
ありがとうございました。

お礼日時:2001/10/03 14:36

おはようございます。



AccessにExcelからデータを取り込むのには、「インポートウィザード」を使われてますか?
(「テーブル」の「インポート」を選択してExcelブックを選ぶと自動的に出てくるものですが・・・)
「インポートウィザード」を使用していれば、補足していただいた内容を実現する事は簡単にできます。

流れを書きます。
1・「テーブル」で「新規作成」→「テーブルのインポート」を選択。
2・インポートダイアログの「ファイルの種類」を「MicroSoft Excel(*.xls)」にして、指定のエクセルブックを選択。
3・「ワークシートインポートウィザード」画面が開きます。
4・画面1ページ目は取り込むシートの選択。「次へ」を押して2ページ目がご要望の設定です。「先頭行をフィールド名として使う」チェックボックスをONにすれば、これで先頭のフィールド名がデータとして扱われません。
5・新規に作成するのであれば、次ページから新規作成のプロセスで「フィールド名」を変更したりして取り込みます。
6・既存のテーブルにデータを追加する場合1つ問題があり、4で先頭行をフィールド名として扱う設定にしてありますので、取り込み先のテーブルのフィールド名と、Excelのフィールド名が一致している必要があります。これと取り込むデータが、テーブルのデータ型と一致していれば問題ないはず。

「ウィザード」を使ってやる場合はこのような流れになると思います。
もし、既存テーブルに取り込みでフィールド名が違う場合、一度別に新規にテーブルを作成してから、元テーブルにインサートするとか、前のデータはすべて要らない場合は、新規作成後リネームするなどいろいろ回避はできます。

「ウィザード」を使用していなくて、マクロの「ワークシート変換」や、VBAで「TransferSpreadSheet」を使用しているのであれば、「フィールド名の設定」を「YES/はい」にすれば、先頭行がフィールド名として扱われます。
「範囲/Range」を先頭行無しで選択して既存のテーブルにインポートすることはできないようです。(やれると思ったのですが・・・、融通きかねーなぁ^^;)
ただ、この場合も、「ウィザード」の6と同じ問題に引っかかるので、同じように回避策が必要になります。

すいません、取り留めの無い文章になってしまい、判りづらいかと思います。
補足、私の勘違い、意味がわからないなどありましたら、ご返答ください。
(朝はどうにもダメなんですよ。)

この回答への補足

おはようございます。
流れとても判り易いです。
さっそく試みてみましたが流れ3へ行く前に"外部テーブルのフォーマットが正しくありません。"とエラーが出てしまいます。
(:_;)エーン

補足日時:2001/09/29 13:52
    • good
    • 0

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

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

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

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

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

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

QAS400 印刷用ファイルからCSVに変換する方法

AS400に無知な者です。
今現在使用しているASのバージョンすら
わかっていません。


実行すると自動的にデータが集計され
印刷用ファイルができるプログラムがあります。
データ形式で作成することは選択できません。

現在はASから印刷された帳票をみながら
エクセルに入力したりと、
かなりお馬鹿なことをしています。

わざわざ印刷しなくても
スプールにおちた印刷用ファイルを
CSVなどPC上で処理できるデータにかえる
コマンド等はないものでしょうか?

最初からデータ形式でおとせという
つっこみがきそうですが
どのファイルにアクセスして
どういう処理をしてるのか全く持って不明のため
現在の実力では不可能です。

誰かたすけてくださいまし。

Aベストアンサー

CPYSPLFコマンドでスプールファイルを物理ファイルへ変換できます。
その物理ファイルをPCへ転送すればできます。

参考URL:http://www.onbedo.com/forCOMP/AS400/qa_os.html

QAS400にてサブファイルレコードの再定義

現在RPGをはじめて3ヶ月程度のものです。

全体の流れ:
1.品目マスタを「作成日、注文番号、納期、品目番号」の順番で読み取る。
2.1をサブファイルレコードとして一覧表示する。
3.2の際に選択項目を設け、修正レコードを選択できるようにしてある。
4.選択項目を指定して実行すると修正画面に移動する。
5.修正項目は納期と納品数のみで、それ以外は表示のみを指定。
5.修正して実行すると、品目マスタが修正されて一覧の画面に戻る。
6.戻ってきた後の一覧画面は修正したレコードは修正した内容を表示して、
  修正していないレコードはそのままにする。

という流れです。

上司のアドバイスではCHAINを使って、
再度品目マスタをユニークキーで読み取って、
修正した内容のみを読み取ればよいといいますが、
いまいちやり方が分かりません。

ただイメージとしては、
サブファイルを表示する際にS1という件数を表示する為の仮のフィールド?があり、
それをS1SEQNというサブファイル上のレコード件数を表示するフィールドとして使っています。
(Z-ADD S1 S1SEQN という具合です。)

で、品目マスタ内のフィールドとしてE1SEQNというのがあります。
ですので、最初に順次アクセスする際に
(Z-ADD S1 S1SEQN )の以外にも
(Z-ADD S1 E1SEQN )を使って(現在はしていない)、UPDAT 品目マスタを行っておいて、

修正画面から戻ってきてから、S1SEQNと品目マスタ内のE1SEQNを引っ掛ければいけるのかと思っています。

ところがCHAINを使った場合の、このやり方がさっぱり分かりません。

もしかすると私のイメージ自体が間違っている可能性は凄く高いのですが、
どなたかアドバイスの程お願いします。

現在RPGをはじめて3ヶ月程度のものです。

全体の流れ:
1.品目マスタを「作成日、注文番号、納期、品目番号」の順番で読み取る。
2.1をサブファイルレコードとして一覧表示する。
3.2の際に選択項目を設け、修正レコードを選択できるようにしてある。
4.選択項目を指定して実行すると修正画面に移動する。
5.修正項目は納期と納品数のみで、それ以外は表示のみを指定。
5.修正して実行すると、品目マスタが修正されて一覧の画面に戻る。
6.戻ってきた後の一覧画面は修正したレコードは...続きを読む

Aベストアンサー

かななか回答が付かないですね^^;

私は画面系は苦手なのでAS/400系の掲示板などのサイトをご紹介します。(全て日本語のページです)
教えてgooはAS関係の技術者が少ないのか質問も回答も少ないです。AS/400会議室で聞けば一発で答えて貰えると思いますよ。

【AS/400会議室】
http://www7.big.or.jp/~pinball/discus/as400/index.html

【AS-400 Tips&Techniques】
http://www.as400-net.com/

【HRM】
http://hrm.fixa.jp/

【くっすんの最強リンク集】
http://kusuda777.web.infoseek.co.jp/links/59.htm
http://kusuda777.web.infoseek.co.jp/links/61.htm

ご検討をお祈り申し上げます。

QAccessでdatファイルのインポート

Accessを最近はじめたばかりなので、基本的な内容だったらすいません。
自分なりに調べたんですが、分からなかったので質問させて頂きます。

Access2003 SP1を使っているのですが、datファイル(固定長テキストファイル)をインポートする方法を教えていただけないでしょうか?
拡張子を「.txt」に変更してインポートすればいいのは調べて分かるのですが、業務上datファイルのままでインポートしたいんです。

申し訳ありませんが、ご回答宜しくお願い致します。

Aベストアンサー

> そのまま、インポートするには、レジストリの操作が必要になります。

[ACC2000]ファイルのインポート/エクスポートで '読み取り専用' のエラーが発生する
http://support.microsoft.com/default.aspx?scid=kb;ja;436329


> もう少し教えていただけないでしょうか?

Sub インポート()

  Dim strOldName As String
  Dim strNewName As String

  strOldName = "c:\xxx.dat"
  strNewName = "c:\xxx.txt"

  Name strOldName As strNewName
  DoCmd.TransferText acExportDelim, _
          "インポート定義名", _
          "テーブル名", _
          strNewName,
  Name strNewName As strOldName

End Sub

標準モジュールに、上記をコピーして、Sub ~ End Sub の間にカーソルを
おき、F5 キーを押してください。
#そちらの環境に合わせて、ファイル名や、テーブル名等は修正してください。

> そのまま、インポートするには、レジストリの操作が必要になります。

[ACC2000]ファイルのインポート/エクスポートで '読み取り専用' のエラーが発生する
http://support.microsoft.com/default.aspx?scid=kb;ja;436329


> もう少し教えていただけないでしょうか?

Sub インポート()

  Dim strOldName As String
  Dim strNewName As String

  strOldName = "c:\xxx.dat"
  strNewName = "c:\xxx.txt"

  Name strOldName As strNewName
  DoCmd.TransferText acExportDelim,...続きを読む

Q【Access2000】CSVファイルのインポート方法

Access2000(OS:WinXP)でCSVファイルをインポートするVBAを作成しています。

Open "ファイル名" For Input As #txtFileNumber
Input #txtFileNumber, txt1, txt2...

上記のようにtxt1,txt2...の変数に代入しているのですが、CSVファイルの行数が可変のため、どうすれば良いのか困っております。最大100フィールド程あるのですが…。何か良い方法がありましたらお教えください。

Aベストアンサー

1,2,3,4
1,2,3,4,5,6
1,2,3,4,5,6,7,8

このような Test.csv があるとします。

Private Sub コマンド0_Click()
  Dim I    As Integer
  Dim N    As Integer
  Dim Datas() As String
  
  Datas() = FileReadArray("C:\Temp\Test.csv")
  N = UBound(Datas())
  For I = 0 To N
    Debug.Print Datas(I)
  Next I
End Sub

[イミディエイトウィンドウ]

1,2,3,4
1,2,3,4,5,6
1,2,3,4,5,6,7,8

と、このように読み込むことが可能です。

Private Sub コマンド0_Click()
  Dim I    As Integer
  Dim J    As Integer
  Dim N    As Integer
  Dim M    As Integer
  Dim Datas() As String
  Dim Fields() As String
  
  Datas() = FileReadArray("C:\Temp\Test.csv")
  N = UBound(Datas())
  For I = 0 To N
    Fields() = Split(Datas(I), ",")
    M = UBound(Fields())
    For J = 0 To M
      Debug.Print Fields(J)
    Next J
    Debug.Print "---------"
  Next I
End Sub

と、改造すれば、各行の列データを取り出すことも可能です。

1
2
3
4
---------
1
2
3
4
5
6
---------
1
2
3
4
5
6
7
8
---------

※参照設定で、Microsoft scripting runtime を参照するようにする必要があります。
※長くなりますので、FileReadArray()はおって紹介します。

1,2,3,4
1,2,3,4,5,6
1,2,3,4,5,6,7,8

このような Test.csv があるとします。

Private Sub コマンド0_Click()
  Dim I    As Integer
  Dim N    As Integer
  Dim Datas() As String
  
  Datas() = FileReadArray("C:\Temp\Test.csv")
  N = UBound(Datas())
  For I = 0 To N
    Debug.Print Datas(I)
  Next I
End Sub

[イミディエイトウィンドウ]

1,2,3,4
1,2,3,4,5,6
1,2,3,4,5,6,7,8

と、このように読み込むことが可能です。

Private Sub コマ...続きを読む

Q【Access2000VBA】CSVファイルインポートの不具合

Access2000でCSVファイルインポートをVBAで行っています。
ところが、CSVファイル内に全角カンマ(,)がある場合、
区切り文字として認識されてしまい困っています。
区切り文字としてではなく文字として取得したいのですが可能でしょうか。

お手数ですが方法がわかる方、ご回答よろしくお願いいたします。

Aベストアンサー

それは、無理だと思います。
CSVでなければならないのでしたら、全角カンマを他では絶対使われない文字に変換しておいて、インポートしてから元に戻すという手があります。
また、CSV上でダブルクォーテーション(")で文字列を挟んでおけば、何とかなるかもしれません。
CSVではなく、可変長のテキストとして保存することが可能でしたら、文字列区切りをカンマ以外、例えばタブにするなどで対応できます。
固定長形式の処理が可能でしたら、それも一考の価値があります。がファイルサイズがでかくなります。
ご参考になれば幸いです。


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

人気Q&Aランキング

おすすめ情報