Accessの式についての質問です。

下記の式1で目的のデータは作成できますが、[A]に入っている空白を数字の0に置き換えることができません。
式2だとエラーになってしまいます。空白やNullは全て0にしたいのです。
初歩的な質問で申し訳ありませんが、どうかよろしくお願い致します。

式1: IIf([A]>[B],0,IIf(IsNull([A]),0,[C]*[T_table2]![a]/100))

式2:IIf([A]>[B],0,IIf(IsNull([A]),0,IIF([A]="",0,[C]*[T_table2]![a]/100)))

回答の条件
  • 1人1回まで
  • 登録:2006/04/11 19:25:05
  • 終了:2006/04/14 20:11:44

ベストアンサー

id:rikuzai No.3

りくっち回答回数1366ベストアンサー獲得回数1412006/04/13 15:04:50

ポイント60pt

http://www.accessclub.jp/actips/tips_59.htm

お疲れ様です。

質問文を拝見したときから「おや?」と思っていたのですが、

フィールド「A」に入っているデータが値・空白・Null値のどれかであるなら、提示の「式2」で結果が得られているはずだと思います。

それが得られないということは、値・Null値以外に空白と思われているデータ内にスペースが入っているのではないでしょうか。

スペースが入力されている場合は空白(""=長さ0の文字列)ではないので、

スペース自体を検索してやる必要があります。


ですが、Accessデータを扱っておられて、比較対象のデータ形式が日付であるなら、

本来こうしたことはおきてきません。

データが日付で、フィールドプロパティが日付であれば、

空白やスペースは自動的に排除されるからです。


おそらく状況から考えてフィールド「A」のプロパティは「文字列」だと思われます。

Accessではテーブルの設計時にフィールドプロパティを設定するのが基本かと思っていますが、

こうした現象が起きるということは、

元のデータはExcelで入力されたものや、CSVや固定長のテキストデータをインポートされたものなのではないでしょうか。

これらをインポートする際、きちんと同じ書式で入力されていれば自動的に最適のフィールド形式になりますが、

記入方法がまちまちだったり、スペースが入力されていたりすると、

ほとんどは文字列として変換されてしまうのです。


http://www.accessclub.jp/beginer/years/years_03.htm

なので、データ加工が可能なら、フィールドA、フィールドBのプロパティをテーブルのデザインビューから「日付/時刻」に設定しなおしてみてはどうでしょうか。

(もちろん必ずデータはコピーをとってやってくださいね)

もし空白やスペースや、不完全な日付データが入っていた場合は、

「データ変換中にエラーが発生しました」

というメッセージが出て、「はい」をクリックするとそれらが全てNull値に変換されます。

その設定後ならば、提示されている「式1」で十分結果が得られると思うのですが。


以上推測の上で書いてみました。見当違いだったらすみません。

ご参考まで。

id:aqua-marine

rikuzai様、どうもありがとうございました。

おっしゃる通りでした。

サーバからcsv形式で落としたものをExcelで加工していたのですが、

データがあまりにも重くなってしまったためAccessでの加工を試みていました。

日付データの入力が海外と国内の担当者で違っていたために、うまくいかなかったようです。

おかげさまできちんと処理ができるようになりました。

本当にどうもありがとうございました。

2006/04/14 20:10:37

その他の回答(2件)

id:graygreen127 No.1

graygreen127回答回数73ベストアンサー獲得回数62006/04/11 19:33:44

ポイント20pt

http://www.accessclub.jp/

IIf(IsNumeric([A]),IIf([A]>[B],0,[C]*{T_table2]![a]/100),0)

IsNumeric関数は、引数が数値として認識できる場合はTRUE、それ以外はFalseを返します。

id:aqua-marine

早速のご回答、どうもありがとうございます。

現在確認できる環境ではないため、後程試してみます。

2006/04/11 19:41:25
id:mash260977 No.2

mash260977回答回数100ベストアンサー獲得回数22006/04/11 20:49:46

こちらで参考になりますでしょうか?

http://www.accessclub.jp/supbeg/053.html

id:aqua-marine

ありがとうございます。

IsNullは既に使用していて、Nullは0に置き換えられたのですが空白はそのままで困っています。

graygreen127さん、本日試してみたのですがうまくいきませんでした。

理由は私自身の説明不足で[A][B]は日付だったからです。ただこの関数は聞いたことがなかったので、今後も役立ちそうです。

引き続き回答をお待ちしておりますので、どうかご指導下さいますようよろしくお願い致します。

2006/04/12 20:23:09
id:rikuzai No.3

りくっち回答回数1366ベストアンサー獲得回数1412006/04/13 15:04:50ここでベストアンサー

ポイント60pt

http://www.accessclub.jp/actips/tips_59.htm

お疲れ様です。

質問文を拝見したときから「おや?」と思っていたのですが、

フィールド「A」に入っているデータが値・空白・Null値のどれかであるなら、提示の「式2」で結果が得られているはずだと思います。

それが得られないということは、値・Null値以外に空白と思われているデータ内にスペースが入っているのではないでしょうか。

スペースが入力されている場合は空白(""=長さ0の文字列)ではないので、

スペース自体を検索してやる必要があります。


ですが、Accessデータを扱っておられて、比較対象のデータ形式が日付であるなら、

本来こうしたことはおきてきません。

データが日付で、フィールドプロパティが日付であれば、

空白やスペースは自動的に排除されるからです。


おそらく状況から考えてフィールド「A」のプロパティは「文字列」だと思われます。

Accessではテーブルの設計時にフィールドプロパティを設定するのが基本かと思っていますが、

こうした現象が起きるということは、

元のデータはExcelで入力されたものや、CSVや固定長のテキストデータをインポートされたものなのではないでしょうか。

これらをインポートする際、きちんと同じ書式で入力されていれば自動的に最適のフィールド形式になりますが、

記入方法がまちまちだったり、スペースが入力されていたりすると、

ほとんどは文字列として変換されてしまうのです。


http://www.accessclub.jp/beginer/years/years_03.htm

なので、データ加工が可能なら、フィールドA、フィールドBのプロパティをテーブルのデザインビューから「日付/時刻」に設定しなおしてみてはどうでしょうか。

(もちろん必ずデータはコピーをとってやってくださいね)

もし空白やスペースや、不完全な日付データが入っていた場合は、

「データ変換中にエラーが発生しました」

というメッセージが出て、「はい」をクリックするとそれらが全てNull値に変換されます。

その設定後ならば、提示されている「式1」で十分結果が得られると思うのですが。


以上推測の上で書いてみました。見当違いだったらすみません。

ご参考まで。

id:aqua-marine

rikuzai様、どうもありがとうございました。

おっしゃる通りでした。

サーバからcsv形式で落としたものをExcelで加工していたのですが、

データがあまりにも重くなってしまったためAccessでの加工を試みていました。

日付データの入力が海外と国内の担当者で違っていたために、うまくいかなかったようです。

おかげさまできちんと処理ができるようになりました。

本当にどうもありがとうございました。

2006/04/14 20:10:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません