Access VBA 質問スレ Part1
at TECH
[前50を表示]
100:桃白白
13/04/13 02:40:34.80
>>99
Function marume(ByVal s As Double) As Double
Dim Q As Double
Dim H As Double
Q = TimeValue("0:15")
H = TimeValue("0:30")
If s < Q Then
marume = H
Else
marume = Fix((s + Q) / H) * H
End If
End Function
101:デフォルトの名無しさん
13/04/13 17:33:29.73
>>100
フォームの[実時間]の時間によって[時間]に結果を出す場合で、
Function 時間(ByVal 実時間 As Double) As Double
Dim Q As Double
Dim H As Double
Q = TimeValue("0:15")
H = TimeValue("0:30")
If 実時間 < Q Then
時間 = H
Else
時間 = Fix(([実時間] + Q) / H) * H
End If
End Function
としましたがうまくいかず、どこをどうしたら良いのかまるでわかりません。
ご指摘お願いいたします。
102:桃白白
13/04/13 20:28:48.85
>>101
あら。結果がずれてた? それともなんか変な動きした?
引数の形式が違うのかな。どういう入力でどう出力された?
103:デフォルトの名無しさん
13/04/13 21:29:31.16
>>102
[開始時間]に入力、[終了時間]に入力後、
時間の差を[実時間]に表示し、これを基に[時間]に結果を表示したい、という流れですが、
フォームを開くだけで以下の、
「イベント プロパティに指定した式 読み込み時でエラーが発生しました:
このメンバー識別子は既にオブジェクトモジュールの中に存在しています。」
※マクロ名、ユーザー定義関数、[イベント プロシージャ]以外の式が指定されています。
※関数、イベント、マクロの評価でエラーが発生しました。
というエラーメッセージがでますが、正直理解できていません。
104:桃白白
13/04/14 01:59:24.64
>>103
コントロールの名前と関数の名前が競合してるんでない?
コントロールと関数を別の名前にしてコントロールソースで紐付けて
やっちゃえばいいよ。こんな感じで。
Database1.zip download
URLリンク(kie.nu)
105:デフォルトの名無しさん
13/04/14 14:28:32.69
>>104
うわー、ファイルのアップまでしていただき本当にありがとうございます。
テーブルに記録しておく必要があったため、
Private Sub 終了時間_AfterUpdate()
時間 = Marume(実サービス時間)
End Sub
ということで全てスッキリしました。
いただいたコード自体見てもほとんど理解しきれてませんが、
これから勉強しながら頑張ってみます。
再度、本当にありがとうございました。
106:デフォルトの名無しさん
13/04/19 11:54:05.25
フォームのプロパティにある「コード保持」って何でしょうか?
「はい/いいえ」はどのように使い分けるのでしょうか?
107:デフォルトの名無しさん
13/04/19 12:30:11.35
存在しないオブジェクトに関連したコードを不要になったときに自動で削除する機能がある
たとえば"ボタンA"をクリックしたときのコードを書いてある状態で
あとで"ボタンA"を"ボタンB"に名称変更したりしたときに
コード保持が「いいえ」だと"ボタンA"をクリックしたときのコードは捨てられる
108:デフォルトの名無しさん
13/04/19 16:04:50.27
どもです
つまりコード保持は、名称変更をした際に以前のコードが消えても良い
または名称変更は絶対にしないような状況であれば、「いいえ」を選択しておいても良い
と言うことで間違いないですか?
どこかで「いいえ」にした方が速度が速くなる的なことが書いてあった覚えがあるので・・・
109:デフォルトの名無しさん
13/04/19 16:43:59.98
>>107
名前の自動修正オプションとこんがらがってないか?
>>108
コード消えるのはフォームかレポート単位だぞ
名前変更とか関係なくて、そのフォームのコード全部消えるぞ
ヘルプにはコードが無いからいいえの方が処理が早いとは書いてあるな
その分制約もあるが
ヘルプみて意味がわからないなら、設定変えるのはやめとけ
110:デフォルトの名無しさん
13/04/22 10:00:33.47
>>109
遅くなりましたが、ありがとです
試しにフォームを作成時に、「いいえ」を選択しておいた状態で
イベントプロシージャを設定してみました。
その時点で自動的に「はい」に切り替わるんですね。
そしてコードを使うフォーム、レポートが1000個を超えるものは作れないと言う事なんですね。
勉強になりました。
111:デフォルトの名無しさん
13/04/25 11:56:04.36
タブコントロールでページ5枚作る。
チェックボックスによって表示ページ数を切り替えたい。
・チェックなし : ページ1〜ページ5
・チェックあり : ページ2〜ページ4
そのため、チュックボックスのイベントプロシージャで、一旦全部のページを非表示にして
そのあと、必要なページを表示するようにしてみました。
For i=0 To 5
Me.Controls("ページ" & i).Visible = False
Next i
For i=Starrt To Start+Cnt
Me.Controls("ページ" & i).Visible = False
Next i
それで、ページ5を選択している状態でチェックありにすると
消したはずのタブの周りの枠が残ってしまいます。
これを綺麗に消す方法ってありませんか?
環境はAccess2010です。
112:111
13/04/25 12:00:42.84
忘れてましたがタブの背景色を変更したいので
タブコントロールのプロパティで「テーマの使用」を「はい」に設定してあります。
113:デフォルトの名無しさん
13/04/25 14:29:36.88
消す前に違うページを選択すれば良いだけじゃないのか?
114:デフォルトの名無しさん
13/05/21 13:36:25.32
チェックボックスの true が -1 から 1 に変わったようです
2007からでしょうか?
変更がめんどくさい
115:デフォルトの名無しさん
13/05/22 11:48:10.00
>>114
2003と2007で試したけど非連結で画面でチェックした場合はどちらも-1になる
ただし、コードで1をセットしたら1のままだった
まず1をセットするコード書くのが悪い
そして、1でも-1でもBooleanとして評価したらTrueなんだから
そんな事に影響されるコード書くのが悪い
116:デフォルトの名無しさん
13/05/22 14:18:44.22
>チェックボックスの true が -1 から 1 に変わったようです
>2007からでしょうか?
キリっ
117:デフォルトの名無しさん
13/05/22 14:27:02.75
知らんがな
ってレスしようと思ったけど
かわいそうなので放っといた
118:デフォルトの名無しさん
13/06/04 02:35:18.23
月曜会社を休んで家で土曜から月曜までVBAをひたすら書き続けた結果
頭が超重くなって3日目は何やってるかよくわからないまま終わってしまった
VBAのコーディングをぶっ通しでやるのは2日が限界か?
119:デフォルトの名無しさん
13/06/05 22:11:38.14
>>118
限界は人それぞれだろうが、無理はすんなよ
120:デフォルトの名無しさん
13/06/21 00:57:48.54
access 2003 にて
SendObjectメソッドを利用して、メールを送信したいと思っています。
実際にメールを送れるようにはなっているのですが、
送信メール本文に「mdbファイルと同一ディレクトリにある単体の.msgファイルの本文」(.msgファイルの場所はフルパス指定でも構いません)
を表示させる事は可能でしょうか?
イメージ的には、テーブルから送信先アドレスを収集し、.msgファイルの本文の内容をテンプレートとして一括送信する
と言った感じです。
121:デフォルトの名無しさん
13/06/21 01:01:26.56
書き忘れました。
メール送信ソフトはoutlookです。
122:デフォルトの名無しさん
13/06/21 07:11:37.65
.msgファイルの形式ってたぶん公開されてないんだよなぁ
どうやってメールを.msgで保存してるかしらんが、そっちを変更した方が楽な気がする
outlookでもVBAは使えるぞ
123:デフォルトの名無しさん
13/06/30 18:38:52.19
>>120
OutLookのSession.OpenSharedItemで.msgファイルの読み込みできるが
他のアプリからOutLookいじるのはお勧めしない
OutLook側でmdbに書きだすとか、プレーンテキストで保存するとかした方が良いんじゃね
124:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
質問です
ODBCの接続する際に
IDとパスワードを入力するボックス(VBAで設定したものではない)がありますが、
初めから半角英数字になるように設定はできますか?
125:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
VBAで設定したものではないものを、VBAでどうこうするのは無理があります
126:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
>>125
ですよね。
IDやパスワードを入力するときに各々気を付けてもらうしかないですね。
127:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
>>126
プロパティにないの?
128:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
ODBCのミドル層で出てるダイアログだから、アクセス側からいじれるプロパティなんてないだろ
自分でIDとパスワード入力してもらうフォーム作ってそこに入力してもらえ
129:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN
DBの持ち物か。すまん。
ダイアログの出る直前にACCESSで入力を固定して終わったら解除ってできないのかね。
(調べてない、ただの理想を述べてみた。)
130:デフォルトの名無しさん
13/09/01 00:30:06.54
>>129
>>124が言ってるのは多分、ODBCで接続するときにユーザとパスワードを指定しなかったときに出るやつ
自分でちゃんと接続できるユーザとパスワード指定したら出ない
間違ったユーザやパスワード設定したらしらん
131:デフォルトの名無しさん
13/09/01 02:59:29.29
Access初心者です。
VBAでExcelからデータをコマンドボタンで自動インポートさせる物を
作っています。
インポート漏れがないかのチェック処理もさせたいのですが、
どのようにすればいいかわかりません、ご教授お願いします。
132:デフォルトの名無しさん
13/09/01 03:24:10.08
>>131
レコード数で比較すれば?
133:デフォルトの名無しさん
13/09/01 03:48:29.03
>>132
ありがとうございます。
仮に件数が合わなくてインポート漏れしたレコードを
特定するための処理をいれることはできますか?
134:デフォルトの名無しさん
13/09/01 03:59:24.56
ユニークキーで差分とれよ
少しは考えろよ
135:デフォルトの名無しさん
13/09/01 04:00:02.93
>>133
ユニークキーで差分とれよ
少しは考えろ
136:デフォルトの名無しさん
13/09/01 08:49:32.79
インポート漏れなんてあるの?
137:デフォルトの名無しさん
13/09/01 09:02:48.06
結構ある
あと勝手にデータ変換されてたりもする
138:デフォルトの名無しさん
13/09/01 09:25:38.41
そうか
ならインポートしてからチェックするより自前のコードでインポートした方がいいんじゃない?
139: 【だん吉】
13/09/01 09:31:40.27
自分はそうしてる
140:デフォルトの名無しさん
13/09/01 10:05:17.59
ウィザードにまかせてるとひどい目にあう
141:デフォルトの名無しさん
13/09/01 10:35:21.42
Access初心者なので、そのVBAのコードの書き方がわかりません
教えていただけませんか
142:デフォルトの名無しさん
13/09/01 10:36:54.67
いいですよ
143:132
13/09/01 19:42:00.26
>>131
www.nurs.or.jp/~ppoy/access/access/acX014.html
144:デフォルトの名無しさん
13/09/01 20:23:21.63
インポート漏れするデータ欲しい
試してみたい
145:デフォルトの名無しさん
13/09/01 23:14:50.69
数字型のとこに文字入ってるデータとか用意したらいいんじゃね
146:デフォルトの名無しさん
13/09/01 23:38:03.38
>>145
うーん、そういうデータをインポートすると普通にエラーとして扱われて
「テーブル名_$インポート エラー」 ってテーブルが生成されるから
インポート漏れのレコードがわからなくて困る、なんて状況にはならないんだよね
147:デフォルトの名無しさん
13/09/02 10:35:57.67
インポート漏れのレコードがわからなくて困る、なんて状況になると言ってる人はいないが
148:デフォルトの名無しさん
13/09/02 10:57:43.03
おもろいな
149:デフォルトの名無しさん
13/09/05 23:50:52.09
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
strac, strxls, True, strrange
上記でインポート エラーになるので引数のacImportのところに、
作成したインポート定義にしたいのですができるのでしょうか
150:デフォルトの名無しさん
13/09/07 03:42:11.28
よし
151:デフォルトの名無しさん
13/09/07 16:59:26.27
そもそもワークシート変換にインポート定義とかないだろ
152:デフォルトの名無しさん
13/09/09 01:46:05.73
Accessの初心者です。
レポート印刷でページヘッダーのコードが変わったタイミングで改ページしたい
かつ詳細の明細行は4レコードだけで改ページさせる、両方の条件を満たせるには、
どうやって作成したらよいかご教授お願いします。
153:デフォルトの名無しさん
13/09/09 02:08:51.60
ページヘッダーじゃなくて、その項目でグループ化してヘッダー作る
そのヘッダーかフッターで改ページを設定する
詳細の高さを4行分になるようにヘッダ、フッタや余白を調整する
つか、VBAまったく関係ない話
154:デフォルトの名無しさん
13/09/09 07:18:08.57
>>153
ここはVBAのスレですよね?VBAと関係ある話をしてください。
VBAとまったく関係ない話をしたのはあなたです。VBAでお願いします。
155:デフォルトの名無しさん
13/09/09 13:03:59.99
VBAを一言で表すと
156:デフォルトの名無しさん
13/09/09 13:20:44.56
>>154
マジレスしといてやるが、VBAでやるよりよっぽど>>153の方法の方が良いぞ
だがあえてVBAでやりたいなら
明細セクションの最初と最後に改ページコントロール(改ページ1,2)を配置して
Dim 行数 As Integer
Dim 前コード
Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Me.改ページ1.Visible = False
Me.改ページ2.Visible = False
前コード = Me.フィールド5
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me.フィールド5 <> 前コード Then
Me.改ページ1.Visible = True
行数 = 0
Else
Me.改ページ1.Visible = False
End If
前コード = Me.フィールド5
行数 = 行数 + 1
If 行数 > 4 Then
Me.改ページ2.Visible = True
行数 = 0
Else
Me.改ページ2.Visible = False
End If
End Sub
こんな感じ。この例ではフィールド5が変わったら改ページな
157:デフォルトの名無しさん
13/09/09 13:22:34.74
う。 は空白に置換してくれ
つか普通に貼り付けできなくなったのかよ
158:デフォルトの名無しさん
13/09/10 00:16:36.47
>>156
もう少し教えてください。。。
明細が5明細あった場合、
コードA
00001
00002
00003
00004
改ページ
コードA
00005
改ページ
コードB
00001
00002
00003
改ページ
コードC
00001
こんな感じで出したいのですが
159:デフォルトの名無しさん
13/09/10 02:26:08.63
>>158
>>156が理解できないなら、VBAでやるのやめとけ
160:sage
13/09/17 19:50:09.24
Accessのクエリで、「クエリの並び替え条件を動的に変更する」方法を
教えて頂けないでしょうか。
現状は、下記のクエリを作成しましたが、並び替え条件として判定されません。
SELECT * FROM テーブル1
ORDER BY FORMS!画面1!テキスト1.Value
よろしくお願いします。
161:デフォルトの名無しさん
13/09/17 20:22:56.49
>>160
SELECT * FROM テーブル1
ORDER BY FORMS!画面1!テキスト1.Value
これってどこに書いてるの?
162:デフォルトの名無しさん
13/09/17 21:44:28.61
>>160
どうしてもやりたいならQueryDefとか使えばできるかもしれんが
動的にSQLつくってDoCmd.RunSqlでやる方がいいんじゃね
163:160
13/09/17 22:09:44.82
>>161
Accessの「クエリ」で定義していました。
>>162
ご指摘を受けた点を参考にクエリを作成した所、うまく行きました。
ありがとうございます。
164:デフォルトの名無しさん
13/10/20 21:44:25.62
株価のデータベースを作りVBAで銘柄の抽出をしています
VBAを呼ぶ度にSQLで株価データを読み込んでるので日に何度もやると結構無駄です
そこでフォームをロードした時に纏めて銘柄毎のクラスオブジェクトを作り
フォームをアンロードするまで保持したいのですが可能でしょうか?
変数の保持はStaticで良いようですが、配列化してるオブジェクトの保持はどのようにするのでしょうか?
165:デフォルトの名無しさん
13/10/20 22:06:18.65
view
166:デフォルトの名無しさん
13/10/20 22:10:51.15
すごいVBA発見w
URLリンク(esuafai.digi2.jp)
167:164
13/10/20 22:56:11.74
フォームと連動させるのではなく、最初に実行させる時にStaticで保持し
2度目からオブジェクトが空ではないならデータを取りに行かずに
値渡しするようにして解決しました
168:デフォルトの名無しさん
13/10/21 00:11:20.78
なんか色々つっこみどろこ満載だな
まあ、動いてるならいいか
169:デフォルトの名無しさん
13/11/05 18:56:30.39
VBAでリモートのデータベースにトランザクション処理を開始して、コミット/ロールバックするのはわかりました。
これをマクロのアクションだけではできないですよね。
Vbaを嫌がる仲間が同一プロジェクト内にいるので。
170:デフォルトの名無しさん
13/11/16 13:17:48.50
初心者ですみません。コンパイルってなんですか?
171:デフォルトの名無しさん
13/11/16 13:19:54.03
疲労困憊る
172:デフォルトの名無しさん
13/11/16 13:40:52.90
コンパイルダー・オン
173:デフォルトの名無しさん
13/11/16 15:59:42.46
昔広島にあったSTGや落ちゲーキャラゲー開発してた会社
174:デフォルトの名無しさん
13/11/16 17:51:44.57
あったなぁ
175:デフォルトの名無しさん
13/11/16 18:27:38.04
脳みそコネコネの会社?なくなったのか?
176:デフォルトの名無しさん
13/11/16 18:29:57.41
マジレスしとこう
>>170
ソースプログラムを実行可能形式に変換する事
簡単に言えば、お前が書いたプログラムを実行できるように準備する作業
ACCESSなら勝手にやってくれるから、意識する必要はない
177:デフォルトの名無しさん
13/11/16 19:25:11.96
>>175
1998年に無くなって、落ちゲー関係はセガが買い取った
178:デフォルトの名無しさん
13/11/16 21:35:05.65
>>176
なるほど。では、あえてコンパイルという作業をしなくてもOK
ってことですね。
あるがとうございます!
179:デフォルトの名無しさん
13/11/25 21:45:32.92
Accessの場合、ソースを中間コードに変換する作業をコンパイルと呼んでる。
その過程でソースにエラーがあるかどうかをチェックするから
実行時エラーとかの対策にはコンパイル通しておいた方が良いと思う。
180:デフォルトの名無しさん
13/11/26 02:50:39.57
実行時エラーってのは普通、コンパイルは通った後に発生するエラーの事を言うんだが
まあ、実行時にコンパイルエラー出るのもなんだし、事前にコンパイルしとけってのは同意するが
181:デフォルトの名無しさん
14/01/31 12:48:48.93
Access独自の便利機能なのか分かりませんが
テキスト型のフィールドで日付が含まれる文を「日付順にソート」出来るのですが
これをVBAでやるにはどうしたら良いのでしょうか?
テキストに規則性が無いためにOrderByなどでは対応出来ません
テキストフィールドに入ってる文字列の例:
"第3四半期決算を1月10日に発表済み"
"第3四半期決算を2月10日"
"本決算を2月13日"
"---"
このようになってても、テーブルのフィールドを選択してソートが出来るとは初めて知ったのですが
VBAからやる方法が分かりません
182:デフォルトの名無しさん
14/01/31 13:00:11.86
>>181
>テキストに規則性が無いためにOrderByなどでは対応出来ません
最初に書いたSQLが悪かったみたいで
これで出来ました。サーセン
183:デフォルトの名無しさん
14/01/31 15:57:33.35
辞書順と偶然一致しただけなんじゃないの
184:デフォルトの名無しさん
14/01/31 18:24:40.76
そもそも
>テキスト型のフィールドで日付が含まれる文を「日付順にソート」出来るの
これが怪しいんだが
どこでこんな事教えられたんだ
185:デフォルトの名無しさん
14/01/31 19:17:48.82
そうだな、俺も出来るとは思ってなかった
しかし、実際その通りに動くのだから仕方がないw
だから最初に「Access独自なのか」と思ってるのだが
これが出来るのは2013だからかもしれない
186:デフォルトの名無しさん
14/01/31 19:30:53.46
テキスト型だから、文字数順に並び替えてるのかと思って試してみた
"本決算を2月13日"、これを"本決算を1月13日"に書き換えて試すと
日付順に並び替わる>>181の例で言うと真ん中に来る
更に"第3四半期決算を2月10日"、これを"第2四半期決算を2月10日"
とやっても日付順に並び替わるので間違いない、>>181の例で言うと一番最初に来る
しかし、2月3日と02月03日表記では並び方が変わる
具体的にはMD表記郡の中でソートされ、MMDD表記郡の中でソートされる
187:デフォルトの名無しさん
14/01/31 19:54:34.74
分かった。ググったら出てきた
2007から出来るらしいけど、勝手に日付を解釈してるのではなく
正確にはテキスト部分を無視して数値順に並び替えてる、らしい
188:デフォルトの名無しさん
14/01/31 21:40:18.27
ということはデータを統一しないといけませんね
189:デフォルトの名無しさん
14/01/31 22:33:10.45
ソートの問題じゃなくて暗黙の型変換の問題な気はするけど
>テキスト部分を無視して数値順に並び替えてる
普通にソートすればテキストでソートするんだが
どうやったらそんなソートするんだ?
190:デフォルトの名無しさん
14/01/31 22:39:33.21
どんな型変換すればそうなるのか、逆に聞いてみたい
191:デフォルトの名無しさん
14/02/01 13:42:22.69
あいまいな検索をしたい場合はLike *検索文字列* だけど
これだと、先頭文字列に外字が含まれてる場合は検索されない
のだけれど、回避方法はある?
192:デフォルトの名無しさん
14/02/02 23:15:37.86
>>191
ちゃんと検索できるっぽいけど
先頭文字に外字ってのは、検索対象のテーブルデータなのか、Likeに指定する文字列なのか?
193:デフォルトの名無しさん
14/02/03 09:59:08.52
>>192
先頭に含まれる外字は検索対象のテーブルデータです
文字列の中間に外字が含まれる場合は検索できるのに、
先頭だと検索されない減少が発生する…
194:デフォルトの名無しさん
14/02/03 16:26:19.10
>>193
かるく試したが再現しないな
OSかACCESSのバージョンによる問題か
単にお前の勘違いか
ACCESSでも限定された状況でのバグか
MDB(ACCDB)がぶっ壊れてるか
まあ、単に検索できないレコードに不正なデータが混じってるだけだと思うが
195:191
14/02/03 18:14:37.26
一応解決したっぽい
原因として、dbmagicにodbc経由でリンクテーブルに
したのがダメらしい
リンクテーブルをやめて、テーブルデータごとインポートしたら
通常通りに検索できた
みんなありがと
196:デフォルトの名無しさん
14/02/03 18:49:01.92
喰らえカスども、奥義「後出し特殊条件!」
197:デフォルトの名無しさん
14/02/03 18:58:14.00
生データインポ時に変換されただけとかは?
つまりODBC接続でもデータを相応しい変換しておけば解決できるのかも
198:デフォルトの名無しさん
14/02/03 22:22:24.80
そもそも外字サポートされてるのかどうかしらんが
たんにdbmagicで外字がバグってただけだろ
199:デフォルトの名無しさん
14/02/08 21:20:31.59
SQLのReplace Intoに相当する物って有るんですか?
200:デフォルトの名無しさん
14/02/10 01:08:00.70
フォームに伝票基本情報
サブフォームに詳細というか明細欄(だいたい30レコードくらい)配置して、
1売上1レコードになるようにしています。
サブフォームに、
内容 金額 委託 委託金
とフィールドがあり、委託したときに入力するですが、
(この委託の部分も、
1売上(外注)1レコードにできませんか?
201:デフォルトの名無しさん
14/02/10 01:42:27.90
誰か翻訳
202:デフォルトの名無しさん
14/02/10 11:01:12.98
>>199
そもそも標準的なSQLにそんな命令聞いた事ない
ACCESSでも聞いた事ない
203:デフォルトの名無しさん
14/02/10 11:05:35.28
>>200
なにがしたいか良くわからんが、サブデータシートとかサブフォームのネストとか
たぶんそれでできるんじゃね
204:デフォルトの名無しさん
14/02/12 15:25:40.29
>>199
MySQLの独自実装か?
SQL ServerにもPostgreSQLにもないが・・・。
どんな動きかググってまで答える気にならない。
205:デフォルトの名無しさん
14/02/16 11:19:02.87
>>202
>>204
ググレカス
206:デフォルトの名無しさん
14/02/27 09:57:10.80
練習がてらVBAでユーザー定義関数をつくろうかと思ったんですが思った通りのものが作れず困っています。
というか簡略化できないもんかと思っているわけですが。
OS XP
Access 2003
Function AAA(Parm01,Parm02,Parm03...) AS String ’parmは最終的にParm24までできますがここでは簡略化
If Parm01 = "S" or Parm01 = "A" then
AAA = "1"
Exit Function
Else
AAA = "0"
end if
End function
とすごく単純なものなのですが、Parm01〜Parm03(実際にはParmは24個)にはそれぞれS・A・B・Cのいずれかが入っているので
それを数値に変換する仕組みを作りたいのです。
SかAだったら1を。それ以外(B・C)だったら0を返す。
上には記載していませんが最終的にはParmの中身を全て合計した値を返すようにいじる予定です。
で、問題なんですが、IF文の中でParmの中身を判定しているわけですが、これをParmの数だけ作るのはなんか美しくない。
Parm01〜24をまとめて判定するにはどのようにするのが美しいでしょう。
ご教授頂ければ嬉しいです。
207:デフォルトの名無しさん
14/02/27 11:20:17.13
>>206
まず24個も引数取るのを美しいか疑問に思えよ
その24個をまとめたコレクションなり配列なり用意するとか
その24個にあまり関連がないないならParamArrayつかえ
(その前提でまとめて同じ引数にするのおかしいけどな)
208:デフォルトの名無しさん
14/02/27 11:34:23.61
>>207
ParamArrayというのがあるんですね。ありがとうございます。調べてみます!
美しさに関しては超ごもっともなんですが、如何せん元のデータをいじる権限がなくてですね。
元データの開発者をぐーで殴りたいレベル。
識別コード(一意)|24ヶ月前|23ヶ月前|22ヶ月前|21ヶ月前|・・・|当月|
ってな感じなんですよ。
んでこの○ヶ月前ってのがParmになるんですけどコレクションにせよ配列にせよ、結局は同じことなので
AAA(24ヶ月前,...当月)ってやっちまったほうが早いかなと。
大変助かりました。ありがとうございます。
209:デフォルトの名無しさん
14/02/27 14:06:57.28
VBAにそんなもんあんのか?構造体使うのが普通だろ
ただしVBAの構造体は遅いけどな
210:デフォルトの名無しさん
14/02/27 14:09:36.05
有りますね、サーセンw
211:デフォルトの名無しさん
14/02/27 15:11:10.30
ACCESSなら元データはテーブルじゃないのか
だったらレコードセットなり渡せば済む話だとおもうが
212:デフォルトの名無しさん
14/03/12 22:15:26.86 W4Gp9YVD
設計の悪いDBだとたまに見る形だな
一々縦横変換とかしなきゃならんやつ
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4211日前に更新/55 KB
担当:undef