Access VBA質問箱 IV

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

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


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

【12909】Access関数の記述=IIfについて教えてください。 素人初心者 15/12/22(火) 17:56 質問[未読]
【12910】Re:Access関数の記述=IIfについて教えてく... かるびの 15/12/23(水) 1:09 回答[未読]
【12913】Re:Access関数の記述=IIfについて教えてく... 素人初心者 15/12/24(木) 9:49 質問[未読]
【12914】Re:Access関数の記述=IIfについて教えてく... かるびの 15/12/24(木) 11:59 回答[未読]
【12915】Re:Access関数の記述=IIfについて教えてく... かるびの 15/12/24(木) 19:41 発言[未読]
【12916】Re:Access関数の記述=IIfについて教えてく... 素人初心者 15/12/25(金) 9:06 お礼[未読]

【12909】Access関数の記述=IIfについて教えてくだ...
質問  素人初心者  - 15/12/22(火) 17:56 -

引用なし
パスワード
   突然の質問で失礼します。

現在使っているAccessで作成されているシステムの中で
帳票を作成しています。

集計帳票で現在の記述は
=IIf([100]=0,"",[100])
となって記述されています。

コードNo100の値を表示 値がゼロの場合は空白でという記述だと思っているのですが、

これをコードNo100の値または、コードNo101の値を表示 
値がゼロの場合は空白でという記述に書き換たいと思っています。

難しい場合は
100の値+101の値の合計の値を表示 
値がゼロの場合は空白でという記述でも良いので、
=IIf([800]+[801]=0,"",[800]+[801])
上記のような記述て゛ためしてみましたが、表示できませんでした。

正解な記述を教えていただければ助かります。

よろしくお願いいたします。

【12910】Re:Access関数の記述=IIfについて教えて...
回答  かるびの  - 15/12/23(水) 1:09 -

引用なし
パスワード
   >集計帳票で現在の記述は
>=IIf([100]=0,"",[100])
>となって記述されています。
>
>コードNo100の値を表示 値がゼロの場合は空白でという記述だと思っているのですが、

 いきなり脱線しますが、
「空白」という表現は使うべきではありません。
 テキストボックスが空白になる場合には、
テキストボックスの値が長さ0の文字列(空文字などとも呼ばれます)である場合と
テキストボックスの値がNullである場合との
2通りあります。
 そのため、「空白」という表現ではどちらのことなのか区別できないからです。
 ちなみに、長さ0の文字列とNullとでは、コンピュータでの処理上では、雲泥の差があります。


 で、本題ですが、 
 上記の式は、おそらくテキストボックスのコントロールソースに記述されているのだと思います。
 「100」という名前のコントロールがテキストボックスなのか、コンボボックスなのか、はたまた
他の種類のコントロールなのか不明ですが、
説明の便宜上、「100」という名前のコントロールはテキストボックスだとします。

 そこで、上記の式の意味ですが、
「100」という名前のテキストボックスの値が0であれば、長さ0の文字列を表示し、
そうでなければ、「100」という名前のテキストボックスの値を表示する
というものです。


 また脱線しますが、
上記の式にはものすごく違和感を覚えます。
 上記の式が設定されたコントロールが表示する値が、テキスト型だったり(長さ0の文字列の場合)、数値型だったりするからです。
 エクセルではデータ型を意識することはないのに対して、アクセスはデータ型にうるさいわけですが(というより、エクセルがずさん過ぎる)、
データ型を混在させると、このコントロールの値を使って何かをしようという場合に、
困ったことになる場合が出てきます。


 さらに脱線ですが、
上記の式が設定されたコントロールですが、値が0である場合に0を表示させないようにしたい
ということですよね。
 そのためにわざわざ1つのコントロールを設けるのは、無駄ではないかと思います。

 また、もし、値が0である場合に、0を表示させたくないというならば、
上記の式で言えば、名前が「100」であるテキストボックスの「書式」プロパティを、
しかるべく設定すれば、実現することができます。


 脱線はまだ続きますが、
コントロールの名前を、例えば「100」のように数字で始まるものにするのはNGです。
 コントロールの名前の1文字目は文字にしなければなりません。

 一般機能だけでアクセスを使うのであれば、つまり、VBAを決して使わないというのであれば、
数字で始まる名前でも何とかなると思いますが、
後々VBAを使うかもしれないというのであれば、数字始まりは避けるべきです。


 本題その2です。

>=IIf([800]+[801]=0,"",[800]+[801]) 
 
 この式がうまくうまく動いてもらうためには、
フォームに、「800」という名前のコントロールと「801」という名前のコントロールが
存在している必要がありますが、そういうコントロールは存在しているのでしょうか。


>正解な記述を教えていただければ助かります。

 フォーム構成を正確に提示してもらえなければ、正確な記述など示しようがありません。

 なお、通常、フォーム構成と言えば、
フォームの名前、
フォームのレコードソース
フォーム上の主要なコントロールの名前
当該コントロールのコントロールソース
あたりを提示してもらうことになります。

【12913】Re:Access関数の記述=IIfについて教えて...
質問  素人初心者  - 15/12/24(木) 9:49 -

引用なし
パスワード
   ▼かるびの さん:ご回答ありがとうございます。

どう説明してらいいのかさえ、わからない素人なのですが、

流れとしては、たとえば、

A社から仕入れた金額
1月 10000
2月 20000
|
12月 30000

B社から仕入れた金額
1月 50000
2月 70000
|
12月 10000

となった場合
コード?800はA社仕入れ(別に800はA社の仕入れと設定し、集計しています)
コード?801はB社仕入れ(別に801はB社の仕入れと設定し、集計しています)


年間集計として、
A社の合計を表示するために
=IIf([800]=0,"",[800])
の式が入っていましたが、

今回表示したい値は
A社の年間合計が0の場合B社の年間合計を表示

年間を通して、A社かB社かのどちらか一方しかしいれないので、
(部署によってA社のみで仕入れる部署と B社のみで仕入れる部署があります)

A社の年間合計が0の場合B社の合計を年間合計表示が無理な様であれば

A社の年間合計+B社の年間合計の値を表示したいと考え

=IIf([800]+[801]=0,"",[800]+[801])
上記のような記述で試したが、表示しなくなってしまったのです。


イ部署仕入れ(A社のみ仕入れ)
1月 10000
2月 20000
3月 10000
4月 10000
5月 10000
6月 10000
7月 10000
8月 10000
9月 10000
10月 10000
11月 10000
12月 30000
−−−−−−−−
計 150000

ロ部署仕入れ(B社のみから仕入れ)

1月 50000
2月 70000
3月 10000
4月 10000
5月 10000
6月 10000
7月 10000
8月 10000
9月 10000
10月 10000
11月 10000
12月 10000
−−−−−−−−−
計 220000

このような状況であった場合

イ部署 2015年状況表
消費部材  5000000
社内在庫  50000
仕入れ   150000 (ここの数式)


ロ部署 2015年状況表
消費部材  5000000
社内在庫  50000
仕入れ   220000 (ここの数式)


このように、部署ごとに集計表を出したいです。

いい方法があったら教えてください。


