[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 06/05 23:02 / Filesize : 55 KB / Number-of Response : 213
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Access VBA 質問スレ Part1



1 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:53:46.88 ]
AccessのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンは必ず書きましょう。

★2 AccessのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 AccessのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★5 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

関連スレ
Excel VBA 質問スレ Part23
toro.2ch.net/test/read.cgi/tech/1327763113/l50


175 名前:デフォルトの名無しさん mailto:sage [2013/11/16(土) 18:27:38.04 ]
脳みそコネコネの会社?なくなったのか?

176 名前:デフォルトの名無しさん mailto:sage [2013/11/16(土) 18:29:57.41 ]
マジレスしとこう
>>170
ソースプログラムを実行可能形式に変換する事

簡単に言えば、お前が書いたプログラムを実行できるように準備する作業
ACCESSなら勝手にやってくれるから、意識する必要はない

177 名前:デフォルトの名無しさん mailto:sage [2013/11/16(土) 19:25:11.96 ]
>>175
1998年に無くなって、落ちゲー関係はセガが買い取った

178 名前:デフォルトの名無しさん [2013/11/16(土) 21:35:05.65 ]
>>176
なるほど。では、あえてコンパイルという作業をしなくてもOK
ってことですね。
あるがとうございます!

179 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 21:45:32.92 ]
Accessの場合、ソースを中間コードに変換する作業をコンパイルと呼んでる。
その過程でソースにエラーがあるかどうかをチェックするから
実行時エラーとかの対策にはコンパイル通しておいた方が良いと思う。

180 名前:デフォルトの名無しさん mailto:sage [2013/11/26(火) 02:50:39.57 ]
実行時エラーってのは普通、コンパイルは通った後に発生するエラーの事を言うんだが
まあ、実行時にコンパイルエラー出るのもなんだし、事前にコンパイルしとけってのは同意するが

181 名前:デフォルトの名無しさん [2014/01/31(金) 12:48:48.93 ]
Access独自の便利機能なのか分かりませんが
テキスト型のフィールドで日付が含まれる文を「日付順にソート」出来るのですが
これをVBAでやるにはどうしたら良いのでしょうか?

テキストに規則性が無いためにOrderByなどでは対応出来ません
テキストフィールドに入ってる文字列の例:

"第3四半期決算を1月10日に発表済み"
"第3四半期決算を2月10日"
"本決算を2月13日"
"---"

このようになってても、テーブルのフィールドを選択してソートが出来るとは初めて知ったのですが
VBAからやる方法が分かりません

182 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 13:00:11.86 ]
>>181
>テキストに規則性が無いためにOrderByなどでは対応出来ません

最初に書いたSQLが悪かったみたいで
これで出来ました。サーセン

183 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 15:57:33.35 ]
辞書順と偶然一致しただけなんじゃないの



184 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 18:24:40.76 ]
そもそも
>テキスト型のフィールドで日付が含まれる文を「日付順にソート」出来るの
これが怪しいんだが
どこでこんな事教えられたんだ

185 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 19:17:48.82 ]
そうだな、俺も出来るとは思ってなかった
しかし、実際その通りに動くのだから仕方がないw

だから最初に「Access独自なのか」と思ってるのだが
これが出来るのは2013だからかもしれない

186 名前:デフォルトの名無しさん mailto:sage [2014/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 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 19:54:34.74 ]
分かった。ググったら出てきた
2007から出来るらしいけど、勝手に日付を解釈してるのではなく
正確にはテキスト部分を無視して数値順に並び替えてる、らしい

188 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 21:40:18.27 ]
ということはデータを統一しないといけませんね

189 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 22:33:10.45 ]
ソートの問題じゃなくて暗黙の型変換の問題な気はするけど
>テキスト部分を無視して数値順に並び替えてる
普通にソートすればテキストでソートするんだが
どうやったらそんなソートするんだ?

190 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 22:39:33.21 ]
どんな型変換すればそうなるのか、逆に聞いてみたい

191 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 13:42:22.69 ]
あいまいな検索をしたい場合はLike *検索文字列* だけど
これだと、先頭文字列に外字が含まれてる場合は検索されない
のだけれど、回避方法はある?

192 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 23:15:37.86 ]
>>191
ちゃんと検索できるっぽいけど
先頭文字に外字ってのは、検索対象のテーブルデータなのか、Likeに指定する文字列なのか?

