Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1343 / 2272 ツリー ←次へ | 前へ→

【7589】Excelからのインポート時に数値がNullと判断されてしまう ゆり 06/3/28(火) 21:15 質問[未読]
【7590】Re:Excelからのインポート時に数値がNull... まさ7251 06/3/28(火) 22:09 発言[未読]
【7592】Re:Excelからのインポート時に数値がNull... ゆり 06/3/28(火) 23:03 回答[未読]
【7593】Re:Excelからのインポート時に数値がNull... まさ7251 06/3/28(火) 23:32 発言[未読]
【7594】Re:Excelからのインポート時に数値がNull... まさ7251 06/3/28(火) 23:39 発言[未読]
【7595】Re:Excelからのインポート時に数値がNull... ゆり 06/3/29(水) 0:43 お礼[未読]
【7613】Re:Excelからのインポート時に数値がNull... ゆり 06/3/29(水) 18:08 お礼[未読]

【7589】Excelからのインポート時に数値がNullと判...
質問  ゆり  - 06/3/28(火) 21:15 -

引用なし
パスワード
   初めて質問させていただきます。

エクセルから数値をインポートする時、数値が入力されていても、
何故かアクセスではNullと判断されてしまいます。

詳細は、
商品名・値段と2つのフィールドがあるエクセルデータを
アクセスのテーブルにインポートします。

取り込み先のテーブルは商品名はテキスト型、
値段は数値型にしてあります。

値段フィールドが空白、またはNullの場合は、0を入れるようにしてあります。
   
  エクセルシートをdrs2として開き、
  インポート先テーブルをdrs1としています。

  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then
     drs1("kakaku").Value = 0
  Else
     drs1("kakaku").Value = drs2.Fields(3)
  End If

しかし、値段フィールドに数値が入っていても、Nullと判断されてしまう
現象が起こりました。

正直、エクセルシート側、またはアクセス側どちらに問題があるのかすら、
分かりません。

どなたか問題解決方法をご存知の方、
または「ココがいけないのではないの?」と何か思い当たることがある方、
アドバイスを頂けませんでしょうか。

宜しくお願い致します。

【7590】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 22:09 -

引用なし
パスワード
   >  エクセルシートをdrs2として開き、

とは、具体的にどうやっているのですか?

>  インポート先テーブルをdrs1としています。
>
>  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then

Fields(3)とありますけど、
>商品名・値段と2つのフィールドがあるエクセルデータ
ではないのですか?

とりあえず、これだけの情報では、原因は思いつきません。

drs2.Fields(3)
これに、どのような値が入っているのかを
確認してみてはどうでしょうか。

【7592】Re:Excelからのインポート時に数値がNull...
回答  ゆり  - 06/3/28(火) 23:03 -

引用なし
パスワード
   まさ7251 さん、レスありがとうございます。
説明不足ですみません。

>>  エクセルシートをdrs2として開き、
>
>とは、具体的にどうやっているのですか?

Set dcn1 = CurrentDb
Set drs1 = dcn1.OpenRecordset(a, dbOpenDynaset)

Set dcn2 = OpenDatabase(xFilename, False, False, "Excel 8.0;") 
Set drs2 = dcn2.OpenRecordset(xSheetName)           

というように、開いて(操作して?)います。
xFilename、xSheetNameは複数の同形式のファイル・シートを扱いますので、
取り込むファイル名、シート名は変数で持っています。

>>  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then
>Fields(3)とありますけど、
>>商品名・値段と2つのフィールドがあるエクセルデータ
>ではないのですか?


詳しくは、エクセルは 分類・商品名・詳細・値段 のフィールドがあります。

分類 = drs2.Field(0)
商品名 = drs2.Field(1)
詳細 = drs2.Field(2) 
値段 = drs2.Field(3)

>とりあえず、これだけの情報では、原因は思いつきません。

>drs2.Fields(3)
>これに、どのような値が入っているのかを
>確認してみてはどうでしょうか。

プログラム上でデバックをして、値の変化を追っていきましたが、
例えばエクセルには250と入力されている箇所でもNullと判断されています。

問題のエクセルは、いくつかのクライアントに入力してもらい、
その入力してもらったものを取り込むというものです。
元のフォーマットはこちらで作り、勝手に変更できないよう、
入力が必要なセル以外はプロテクトをかけてあります。

実は、中にはきちんとインポートされているものもあります。

エクセル内に何か不要なデータが入力されていないかとも思い、
CSV形式で吐き出し、空白等が入力されていないかも確認しましたが、
特に問題はありませんでした。

また、エクセルは各国から取り寄せているため、入力されたフォントに
問題があるのかとも考えましたが、こちらも問題ありませんでした。

以上のことから、Accessのプログラムがいけないのか、
Excel側がいけないのかすら、分からないのです。

念のためこれからエクセルシートを新しく作り直してみます。

説明が下手で、分かりにくいかもしれません。
また長文になりましたが、どうぞ宜しくお願い致します。

【7593】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 23:32 -

引用なし
パスワード
   デバックの際に、drs2.Fields(3) の値を確認してみても、
Nullになっていたのですよね?

ちなみに、こちらでも再現できました。
・5行のデータを作成。
・値段の列は、1行のみ数値。後は文字列。
上記の場合、数値の行では、Nullが返ってきました。

逆に、1行のみ文字列。後は数値とすれば、
文字列の行で、Nullが返ってきました。

どのような仕組みかはわかりませんが、
Accessが値段の列をテキスト型と判断しているのではなでしょうか。
判断の仕組みは、何らかの説明がMicrosoftにあったような気もしますが、
忘れました。

回避策として2案ほど。
1.いったん、インポートしてから処理を行う。
2.OLE等で、Excelを開きデータを取得する。

【7594】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 23:39 -

引用なし
パスワード
   ある御方から追加情報戴きました。

http://support.microsoft.com/kb/109376/ja/
http://x7net.com/~access/AcTipsExcelLinkDataType.html

ぜひご参考に。
Gin_IIさん、ありがとうございました。

【7595】Re:Excelからのインポート時に数値がNull...
お礼  ゆり  - 06/3/29(水) 0:43 -

引用なし
パスワード
   まさ7251 さん、引き続きご回答ありがとうございました。

ご提案頂いた回避策と、頂いたURLの情報を元に考えてみます。
おそらく自分の力量からいってすぐには解決できそうにないので、
結果報告はまた改めてさせて頂きます。
まずは、取り急ぎお礼まで。
夜遅くにご回答ありがとうございました。

また、便乗で申し訳ありませんが、
追加情報を下さったGin_IIさんもありがとうございました。

Gin_IIさんには、他の掲示板へのマルチポストを指摘しても頂きました。
焦って周りがすっかり見えなくなっていたところでのご指摘
(おかげさまで冷静さをとりもどしました。)、
また、今回の追加情報、ありがとうございました。

【7613】Re:Excelからのインポート時に数値がNull...
お礼  ゆり  - 06/3/29(水) 18:08 -

引用なし
パスワード
   こんにちは。
頂いた情報(http://support.microsoft.com/kb/109376/ja/
)に従って、
レジストリの値を変更したら、数値もきちんと判断されるようになりました。

まさ7251 さん、Gin_IIさん

本当にありがとうございました。&お世話になりました。

今後また何かありました際には、宜しくお願い致します。

1343 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078228
(SS)C-BOARD v3.8 is Free