>>集計帳票で現在の記述は
>>=IIf([100]=0,"",[100])
>>となって記述されています。
>>
>>コードNo100の値を表示 値がゼロの場合は空白でという記述だと思っているのですが、
>
> いきなり脱線しますが、
>「空白」という表現は使うべきではありません。
> テキストボックスが空白になる場合には、
>テキストボックスの値が長さ0の文字列(空文字などとも呼ばれます)である場合と
>テキストボックスの値がNullである場合との
>2通りあります。
> そのため、「空白」という表現ではどちらのことなのか区別できないからです。
> ちなみに、長さ0の文字列とNullとでは、コンピュータでの処理上では、雲泥の差があります。
>
>
> で、本題ですが、 
> 上記の式は、おそらくテキストボックスのコントロールソースに記述されているのだと思います。
> 「100」という名前のコントロールがテキストボックスなのか、コンボボックスなのか、はたまた
>他の種類のコントロールなのか不明ですが、
>説明の便宜上、「100」という名前のコントロールはテキストボックスだとします。
>
> そこで、上記の式の意味ですが、
>「100」という名前のテキストボックスの値が0であれば、長さ0の文字列を表示し、
>そうでなければ、「100」という名前のテキストボックスの値を表示する
>というものです。
>
>
> また脱線しますが、
>上記の式にはものすごく違和感を覚えます。
> 上記の式が設定されたコントロールが表示する値が、テキスト型だったり(長さ0の文字列の場合)、数値型だったりするからです。
> エクセルではデータ型を意識することはないのに対して、アクセスはデータ型にうるさいわけですが(というより、エクセルがずさん過ぎる)、
>データ型を混在させると、このコントロールの値を使って何かをしようという場合に、
>困ったことになる場合が出てきます。
>
>
> さらに脱線ですが、
>上記の式が設定されたコントロールですが、値が0である場合に0を表示させないようにしたい
>ということですよね。
> そのためにわざわざ1つのコントロールを設けるのは、無駄ではないかと思います。
>
> また、もし、値が0である場合に、0を表示させたくないというならば、
>上記の式で言えば、名前が「100」であるテキストボックスの「書式」プロパティを、
>しかるべく設定すれば、実現することができます。
>
>
> 脱線はまだ続きますが、
>コントロールの名前を、例えば「100」のように数字で始まるものにするのはNGです。
> コントロールの名前の1文字目は文字にしなければなりません。
>
> 一般機能だけでアクセスを使うのであれば、つまり、VBAを決して使わないというのであれば、
>数字で始まる名前でも何とかなると思いますが、
>後々VBAを使うかもしれないというのであれば、数字始まりは避けるべきです。
>
>
> 本題その2です。
>
>>=IIf([800]+[801]=0,"",[800]+[801]) 
> 
> この式がうまくうまく動いてもらうためには、
>フォームに、「800」という名前のコントロールと「801」という名前のコントロールが
>存在している必要がありますが、そういうコントロールは存在しているのでしょうか。
>
>
>>正解な記述を教えていただければ助かります。
>
> フォーム構成を正確に提示してもらえなければ、正確な記述など示しようがありません。
>
> なお、通常、フォーム構成と言えば、
>フォームの名前、
>フォームのレコードソース
>フォーム上の主要なコントロールの名前
>当該コントロールのコントロールソース
>あたりを提示してもらうことになります。

【12914】Re:Access関数の記述=IIfについて教えて...
回答  かるびの  - 15/12/24(木) 11:59 -

引用なし
パスワード
    外出直前なので、細かく考えてはいないのですが、
とりえず、テーブル構成はどうなっていますか。

 テーブル名
 主キーのフィールド名
 主要なフィールド名及びデータ型

を提示してください。

【12915】Re:Access関数の記述=IIfについて教えて...
発言  かるびの  - 15/12/24(木) 19:41 -

引用なし
パスワード
   >イ部署 2015年状況表
>消費部材  5000000
>社内在庫  50000
>仕入れ   150000 (ここの数式)
>
>ロ部署 2015年状況表
>消費部材  5000000
>社内在庫  50000
>仕入れ   220000 (ここの数式)
>
>このように、部署ごとに集計表を出したいです。

 イ部署やロ部署の仕入額だけを求めたいというならば、DSum関数を使います。
 また、DSum関数ではなくて、クロス集計クエリでもいけそうな気もします。
 さらに、消費部材や社内在庫の求め方によっては、集計クエリを組み合わせるということも
あるかもしれません。


 ただし、仮に、DSum関数を使うとしても、テーブル構成がまずければ、DSum関数は使えません。


 いずれにしても、テーブル構成やフォーム構成がわからないと
これ以上は回答のしようがないです。

【12916】Re:Access関数の記述=IIfについて教えて...
お礼  素人初心者  - 15/12/25(金) 9:06 -

引用なし
パスワード
   かるびの様
いろいろありがとうございました。

当方、殆ど素人で、
テーブル構成やフォーム構成など説明できません。

ありがとうございました。

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