- ベストアンサー
ACCESS2000のコードビルダの計算式について(初心者です)
フォームのテキストボックスのフォーカス喪失時に計算式が動くようにしたくてコードビルダに式を入力していたのですが、式が長すぎて改行されてしまい、エラーが出てしまいます。 一行目と二行目は繋がった計算式だと認識させる記号を入れれば改行されてもエラーにならないと聞いたことがあるのですが、本を調べてもわかりません。 もしそのような方法があるのであれば、やり方を教えていただきたいのですが? それと、私のパソコンではアクセス自体が壊れることがよくあるので、この現象がそのせいなのか、単純に式が長すぎて改行されたせいでエラーが出ているのか判断がつきません。 何度もデータベース自体を作り直してみましたが同じ現象がおきてしまいます。 本当に初心者なので、質問の意味がわかりにくかったらすみません。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> Microsoft Visual Basic という画面が開いてます。 > これがVBAという名前だとは知りませんでした。 VBA なら、 > 式を改行する事は、結局できないのでしょうか? 改行で対応するのではなく、うまく変数を使いましょう。 以下のコードで、合計金額を求めることができると思います。 Dim lngIdx As Long Dim curTotal As Currency For lngIdx = 1 To 9 If IsNull(Me("金額" & lngIdx)) Then curTotal = curTotal + 0 Else If Me("支払方法" & lngIdx) = 1 Then curTotal = curTotal + Me("金額" & lngIdx) * 12 Else curTotal = curTotal + Me("金額" & lngIdx) * 2 End If End If Next lngIdx Me.合計金額 = curTotal
その他の回答 (4)
- goo_taro01
- ベストアンサー率21% (10/46)
コード内での改行は & _ で出来ると思いますが・・・ 式がややこし過ぎるように見えます。 金額1~9が通貨型なら IIFで括らずに書いたほうが見やすくなると思います。 現在のデータにnullがあるのなら一旦0で入れてやる方が式が綺麗でしょ! もっと綺麗にするには IF ENDIFで「払込方法」の分岐とFOR NEXTで1~9までを繰り返してやれば綺麗になると思います。 頑張って下さい!
お礼
結局、改行はどうやってもできませんでした。 午前中いっぱいかけて、違う方法で計算できないか色々やってみて何とか計算結果を表示する事はできました。 まだまだ、勉強しないと質問をしてもわからない言葉ばかりで恥ずかしくなります。 どうもありがとうございました。
補足
お返事ありがとうございます。 >金額1~9が通貨型なら IIFで括らずに書いたほうが見やすくなると思います。 書くというのは、どういう意味でしょうか? >IF ENDIFで「払込方法」の分岐とFOR NEXTで1~9までを繰り返してやれば綺麗になると思います。 『IF END IF』『FOR NEXT』のような関数(?)があるのでしょうか? どちらもやった事がありません。 会社でしか、アクセスを触れないので明日出社したら色々試してみます。 とりあえず、改行は_の前に&をつければ出来るのかな? 明日、結果を書き込みます。 頑張ります!
- Gin_F
- ベストアンサー率63% (286/453)
> コードビルダに式を入力していたのですが、 式ビルダじゃないですか? コードビルダだと、 Microsoft Visual Basic - ファイル名 - [オブジェクト名(コード)] という画面がでます。 それを使っていれば、VBAを使っているということです。 > ちなみに入力していた計算式はこれです。 そもそも、テーブル構成がおかしいと思います。 きちんと正規化されていれば、このような式を記述する必要はないです。 [ACC2000] データベースの正規化の基礎 http://support.microsoft.com/default.aspx?scid=kb;ja;209534
補足
お返事ありがとうございます。 Microsoft Visual Basic という画面が開いてます。 これがVBAという名前だとは知りませんでした。 自己流でアクセスを使い出したので、あまり専門用語などはわかりませんでした。すみません。 データーベースの正規化の意味もよくわかっていません。 教えていただいたHPは、理解できるようになるまで読むには時間がかかりそうです。 今後の自分の為には読もうと思っていますが、現在作成しているデータベースには間に合いそうもありません。 テーブル構成がおかしいのであれば、テーブルの作成から作り直しになるのでしょうね。 しかし、今から作り直す時間がないのが現状です。 式を改行する事は、結局できないのでしょうか? パソコン用語もあまり知らない初心者なので、変な返事をしていたらごめんなさい。 それから、先ほどデバックしましたと書きましたが間違いです。 デバックはしていません。というかやり方がわかりません。が正しかったです。すみません。
- O_cyan
- ベストアンサー率59% (745/1260)
どのようなエラーか解りませんが・・ デバッグしてエラーの箇所を直してみてはどうでしょうか。 または長すぎる式を分割して順に演算するように記述を変更してみてはいかがですか。
補足
お返事ありがとうございます。 デバックは、しました。 でも、状況は変わりませんでした。 長すぎる式を分割して順に演算するというのは、具体的にどのようにすればできるのでしょうか? ちなみに入力していた計算式はこれです。([]の中身は若干変えてありますが式はこの通りです。) [合計金額]=(iif(isnull([金額1]),0,(iif([払込方法1]=1,[金額1]*12,(iif([払込方法1]=2,[金額1]*2,[金額1]))))))+(iif(isnull([金額2]),0,(iif([払込方法2]=1,[金額2]*12,(iif([払込方法2]=2,[金額2]*2,[金額2]))))))+(iif(isnull([金額3]),0,(iif([払込方法3]=1,[金額3]*12,(iif([払込方法3]=2,[金額3]*2,[金額3]))))))+(iif(isnull([金額4]),0,(iif([払込方法4]=1,[金額4]*12,(iif([払込方法4]=2,[金額4]*2,[金額4]))))))+(iif(isnull([金額5]),0,(iif([払込方法5]=1,[金額5]*12,(iif([払込方法5]=2,[金額5]*2,[金額5]))))))+(iif(isnull([金額6]),0,(iif([払込方法6]=1,[金額6]*12,(iif([払込方法6]=2,[金額6]*2,[金額6]))))))+(iif(isnull([金額7]),0,(iif([払込方法7]=1,[金額7]*12,(iif([払込方法7]=2,[金額7]*2,[金額7]))))))+(iif(isnull([金額8]),0,(iif([払込方法8]=1,[金額8]*12,(iif([払込方法8]=2,[金額8]*2,[金額8]))))))+(iif(isnull([金額9]),0,(iif([払込方法9]=1,[金額9]*12,(iif([払込方法9]=2,[金額9]*2,[金額9])))))) これの、7つめの足し算を入力しようとすると改行されてしまい、エラーが出るのです。
- Gin_F
- ベストアンサー率63% (286/453)
> 式が長すぎて改行されてしまい、エラーが出てしまいます。 VBAってことですよね? 実際に何桁(何文字)ぐらい記述したのでしょうか? > 一行目と二行目は繋がった計算式だと認識させる記号を入れれば 行継続文字(_)のことかな? a = b + c + _ d + e みたいに。
補足
お返事ありがとうございます。 >VBAってことですよね? すみません。VBAが何かわかりません。 >実際に何桁(何文字)ぐらい記述したのでしょうか? 半角で500文字超えたと思います。 >行継続文字(_)のことかな? a = b + c + _ d + e それです。半角アンダーバーを試しに入れてみたんですが、やっぱり式が繋がらずエラーが出たので、何かやり方が違うのか記号を間違ってるのかと思ったのです。
お礼
何度もありがとうございました。 せっかく式(?)まで書いていただきましたが、 私が昨日記入していた計算式ですが、あれは実際のテキストボックスの名前とは若干変えてあります。 実際の名前は単純に1~9ではなくそこにaとかそういう文字も入ってたりしてました。 ですので、どのように上の式を変えれば使用できるのかわかりませんでした。 変数は、やった事も聞いたこともありませんでしたので。 午前中いっぱいかけて、テーブルに計算後の金額を項目ごとに表示する欄を作って、またその金額を合計するボタンをフォームに作ってみました。 作業は余分にかかってしまいますが(ボタンを押さなきゃ計算できない)なんとか計算結果を表示する事はできました。 うまく説明できてないかもしれませんが。 なんとかなりました。 データーベースの正規化のHPは、じっくり読んでみようと思ってます。ありがとうございました。