AC2000/WIN2000です。
以下のようなカスタム関数を使って、クエリーで順位を振っているんですが、
変数JUNをリセットしていないので、処理を行う毎に数字が増えていってしまいます。カスタム関数の変数をリセットするにはどうすれば良いんですか?
Global MAEBUKA, REN, JUN'(順位) As Integer
Option Compare Database
Function G_RENBAN(BUKA As Integer) As Integer
If MAEBUKA = BUKA Then
G_RENBAN = JUN
Else
G_RENBAN = JUN + 1
JUN = JUN + 1
End If
MAEBUKA = BUKA
End Function
No.1
- 回答日時:
JUN変数はGlobalで使用するように宣言されているためG_RENBAN関数が終了してもその値を保持します。
もし、G_RENBAN関数以外で使用する予定が無いのであればG_RENBAN関数内で宣言すればG_RENBAN関数の呼び出しのたびに初期化されます。またこの変数を他の場所で使用するのであれば、G_RENBAN関数内でJUN変数を使用する前にJUN = 初期化したい値
とすればG_RENBAN関数を呼出す毎に初期化されます。
この回答への補足
tksoftさん、ご返事有り難うございました。
ただ、以下のようにやってみましたが、今度は順位の数字が増えて行かなくなってしまったのですが・・・。
Global MAEBUKA, REN, JUN As Integer
Option Compare Database
Function G_RENBAN(BUKA As Integer) As Integer
JUN = 1
If MAEBUKA = BUKA Then
G_RENBAN = JUN
Else
G_RENBAN = JUN + 1
JUN = JUN + 1
End If
MAEBUKA = BUKA
End Function
No.2
- 回答日時:
すみません、どうやら私が問題をよく分かっていなかったようです。
今回は、関数G_RENBANを使用して何かの順位をつけていて、途中まではうまく順位が着いているが、何処かの時点で順位をリセットしたい・・・という風に解釈しました。
もし、このような場合であれば、変数をリセットするプロシージャを作成し、変数をリセットしたいタイミングで呼び出せばよいかと思います。
Sub ResetParam()
JUN = 1
End Sub
また、大きな勘違いをしているようであればご指摘ください。
No.4ベストアンサー
- 回答日時:
分かりました!!
すみません、とんでもない勘違いをしていたようです。
まず、変数をリセットするタイミングですが、クエリーを開く直前がよろしいかと思います。
<<方法其の壱>>(推奨する方法)
クエリーをどのように開いているのかで多少やり方は変わりますが、データベースウインドウでクエリー名を直接ダブルクリックしていると仮定すれば、以下の方法が最も簡単だと思います。
(1)まず変数をリセットする関数(以下参照)をモジュールに作成して下さい。G_RENBAN関数と同じシートでいいです。
Function ResetParam()
MAEBUKA = 1
REN = 1
JUN = 1
End Function
(2)「マクロ」を新規作成
(3)1行目のアクションに「プロシージャの実行」を指定し、プロシージャ名に「=ResetParam()」とします。
(4)2行目のアクションに「クエリーを開く」を指定し、開きたいクエリーの名前を指定しておきます。
(5)作成したら、適当な名前をつけて保存
これで、クエリーを開く代わりに、このマクロを実行すれば常にご希望の結果が得られると思います。
注意
・G_RENBAN関数は質問で書いたものを使用してください。
・ResetParamは変数を全て1で初期化していますが、適当に好きな値で初期化してください
<<方法其の弐>>
・・・とここまで書いてなんですが、#1でも書きましたがJUN変数他はGlobalで使用するようになっているため、クエリーの実行直前に初期化する方法を書きました(安全のため)。もし、G_RENBAN関数がクエリーの実行時にしか使用しないのであればこのGlobal変数をLocal変数にするともっと簡単です(以下参照)。この場合はマクロなんてめんどくさいものを使用せず、単にG_RENBAN関数の修正だけで大丈夫です。
Global MAEBUKA, REN, JUN'(順位) As Integer ←ここを削除
Option Compare Database
Function G_RENBAN(BUKA As Integer) As Integer
Dim MAEBUKA As Integer, REN As Integer, JUN As Integer ←追加
If MAEBUKA = BUKA Then
G_RENBAN = JUN
Else
G_RENBAN = JUN + 1
JUN = JUN + 1
End If
MAEBUKA = BUKA
End Function
恐らく、これでお望みの結果が得られると思います。もし違っていたら・・・もう一度補足してみて下さい。また、ひょっとするとクエリーを開くのはフォームからボタンを押して開いているかもしれません、この場合も基本的な考え方(変数初期化のタイミングはクエリーを開く直前)は同じですので頑張ってください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
精子が黄色?
-
口の中に黒い血の塊
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
中出しをするとお腹が痛い・・・。
-
精子に血が・・・
-
これって喉仏ですか? 私は女性...
-
爪が紫色?
-
納豆食べた後の尿の納豆臭は何故?
-
筋トレするとチンコが縮んじゃ...
-
射精をして1週間以内に尿検査を...
-
尿検査の前日は自慰控えたほう...
-
EXCELで式からグラフを描くには?
-
excelでsin二乗のやり方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報