- 締切済み
AccessからExeclにリンクするときの型の指定できますか
AccessからExeclのシートにリンクするとき、型の属性が自動的に決定されますが、正しく認識されないことがあるので、それを自分で指定する方法を教えてください。 Excel側では表のほぼ全ての列を通貨形式で表示するようにしてあるのですが、そのなかで、行の先頭付近から数値(通貨)データの入っている列は、Access側で自動的に通貨として扱ってくれます。ところが、空のセルが多い列は、テキスト型に認識されてしまうのです。 ここで、Excelに空のセルが出てくる経緯ですが、まずあるシートについて、=if(isnumber(シート名!A1),数値計算,"")で埋めつくして、その後その空のセルを含むほぼ全ての列をコピー・形式を指定して貼り付けで値に置き換えることによって、「""」から派生することになります。 Accessでテキストと判断された列の数値は、レポートで表示されません。 ところが、Excelの空のはずのセル「一つひとつ」を、デリートキーで削除しておくと、その列はAccessで通貨とし認識しなおしてくれます(範囲指定して、まとめてデリートキーを押下した場合はだめです)。けっこう大きな表なので、デリートキー押下を繰り返すのは大仕事です。 ここの質問でヒントになりそうなものはありましたが、リンクする際、自分で型を指定する方法はみつかりませんでした。 --------- ---------- No.579421 >Accessには、空っぽと言っても、Empty(変数の初期状態、変数型なし)、Blank(単に空っぽ、変数型Valiant)、Null(長さ0のString)の3種類あるんですね。 で、Excelにはこの3種類の区別がないので、とりあえず、Nullが入ってしまいます。 No.176287 >式を入力した一部のデータに#Num!エラーが表示されうまく表示されません。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
Schema.iniを使ってみては如何でしょうか? # 試してませんが........。 > Null(長さ0のString)の3種類あるんですね。 これ、間違いです。OracleではNULLと長さゼロの文字列は等価に扱われますが、VB、Jet、SQL Serverでは、いずれもNullと文字列は別扱いです。 VBの場合、デバッグウィンドウ (イミディエイトウィンドウ)で、 ?IsNull("") とタイプして [Enter] キーを叩けば、Falseが返るのがわかると思います。 Jetの場合、[値要求] (Required) と[空文字列の許可] (AllowZeroLength) は別のプロパティとなっています。 ※ Oracle、SQL Server (MSDE) 両刀使いの人は特に間違えやすいところです。
=if(isnumber(シート名!A1),数値計算,"") の式を =if(isnumber(シート名!A1),数値計算,0) ではダメですか? >「""」から派生することになります ↑ .これは、 「空のセル」にはならず、「空文字列のセル」になりますから 当然、ACCESSから見れば「テキスト型」と判断されて しまう気がします。 従って、デリートキーを押せば本当の「空のセル」になり、 「通貨型」という属性だけが残りますから、ACCESSは「通貨型」と 判断してくれるのではないでしょうか? (的外れな回答でしたら、すんまそーんっ!)
お礼
ありがとうございます。 >>「""」から派生することになります > ↑ >これは、 >「空のセル」にはならず、「空文字列のセル」になります >デリートキーを押せば本当の「空のセル」になり、 漠然と「""」は空のセルだと思っていました。 そういうことですか。 まとめてセルを空にするには、どうすればいいのでしょう。 =if(isnumber(シート名!A1),数値計算,"")ではなく =if(isnumber(シート名!A1),数値計算,) で空のセルになるのでしょうか? これは、通貨型のセルでは、0扱いですよね。 ご指摘の =if(isnumber(シート名!A1),数値計算,0) でも、表示したくない場合の0が表示されてしまいますよね。 Access側で使うとき、空の無記入と数値(通貨)0を区別したいのですが・・・・