• 締切済み

ACCESS 長い式をマクロに書きたい

教えてください! Windows7/ACCESS2003 利用中です。 テーブル内容 60程度の業者があり、その業者の数分フィールドがあります。 つまり、フィールドが60以上あります。 クエリに仕入れ合計を計算する式を追記しました。  式1:NZ([F10],0)+NZ([F11],0)+..................NZ([F70],0) この式をマクロに記載すればよいという照会文を読んだのですが どう書き込めばよいのかわかりません。 マクロに式を記載して、クエリの式には 式1:ShiireGenka() とでもして 呼び出す形にしたいのですが、どなたかプロシージャのコードを ご教授いただけないでしょうか。 ためしに、下記のようなコードを書きましたが、やっぱりうまくいきませんでした。 マクロ記載 Public Function ShiireGenka() ShiireGenka = NZ([F10],0)+NZ([F11],0)+..................NZ([F70],0) End Function クエリ記載 式1:ShiireGenka() どうぞよろしくお願いいたします。

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

nicotinism様の仰っておられる通りExcelの守備範囲です。 基本的に ・Excel:表計算 ・Access:レコード処理 となっています。 用途によって使い分けましょう ※[表計算]、[:レコード処理]の両方の処理をするときは エキスポート、インポートでデータを移動します。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

基本的にデータが増えた場合に 横方向(フィールド数の増加)ではなくて 縦方向(レコード数の増加)になるようにします。 でないとデータ増の度に クエリやフォーム・レポートの設計をやり直さねばなりません。 今現在で70件程度でこれからも増える可能性があるのでしょう? その度に設計のやり直しを行う必要が発生するなら そのテーブル設計や相互の関係がうまく行っていない証です。 『正規化』について調べられると良いとおもいます。 たとえば http://support.microsoft.com/kb/283878/ja http://www.kogures.com/hitoshi/webtext/db-seikika/index.html テーブル設計はAccessの土台を決める大事な所です。 ここが疎かにして勢いでやっつけてしまうとドツボにはまります。(経験者談) 大きな紙の色々な要素を書き出して、鉛筆であれこれ線を引いたりメモを加えたりして 考えてみてください。 遠回りのように感じられるかもしれませんけどね。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

クエリをSQLビューで開いて、内容をテキストエディタにコピペして編集してはどうでしょう? 見た目は、編集結果をSQLビューにコピペしてからデザインビューに戻せばOK。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

前回回答したものです。 また随分とフィールド数が増えましたね。 前回の時も少し気になったのですが どうも、テーブルの設計が良くないように感じます。 (いまさら言うなよと叱られそう。。) Excel的な考えで行っていませんか。 一つの製品に対して部品点数が70個 各々が別の業者からの仕入れで、製品によっては使われない(仕入がない) 部品がある・・のようなものでしょうか。 そちらの状況・事情を詳しく説明されれば、 根本的な解決に繋がる回答があるやもしれません。 (私は、ちょっと自信が有りません)

Lets-nupunupu
質問者

補足

またまたご回答ありがとうございます。 確かに、テーブル設計がおかしいのは、お恥ずかしいところでございます。 ただ、できるだけ1つにまとめたくて、1テーブルにしてしまいました。 部品ほど細かくは分けてはいないのですが、管理する仕入先のメーカーがいつの間にか増えて しまいまして、フィールドも増えてしまいました(苦笑) ふぅ・・・すいません。

関連するQ&A

  • SubではなくFunctionで作られる理由

    access2007を使っています。 素朴な疑問なのですがマクロを変換した時はなぜ Subプロシージャーではなく、Functionなのでしょうか? 「クエリを開く」と言うマクロを、VBAに変換したところ ******************************************************* Function マクロ1() On Error GoTo マクロ1_Err DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ******************************************************* となりました。 戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが なぜ上記のコードはFunctionなのでしょうか? Functionで作る理由を教えてください。 特に意味はないのでしょうか? ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。

  • access2000でif式を使いたい

    access初心者ですが教えてください。 住所録を作成していて、ラベルを印刷できるレポートを作成したいと考えています。 会社名フィールドと担当者フィールドがあり、 担当者フィールドに入力がされているときは 御中フィールドに「御中」と表示されるような エクセルでいうIF式は、どうすればいいのでしょうか? クエリで計算させればいいのですよね? よろしくお願いします。

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • Access2016 クエリが開きません。

    よろしくお願いします。 当方、Access基礎本片手に勉強中の初心者です。 クエリを訂正し保存後、開こうとしたら 式に未定義関数'Nz'があります。と出て開きません。 たしかにNzを触ったので、そのせいだと思いますが 修正したいにも開かないので困っています。 詳しい方、お教えください。よろしくお願い致します。

  • Access2002のマクロ条件について

    WindowsXPでAccess2002を使用しています。 このたび、過去の方が作成されたAccessを修正することとなりました。 VBAを使用したものではない簡易なファイルですが、マクロの条件を変更しようとしても なかなかうまくいきません。どのようにすれば宜しいでしょうか。 ---------------- ≪現在の仕様≫ テーブル名:T#ZIP フォーム名:F#Select クエリ名:Q#Delete、Q#Import マクロ名:M#Create_Table (1)Access起動時(の設定)は「F#Select」というフォームが開く (2)下記マクロ「M#Create_Table」が実行される  マクロ1行目:下記条件のとき、マクロを中止する          [Forms]![F#Select]![CRTDATE]=Date()  マクロ2行目:テーブル「T#ZIP」のデータを削除するクエリ「Q#Delete」を実行する  マクロ3行目:テーブル「T#ZIP」にデータを追加するクエリ「Q#Import」を実行する ≪動き≫ 前提:「F#Select」の[CRTDATE]というフィールドには「T#ZIP」が更新された日が設定される その日初めてそのAccessを開くと、マクロにより削除クエリ~追加クエリが順番に実行された後、 フォーム「F#Select」が表示される。その後Accessを終了し、同日中に再度Accessを開いても マクロは実行されない --------------- 現在、追加するデータが多い場合、時間がかかりインポートが途中で失敗することがあるのですが 再度Accessを開いても既にインポート済みと判定されてしまい、自動的にはマクロは実行されない という課題があります。 インポートが失敗するとき、削除は完了しているため、テーブルデータは0件なので、 「その日に既にテーブルを更新済み かつ テーブルデータ件数が1件以上ある場合」 マクロを中止する、という条件を設定したいと思います。 そこで、マクロ1行目の条件欄に [Forms]![F#Select]![CRTDATE]=Date() And DCount("[T#ZIP]","*")>0 と記載したところ、その日最初のインポートはうまく行っている様子ですが、 マクロ終了後に突然Accessが終了したり、再度Accessを開いても「F#Select」が 全く表示されなくなったりと、うまくいきません。 バグというよりは、私の設定が悪いのだと思われますので、 ・フォーム[F#Select]の[CRTDATE]フィールドが Date()   かつ ・テーブル[T#ZIP]に1件以上でもデータがある 場合はマクロを中止する としたい場合の条件設定方法(入力内容)につきまして、どなたかおわかりの方 ご教示いただけますでしょうか。 何卒よろしくお願いいたします。

  • ACCESSでマクロ実行時コンパイルエラー

    テーブルにある受付日のデータが20070124のように 数字の羅列で入力されている為、 クエリで下記のように、2007年 第○週、 と抽出していました。 式1: Left([受付日],4) & "年 第" & Format(Format(DateSerial(Left([受付日],4),Mid([受付日],5,2),Right([受付日],2)),"ww"),"00") & "週" それをマクロでワークシートに変換・プロシージャを実行しました。 モジュールには Function exMsgBox○○() MsgBox "○○のエクスポートが終了しました ", vbSystemModal, "終了確認" End Function と入力されています。(○○はワークシート名) ところが、今まで実行できたのが急に 「クエリ式'Left([受付日],4)・・・のコンパイルエラーが 発生しました」と言って実行できなくなりました。 何が悪いのでしょうか? ちなみにAccess2000です。

  • Access マクロでのテーブル削除

    インポートの際にエラーテーブルが出来たら削除したいのですが、うまくいきません。 マクロでオブジェクトの削除でテーブルを指定すると、エラーテーブルが作成されなかったときにエラーになってしまいます。 VBAを作成し、プロシージャの実行で下記のファンクションを呼び出すと 【指定した式にMicrosoft Accessが見つけることのできない関数が含まれています】というエラーになります。 Public Function 削除() On Error Resume Next DoCmd.DeleteObject acTable, "TableA_インポート エラー" End Function できればVBAを使わずに「テーブルがあれば削除、なければなにもしない」というのを行いたいのですが、良い方法はないでしょうか? よろしくお願い致します。

  • ACCESSのフィールドに記述する式について

    次のソフトを使っています。 ACCESS 2003 Windows7 次のことをやりたいです。 1つのレコードに業者が20フィールドほど並んでいるテーブルを作成しました。 クエリのフィールドに式を1つ追加しまして、1レコードの中で 業者フィールドにNullが1つ以上あるかないかを調べる式を 作りたいです。 1つも無ければ、値を表示し、1つ以上ある場合は値を表示しないという ことをやりたいのです。 そもそも、このようなことができるのかもわかりませんが、 どなたかお助けくださいませ。 よろしくお願いいたします。

  • アクセスのフィールドで<>

    アクセスのクエリで、フィールド1に「0」以外のものは「フィールド2」に1と返すために、 クエリのフィールド2の式に、「式1:([フィールド1]<>0)」と記載すると、 -1とマイナス表示になってしまう理由が理解できません。 参考になるようなURLがあればお教えください。

  • マクロからFunctionプロシージャーを実行する

    マクロからFunctionプロシージャーを実行するには? 標準モジュールに Function アプリケーションのサイズを最大化する() DoCmd.RunCommand acCmdAppMaximize End Function があるのですが、 マクロからこれを実行したいのですが、見つかりませんと言う旨のエラーが発生します。 何が間違ってるのでしょうか? エラー番号は2482が表示されます。 ご回答よろしくお願いします。

専門家に質問してみよう