193 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 09:59:08.52 ]
>>192
先頭に含まれる外字は検索対象のテーブルデータです
文字列の中間に外字が含まれる場合は検索できるのに、
先頭だと検索されない減少が発生する…



194 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 16:26:19.10 ]
>>193
かるく試したが再現しないな
OSかACCESSのバージョンによる問題か
単にお前の勘違いか
ACCESSでも限定された状況でのバグか
MDB(ACCDB)がぶっ壊れてるか

まあ、単に検索できないレコードに不正なデータが混じってるだけだと思うが

195 名前:191 mailto:sage [2014/02/03(月) 18:14:37.26 ]
一応解決したっぽい

原因として、dbmagicにodbc経由でリンクテーブルに
したのがダメらしい
リンクテーブルをやめて、テーブルデータごとインポートしたら
通常通りに検索できた

みんなありがと

196 名前:デフォルトの名無しさん [2014/02/03(月) 18:49:01.92 ]
喰らえカスども、奥義「後出し特殊条件!」

197 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 18:58:14.00 ]
生データインポ時に変換されただけとかは?
つまりODBC接続でもデータを相応しい変換しておけば解決できるのかも

198 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 22:22:24.80 ]
そもそも外字サポートされてるのかどうかしらんが
たんにdbmagicで外字がバグってただけだろ

199 名前:デフォルトの名無しさん [2014/02/08(土) 21:20:31.59 ]
SQLのReplace Intoに相当する物って有るんですか?

200 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 01:08:00.70 ]
フォームに伝票基本情報
サブフォームに詳細というか明細欄(だいたい30レコードくらい)配置して、
1売上1レコードになるようにしています。
サブフォームに、
内容 金額 委託 委託金
とフィールドがあり、委託したときに入力するですが、
(この委託の部分も、
1売上(外注)1レコードにできませんか?

201 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 01:42:27.90 ]
誰か翻訳

202 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 11:01:12.98 ]
>>199
そもそも標準的なSQLにそんな命令聞いた事ない
ACCESSでも聞いた事ない

203 名前:デフォルトの名無しさん mailto:sage [2014/02/10(月) 11:05:35.28 ]
>>200
なにがしたいか良くわからんが、サブデータシートとかサブフォームのネストとか
たぶんそれでできるんじゃね



204 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 15:25:40.29 ]
>>199
MySQLの独自実装か?
SQL ServerにもPostgreSQLにもないが・・・。

どんな動きかググってまで答える気にならない。

205 名前:デフォルトの名無しさん [2014/02/16(日) 11:19:02.87 ]
>>202
>>204
ググレカス

206 名前:デフォルトの名無しさん mailto:sage [2014/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 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 11:20:17.13 ]
>>206
まず24個も引数取るのを美しいか疑問に思えよ
その24個をまとめたコレクションなり配列なり用意するとか
その24個にあまり関連がないないならParamArrayつかえ
(その前提でまとめて同じ引数にするのおかしいけどな)

208 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 11:34:23.61 ]
>>207
ParamArrayというのがあるんですね。ありがとうございます。調べてみます!

美しさに関しては超ごもっともなんですが、如何せん元のデータをいじる権限がなくてですね。
元データの開発者をぐーで殴りたいレベル。

識別コード(一意)|24ヶ月前|23ヶ月前|22ヶ月前|21ヶ月前|・・・|当月|

ってな感じなんですよ。
んでこの○ヶ月前ってのがParmになるんですけどコレクションにせよ配列にせよ、結局は同じことなので
AAA(24ヶ月前,...当月)ってやっちまったほうが早いかなと。

大変助かりました。ありがとうございます。

209 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:06:57.28 ]
VBAにそんなもんあんのか?構造体使うのが普通だろ
ただしVBAの構造体は遅いけどな

210 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:09:36.05 ]
有りますね、サーセンw

211 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 15:11:10.30 ]
ACCESSなら元データはテーブルじゃないのか
だったらレコードセットなり渡せば済む話だとおもうが

212 名前:デフォルトの名無しさん mailto:sage [2014/03/12(水) 22:15:26.86 ID:W4Gp9YVD]
設計の悪いDBだとたまに見る形だな
一々縦横変換とかしなきゃならんやつ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<55KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef