1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ] Excelの「VBA」に関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/ ★1 質問をするときはOSとExcelのバージョンを必ず書きましょう ★2 わからなければとりあえず「マクロの記録」をしてみましょう ★3 丸投げのプログラム作成依頼は受け付けていません ★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです Excel総合相談所 82 pc11.2ch.net/test/read.cgi/bsoft/1241825062/
280 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:27:47 ] 本当に嫌な性格だねぇ。 Pentium3の発売が何年か知ってるのかよ。 97年当時Pentium3 450MHzなんてないんだよ。
281 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:33:18 ] 粘着君が97年当時のパソコンをヤフオクで買い求めたりしてw
282 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:38:15 ] Office97が出た頃にはWindows98の話題が出ていた 多くの人はWin95にOffice97パッケージを乗せずに、 Win98もしくはWin98SEとOffice97が入ったマシンに買い換えた 1999年、Pentium IIIが現れWin98の情報も溢れてきた頃に
283 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:55:11 ] というか、277は10年以上前のPen3 450MHzって書いてるだけで、10年前にPentium3が無かったってなら 突っ込むのも解るが、10年前にはPentium3の550MHzが出てたし、280は何で絡んでるのかよくわからんな。
284 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:03:41 ] >>283 話の流れを良く読め。
285 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:09:39 ] 277=279だったら277が粘着してるが、別人だったら>>283 の言う通りだね。
286 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:13:12 ] というか、件のコードが当時は使い物にならなかったってことにしようと 約一名が躍起になってるだけのように見えて痛々しい
287 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:18:41 ] と約1名が躍起になってるようですね。 ほんと痛々しいね。
288 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:20:39 ] >>280 化石引っ張り出してきたよ 12年前のPen2 233MHzでも1回当たりの体感に差はない カーソルキーで連続移動すれば体感差あるけど カーソルキー移動1回、もしくはマウスクリック1回に置いて 色の切り替わり速度に違いは感じられない
289 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:24:34 ] 結局認めてるじゃん
290 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:28:35 ] まぁ1回ではって書いたの俺だから、俺が悪かったよ。 気が済んだか?
291 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:30:43 ] > 今の高スペック機じゃ一回では体感できないが昔ははっきり体感できたもんな。
292 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:32:54 ] >>289 話の流れを良く読め。
293 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:33:55 ] だから1回ではってのは間違いだよ。すまんね。 使い物にならないのは>>268 も書いてる通りだ。
294 名前:293 mailto:sage [2009/05/31(日) 23:34:53 ] >>268 じゃなくて>>288 な。
295 名前:288 mailto:sage [2009/05/31(日) 23:36:45 ] 残念、使い物になってるけど
296 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:00 ] どっちもファイト!
297 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:37:27 ] >>276 Excelのオブジェクトでは、図形に画像は包含されるから。 Shape > Picture 紛らわしい書き方だったか。
298 名前:通りすがり mailto:sage [2009/05/31(日) 23:38:33 ] いやそもそも >>288 は真実か? 先ずはそこから検証だ
299 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:40:22 ] 通りすがり わざわざ書くのは 自作自演 字余り
300 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:43:56 ] >>299 お前かわいそうなやつだなぁ。 まぁ自作自演じゃないのが分るのは2名だけだけどな。
301 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:46:07 ] 図星か
302 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:49:06 ] 本当の通りすがりは、わざわざ通りすがりであることを 強調する必要もないからな。 当人ではなく第三者的な意見だって事に しておきたい場合の策だったんだろうがバレバレすぎるw
303 名前:通りすがり mailto:sage [2009/05/31(日) 23:49:12 ] 違うんだけどな このIDの無い板で自作自演をするのに わざわざハンドル名付ける必要も そもそも自作自演する必要も無いんだけどな
304 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:52:03 ] 本当に通りすがりなら、勘違いしてる奴なんて放っておけば良いのに 必死に弁明するから実は通りすがりじゃないことが立証されていく まさに泥沼
305 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:53:31 ] >>3 .02は普段さんざん自作自演やりまくってるんだよ。 自分がやってるから他人もそうだと思っちゃうかわいそうな人なんだな。
306 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:54:06 ] >>304 おめー病院逝けよ。
307 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:55:05 ] > >>3 .02 そんなに焦らず、そんなに怯えずに
308 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:03:01 ] 自己を誤魔化しきれなくなると相手の罵倒に走る、正に王道パターンw
309 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:12:16 ] おまいら会って喧嘩しろよ。 勝った方が正義だw ファイト!
310 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:16:48 ] というかその前に静かになっちゃったね 自演で1回線2,3役やってたから連投規制でも喰らったかな
311 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:26:53 ] かわいそうな人。
312 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:43:01 ] ほんと、かわいそう
313 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:48:00 ] >>269 と>>275 を比較してみた。 A1〜J100をループを回してセレクトしてみた。 まずどちらもまっさらなシートで計ったら >>269 2.2秒 >>279 11秒 次に両方のシートのA1:J5000に"a"と入力してから計ったら >>269 10.59秒 >>279 23.44秒 >>288 はどういう計り方したの?
314 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 02:06:30 ] すまん、>>269 と>>275 ね。 ちなみにA1:S10000に入力したら12秒と40秒だった・
315 名前:>>261 mailto:sage [2009/06/01(月) 07:23:35 ] >>267 会社のパソコンでやってみたらなんか処理重いなと思って来てみたら 俺のへっぽこコードのせいで変な議論になっちゃったみたいですね・・・ 消すほうも塗るほうも範囲を指定すれば軽くなるのかな?
316 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:34:06 ] 良く分からんけど、changeの度に200ms以上のラグが発生したらNGだな。
317 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 07:59:23 ] 性能が高すぎるんじゃね? 比較するなら短い方が最低でも2,3秒になるように範囲を調整した方がいいかも。 値が小さくなるほど誤差の影響は大きくなるから。 あとは2007ではなく2003だと、差が少ないのかも知れない。 うちはメインもサブもXPに2003だけど、A1:J100で5回の平均取ったら メイン 1.6秒:3.9秒 2.43倍 サブ 2.3秒:7.1秒 3.08倍 A1:J200だと メイン 2.9秒:8.6秒 2.96倍 サブ 4.6秒:14.1秒 3.06倍 って結果になったよ。約3倍ってところで、2003なら5倍までの差は無いみたい。
318 名前:デフォルトの名無しさん [2009/06/01(月) 08:16:53 ] >>315 気にするな、基地外が一人紛れ込んできただけらしいから。 Excel2000で>269と>>275 比べて見たが、はっきり体感差があるよ。 >>277 や>>288 はシートの上の方の行でしか比べてないんだろう。 >>313 のように入力して最終行近くで比べれば1回でもはっきり分かる。 A1〜J100をSelectさせてみたら>>269 が8秒で>>275 が66秒だった。 Pentim D 2.8GHzの結構古いパソコンだけど、もっと昔のExce97当時の パソコンなら多分>>275 は後ろの行ではとろくて使えないと思う。
319 名前:デフォルトの名無しさん [2009/06/01(月) 08:23:23 ] >>316 だよな。おれも0.2秒ならストレス感じるよ。 しかし最近はSUMPRODUCTなどで鍛えてる人多いから、そういう人たちは我慢強いかもね。
320 名前:318 mailto:sage [2009/06/01(月) 08:41:57 ] ごめん、>>313 のように入力範囲が広ければ別に最終行近くじゃなくてA1近くでもはっきり体感差があるね。
321 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 09:34:35 ] >>320 1回65536行目近くに移動してから1行目近くににもどった場合>>275 は重くなるんじゃじゃね? 1行目近くで軽くするにはオブジェクト変数にMe.UsedRangeをセットすればいいみたいよ。 65536行近くだとやっぱ重いけどな。
322 名前:318 mailto:sage [2009/06/01(月) 09:49:56 ] >>321 トンクス 試してみたら確かにそうだった。 最初はたしかA1近くでは重くなかったはずなのに途中で重くなったのでおかしいと思ったよ。 なるほどUsedRangeね。
323 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 11:25:22 ] >>317 結構速いね。 俺はCore 2 Duo3.33GHzだがそちらのサブ機より約3倍近く遅い。 Vistaがクソなのか? ところで>>313 が書いてるように広範囲に入力したの?
324 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:45:14 ] しかし>>269 をさんざん罵倒してたやつある意味すごいよな。 他人の言うことは端から聞く耳持たないらしいけど、変な自信はたっぷりあるんだろうね。 負けることは絶対に許されない人かも知らんね。 前からここや総合相談所に統合失調症の疑いがあるやついるんだが彼かもね。
325 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:19:26 ] >>323 広範囲に入力しなくても最終行に飛んで1行に戻ってくるだけで重いみたいね。
326 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:02:31 ] >>325 だったね。
327 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:48:51 ] 速度厨 uza
328 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:44:02 ] 間違いをuzaで済ませられる性格がうらやましいね。 おれなんか落ち込んで死にたくなるよ。 そこをこらえて謝るけどな。
329 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:46:02 ] 一連の気違い発言が327じゃなかったらすまんね。
330 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:07:30 ] >>324 >>269 を罵倒してる奴なんて一人も居ないよ。 >>269 の方が優れていることは認めた上で、>>262 でも 使い物にならないほど遅くはないって話をしてるだけ。 会社でいつも怒られまくってて被害妄想気味なのかもしれないけど 誰も>>269 を責めても攻めてもいないから、よく話を読もうね。
331 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:17:39 ] 来たね。w もう見苦しいからいい加減やめようや。 会社員ねぇw
332 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:46:01 ] とりあえず落ち着こう。
333 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:48:06 ] 今頃>>262 が使いものになるってアホでつか? 使い物にならない事例がさんざん書かれてるのに見てないのかな。 ほんと見苦しいいいわけにしか見えないや。
334 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:58:00 ] >>333 まぁまぁ。 辛抱強い人には200m秒はおいて数秒のレスポンスでも遅いと感じないかも知れないんだから。 人それぞれだよ。
335 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:07:01 ] >>334 なるほどね。 スローライフの人か。
336 名前:デフォルトの名無しさん [2009/06/01(月) 22:23:20 ] For i = 0 to 20000 Cell.Interior.ColorIndex = Int(Rnd()*20) Next i したらマジで気分悪くなってきた
337 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:50 ] >>336 最新のExcelはCellsじゃなくてもいいのか
338 名前:241 mailto:sage [2009/06/02(火) 00:36:45 ] >>243 >>256 今更だけど、どうもありがとう。 勉強初めて一ヶ月経ったけど、ただテキストを最初から読んでいくだけだと、 あまり身につかないものですね。 VBAを使って何をどうしたいという動機が必要なのかな?
339 名前:デフォルトの名無しさん [2009/06/02(火) 02:09:20 ] >>337 タイポだ。まあ気にしないでくれ。
340 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:02:32 ] 時代の変化を受け入れられないんだね
341 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:40:02 ] PowerPointのVBAなんだけど、他所にないようなのでここで質問させてほしい。 PowerPointでファイルを開いてVBAを使った処理をするんだけど、 PowerPointにはExcelのGetOpenFilename()に相当するものが存在しないので、 コマンドバーを使ってファイルを開くダイアログを出してみた。 Application.CommandBars.FindControl(ID:=23).Execute これを実行してみると、ダイアログを呼び出してすぐに次の命令に進んでしまう。 つまり、新しくファイルを開く前に先に進んでエラーになってしまう。 今はブレークポイントを設定しておき、ファイルを開いてから再実行するということをしている。 タイマーを使うとか考えてみたけど、どうも現実的ではない。 何とかうまくやる方法はないだろうか。
342 名前:通りすがり mailto:sage [2009/06/02(火) 09:55:39 ] >>341 >>92 は駄目?
343 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:57:30 ] ごめん これ 閉じてから再実行でした
344 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:27:25 ] >>338 作りたいものを作って、少しずつ改良していくのがいいと思う
345 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:04:19 ] >>338 やりたいことがわからないで勉強しても無意味だよ 学校に通ってても英語の勉強が今では何の役にも立たないのと一緒 毎回これやるのめんどくせぇな、、、、なんとかならんかな、、、 からvba勉強し始めると ここの人の手助けもあって2週間位で株の自動発注から返済までが組めるようになった
346 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 14:09:08 ] 株ねぇ そういえば俺の尊敬する株屋さんどこ行っちゃったんだろうな。 某Q&Aサロンで女性になりすまして活躍してるという噂を聞いたが。
347 名前:デフォルトの名無しさん [2009/06/02(火) 18:21:01 ] さっき図書館でSE関係の新刊があったのでパラパラとめくりながら読んでたら、 ”VBAにいくら習熟しても金にならないから、優秀な人はどんどん他の言語に移っていく。 VBAは下っ端の奴がやらされる仕事だ。” みたいな意味の事が書いてあった。 薄々、同じような事を思ってたけど、いざ活字で目にするとショックだ。
348 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 18:52:54 ] 質問です。 少し時間のかかる処理をさせているんですが、 その処理が動いてる間、 ボタンなしのダイアログ等で『処理中』と表示させ、 処理が済んだら自動で消す、 といったような事はできますか?
349 名前: ◆.jruuB3RTA [2009/06/02(火) 19:06:59 ] Cells(Rows.Count,1).End(xlUp).Select Endプロパティは連続したデータ範囲の終端セルを返すので、 表の途中に空白セルがあるとデータを返せない。 と、テキストには書いてあるのですが、 空白セルがあったら、Null値とか文字列とかを入れるプログラムは書けませんか?
350 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:20:53 ] >>347 んっとだな。 VBA単体では金にならない。ってのが正しいと思うよ。 事務処理業務+VBA とか、何かの基礎に付随する能力としてのVBAは金になる。 VBAだけしこしこ組んで金にはならん。 DB+VBAとかでも生活出来る程度の金になるし、 転職する時には凄く大きなアドバンテージになる。
351 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:24:14 ] >>348 ユーザーフォームで。 もしくは別シートを表示させるとかね。 >>349 何のデータを返したい? 表の途中に空白があったら、そこに文字列を入れたいのかな? それならば、forで上から判定させながら入れて行くのが良いんじゃないかな。 for i = 1 to cells(rows.count,1).end(xlup).row if cells(i,1).value = "" then cells(i,1).value = "空欄" end if next みたいに。
352 名前: ◆.jruuB3RTA [2009/06/02(火) 19:30:15 ] >>351 どうもありがとう。 こんな短時間で答えられるなんてすごいなぁ。 図々しくて申し訳ないんだけど、 rows.count,1 の1って、どういう意味ですか? すいませんが宜しくお願いします。
353 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:42:16 ] Cells(Rows.Count, 1)..SelectとかCells(Rows.Count, 2)..Selectなどやってみれば分りますよ。
354 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:09:13 ] >>351 ユーザーフォームとは、、 まだ始めたばかりで余り単語とかも分からず…
355 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:01:54 ] >>348 VBAでプログレスバーっていうのはどこかにあるよ
356 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:47:46 ] プログレスバーってのはvbaだけですよね? excelで使いたいんです。。。 通常のVBは入ってないので。
357 名前:デフォルトの名無しさん [2009/06/02(火) 21:54:20 ] >>347 あくまで道具の一種ですよ。 ほかの言語でやる必要があればその言語を使えば良いだけ。 並列言語とかをのぞけば、要件抽出して、適当にクラスをモデリングするという基本的な作業は変わらん。 >>350 >DB+VBAとかでも生活出来る程度の金になるし、 それは他の分野で優れていて、なおかつそういうサブスキルがあればその分有利になるってだけの話だろ。 それだけで食っていけるなら、失業者なんて出ないよ。
358 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:56:38 ] 以前、FileSearchについて質問した者です。 更に質問なんですが、 FileSearchで見つかったファイル、ファイルパスをシートにリストにしているんですが、 その見つかった数だけ、隣にコマンドボタンを自動で作り、そのボタンで隣のパスのファイルを開く、 という動作はできますでしょうか?
359 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 22:08:23 ] プログレスバーの例 www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html >>358 ボタンじゃなくて、リンクではどうよ
360 名前:254 mailto:sage [2009/06/02(火) 23:32:35 ] >>255 遅ればせながらありがとうございました。 リンク先S4でやりたかったことができました。
361 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:43:00 ] >>359 リンクでやってみようと思います。 それから、FileSearch実行中にステータスバーに検索状況を表示しようと思っているんですが、 どのタイミングで記述すればいいか分かりません。 以下ソース一部です。 .SearchSubFolders = True ' サブフォルダも探索 If .Execute() <> 0 Then For Each vntF In .FoundFiles With objFSO.GetFile(vntF) GYO = GYO + 1 Cells(GYO, 1).Value = .Name Cells(GYO, 2).Value = .DateLastModified Cells(GYO, 3).Value = _ Left(.Path, Len(.Path)) With Worksheets("Sheet1") .Hyperlinks.Add anchor:=Cells(GYO, 3), _ Address:=Cells(GYO, 3).Value End With cntFound = cntFound + 1 End With Next vntF End If End With
362 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:22:43 ] >>349 >>空白セルがあったら、Null値とか文字列とかを入れるプログラム Cells(Rows.Count, 1).SpecialCells(xlCellTypeBlanks) = "Nullとか文字列" はだめ?
363 名前:341 mailto:sage [2009/06/03(水) 01:13:32 ] だめかなー
364 名前:デフォルトの名無しさん mailto:age [2009/06/03(水) 07:07:54 ] vbaって廃止されるの? VSTOだけになっちゃうの?
365 名前:デフォルトの名無しさん [2009/06/03(水) 07:19:18 ] VBAって何の為にあるのだろう? 昨日、VBAを使ってACCESSにつなぐのが1時間くらいできなくて、 さっきExcelのリボンからやってみたら1分でできた。 俺の頭が悪いだけなのかw でも、VBAやったおかげで、他のスクリプト言語の理解度が深まった気がするから、 やはり、勉強してみて良かったのかな?
366 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 07:36:02 ] >>365 お前ではどんな言語をやっても意味ないだろうな
367 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:15:48 ] 単一の機能を呼び出すだけなら、1時間もかかるのはバカだからだとしても VBAのコード書きからやるよりは、メニューやリボン、ツールバーなどからの方が速くて当然 VBAは主に何度も行う定型処理や規則処理、連続処理などに使う スクリプトも使うならそのくらいわかりそうな物だけど
368 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:16:13 ] VBAって補助的なツールとして使うだけだな。 使えればそれなりに作業効率がアップする程度かな。
369 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 08:56:47 ] 最初は時間かかってもいいからとにかく動くものを作って理解する 作ったものはエクスポートして保管しておく 後はそれをコピペして改造しながら使っていく VBAを飯の種にしてる人以外はこんなもんじゃね?
370 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 09:55:35 ] 純粋にVBAだけで食ってるのは、本書いたり教室で教えたりの人だけじゃね? 俺は全社の業務効率化の為にVBAだけで仕事してるけど、 それでも会社の事知らないと作れないから、それだけで食ってるとは言い難いな。
371 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:20:28 ] VBAもピボットも機能の一つでしょ。それ以上でもそれ以下でもない 使いどころを間違えれば仕事が遅くなるのは当然
372 名前:341 mailto:sage [2009/06/03(水) 22:14:25 ] >>366 はは。他の言語とか、そんなことないんだけどなー。 Office VBAはやらなかったもんでね。 オブジェクトモデルも理解してないんだよ。 さっと教えてみてくれよ。
373 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:42:57 ] >>372 www5c.biglobe.ne.jp/~yamag/data/Soft/VBAProgramingTIPS.html WordにもGetOpenFileNameがないらしいので参考にすれば しかし、ここはExcel VBA質問スレだ 二度と来るな
374 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:02:19 ] >>361 ですが、 特にレスがないってのは出来ないって事でしょうか・・・ それともここにはそれだけの知識を有した方がいないんでしょうか
375 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:18:19 ] もう来んな。臭すぎて気分悪いわ。 やっぱり俺が出て行くわ。
376 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:04:06 ] > それともここにはそれだけの知識を有した方がいないんでしょうか そうだよ、だから帰ってね
377 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:19:07 ] >>341 PowerPointから CreateObject("Excel.Application")して GetOpenFileNameするってのもありか
378 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:59:12 ] >>374 まあファイル総数を調べた後に1つ1つカウントすればいいんじゃね? 簡単だろ?わからないなら1から10までカウントのプログラム書いてみ?セルに表示するやつ あとはそれをどう表現するかの問題。セルに色塗ったり、色付きラベルの長さを伸ばしたり・・・ コントロールもあったかもしれん そもそも経過処理表示を本気で実装するのは難しい(無理) インスコ等でも分かると思うが、人間の感覚と処理経過に乖離が発生する。
379 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 03:09:35 ] >>374 「vba ステータスバー」でググった一番上。まさにこれかと・・・ そもそもfor文使ってるのに意味分かってないのがアウツ
380 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:52:18 ] おまえらほんと優しいな、あからさまに煽ってるやつの相手してあげるなんて
381 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:25:18 ] で?
382 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:35:17 ] って
383 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 07:50:09 ] /ニYニヽ /( ゚ )( ゚ )ヽ /::::⌒`´⌒::::\ 呼んだ? | ,-)___(-、| | l |-┬-| l | \ `ー'´ /
384 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:08:08 ] XP、Office2003を使用しています IEのherf="javascript:clickQuickLink('summary');" これをクリックしてページの推移をしたいのですが このリンクをマウスでクリックするようにvbaでクリックする方法を教えていただけないでしょうか よろしくお願いいたします
385 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:40:56 ] >>384 VBAを使ってのExcelの操作ではなくIE(IEオブジェクト)の操作はスレ違い>>4
386 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:30:08 ] いちいち言わなくてよろしい
387 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:32:16 ] 言わずとも解ってる人には言わなくても良い 言わないと解らない人には言う必要がある スレ違いな質問しちゃう人は後者なので言う必要がある
388 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:54:06 ] ほっとけばよろしい
389 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:00:08 ] 寛容と無秩序を取り違えている人?
390 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:13:58 ] うざいよ
391 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:17:48 ] スレ違い認定はもういいよ
392 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:11:47 ] 論では返せず
393 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 19:14:19 ] ならツモで
394 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 20:27:47 ] >>361 です 見付かったファイル状況ならもちろん分かります。 検索しているファイルのカウントを表示させたいんですが、 どこでどのオブジョクトを見ればよいのかが分かりません
395 名前:デフォルトの名無しさん [2009/06/04(木) 23:03:46 ] 世の中に自分で書いたソースが理解できない奴なんて居るの?
396 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:04:40 ] 2年前のソース理解できませんでした。サーセンwww
397 名前:341 mailto:sage [2009/06/04(木) 23:04:55 ] >>373 えらい人だね >>377 > CreateObject("Excel.Application")して なるほど。 明日から出張なんで、帰国したら試してみる。 ありがとう。
398 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:37:34 ] スレタイ見ようぜ。
399 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 00:10:03 ] executeした後に、どこにファイル検索数を持ってるんでしょう? プロパティやオブジェクトもググっても見つからないし、 executeしたらその.Executeの中身はすぐにhit数になってるし。
400 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:54:53 ] オブジョクト
401 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:56:30 ] オブジョイ
402 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:12:57 ] オブジョイト
403 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:46:46 ] EXCELの自動計算がとまってしまうことがあります オプションの自動計算のチェックボックスはonのままです とりあえずマクロの Private Sub Worksheet_Calculate を削除したところ止まらないようになりましたけど・・ 原因がわかりません
404 名前:デフォルトの名無しさん [2009/06/05(金) 21:45:53 ] Worksheets("Sheet1").Delete これをVBAで実行すると、シートを削除するときに本当に消していいのかという 確認ダイアログを求められるのですが これを出さずに強制的に削除する方法ってあるのでしょうか?
405 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:58:29 ] >>404 Application.DisplayAlerts = False
406 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:07:20 ] >>403 そのマクロの中身がわからんことには…
407 名前:VBA暦12時間 [2009/06/07(日) 14:49:37 ] すみません 初歩的な所ではまっています。 下記の処理は、 ”■”なら16行目に値をカウント ”□”なら17行目に値をカウント という処理をしています(4列目に実際に加算したい数値が入っています) この場合、何回もボタンを押すとどんどん値がふえてしまうのでボタンをおしたタイミングで16行目と17行目を0クリアしたいのですが、 コメントにしている部分を解除にすると、なぜか計算がされません。(0のまま) どなかたどうかご教授よろしくお願いいたします。 Private Sub CommandButton1_Click() For 列 = 5 To 27 For 行 = 5 To 10 ' Cells(16, 列) = 0 'Cells(17, 列) = 0 If Cells(行, 列) = "■" Then Cells(16, 列) = Cells(16, 列) + Cells(行, 4) ElseIf Cells(行, 列) = "□" Then Cells(17, 列) = Cells(17, 列) + Cells(行, 4) End If Next Next End Sub あと自分のレベルで参考になるVBAサイトもご紹介いただけると助かります。 よろしくお願いいたします
408 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:52:12 ] 0にクリアするところはFor文の外にしなきゃだめだよ
409 名前:VBA暦12時間 [2009/06/07(日) 16:42:40 ] うわっ!俺あほだ! ありがとうございました!
410 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:46:57 ] Option Base 1 Sub a() Dim a Dim b(3, 3) '空いてる数字探し配列bに入れる For n = 1 To 10000000 a = Range("a1:c3") For i = 1 To 3 For k = 1 To 3 If a(i, k) <> 0 Then b(i, k) = a(i, k) End If Next Next '実際に作成 For i = 1 To 3 For k = 1 To 3 If a(i, k) = 0 Then 'bにない数字を探す Do c = Int(9 * Rnd + 1) If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
411 名前:410の続き mailto:sage [2009/06/07(日) 20:48:22 ] Loop fjk: b(i, k) = c End If Range("a10:c12") = b Next Next Next If (1 = 2) Then Exit Sub 'ここまで If (Application.Match(c, b, 0) >= 1) Then GoTo fjk の時点で型が違いますとエラーが出ます、これは何故でしょうか? ワークシート関数matchで検索し、配列bの中にcがあるかどうかを調べようとしているのですが、cがどんな数字でもエラーが出てしまいます。どうしてでしょうか? コードの主な内容は、A1:C3を元に乱数で魔方陣を作ってみようというものです 配列aはA1:C3セルの数字、配列bは一時的な計算用配列です
412 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:43:55 ] 型が違うってことは型が違うんだよ!さっさと死ね!
413 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:32:48 ] え・・
414 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:38:09 ] んー。癖が強すぎるコードだなぁ。 余談だけど、こんな書き方を推奨してる参考書でもあるの? 条件指定なしのdoを使ってる所見ると、他言語で覚えたかな。 if thenでGoToに飛ばすコードは記憶の限りでは初めて遭遇したんだけど、 他の言語だと一般的なのかな?後学の為に教えてください。 cが宣言無しで突如出てきてるのは、まぁ良いのか。 bは2次元配列のはずなのに、matchでは何も指定されてないけど、 そこが問題じゃない?
415 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:39:10 ] Windows:XP オフィス:2003 VBAの勉強を始めようとセルの結合や色付けなど ごく初歩的なマクロを使ってるのですが マクロで実行した操作を戻ることはできないのでしょうか? たとえばA1:B1セルの結合をすると 戻るボタンがグレーになり、保存せずに閉じて開きなおすしか戻る方法がありません。 これをマクロで実現するにはどうすればよいのでしょうか?
416 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:00:29 ] >>414 おお!ありがとうございます!!そこでした doloopとgotoは今回始めて使いました。参考書とかは特に見ていません。 普通はuntilなどと組み合わせるのですね ワークシート関数のmatchは↓のページを参考にしたのです ttp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200706/07060141.txt If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk でも If (Application.Match(c, b, 0) >= 1) Then GoTo fjk でも型が違うとエラーが出ます。何が悪いのでしょう? ↓できるだけまとめてみました Option Base 1 Sub a() Dim b(3, 3) For i = 1 To 3 For k = 1 To 3 b(i, k) = 5 Next Next Do c = 5 If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk Loop fjk: End Sub
417 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:08:05 ] matchなんて使った事無いんだが、2次元配列内を一発で検索出来るのか?それ。
418 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:09:01 ] >>415 マクロで実行した物は戻せない。 結合したものを解除したいなら、結合を解けば良い。
419 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:48 ] >>417 可能ですよ。存在してたら数字、存在してなかったら型が違うとエラーになります。 ただ>>416 ではウォッチ式見ても型も同じです Sub a() Dim myary myary = Array( _ "加入者番号:", "加入者:", "会社名:", "登録日:", "加入日:", _ "予定事項:", "担当者:", "部門:", "区分:", "住所:", _ "請求書住所:", "電話:", "請求書電話:", "アドレス:") MsgBox Application.Match("登録日:", myary, 0) End Sub
420 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:53 ] >>416 釣りだよな?
421 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:54 ] >>420 違います。 本気で分からないので教えてくださいorz
422 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:15:54 ] >>419 それじゃ1次元配列じゃないか。
423 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:30:29 ] If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk b(2,2)が配列もしくは範囲ではないから
424 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:34:55 ] >>419 Sub test111() Dim ar As Variant ar = [{1,2;3,4}] MsgBox Application.Match(1, ar, 0) End Sub 2次元配列にmatch掛けられないじゃないか。 存在していても型エラー出る。
425 名前:416 mailto:sage [2009/06/07(日) 23:46:36 ] 申し訳ございませんでした!
426 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:28:10 ] >>414 BASICではそもそもIF THENの後のGOTOは省略できるってほど THEN GOTOが人気だったんだぜ… >>416 この用途だと Exit Doで十分だな。 というか、今時GoToなんて苦行する必要ない。 GOTO 、GOSUBなんてのはユーザー関数が無かったころの名残。
427 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:59 ] テキストとか読み込みとき、Line InputとFileSystemObjectの機能とどっちを使うほうがいいの?
428 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:25:23 ] ,-┐ ,ィ─、ri´^-─- 、 .┌f^f^f^f^f^f^f^f^f^┐ く / , ,' ヽ ヽ| ~ ~ ~ ~ ~ ~ ~ ~ ~│ `<' / ,'レイ+tVvヽ!ヽト 知ってるが │ !/ ,' i |' {] , [}|ヽリ お前の態度が | `!_{ iハト、__iフ,ノリ,n 気に入らない | // (^~ ̄ ̄∃_ア____n_____| _r''‐〈 `´ア/トr──!,.--' <_>─}、 `」レ 'ヽ、 ,.ヘーァtイ Y、.,___/ |.| | i `ー'i´
429 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:04:04 ] 昔はLine Inputだったけど、今ならFileSystemObjectを使うのが一般的
430 名前:427 mailto:sage [2009/06/08(月) 22:14:12 ] >>429 レスさんくすです
431 名前:デフォルトの名無しさん [2009/06/08(月) 23:15:19 ] Function Line(args1) ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[args1]:R30000C[args1],RC[-1])" こういう感じでargs1を変数にして呼び出し元で中身を変えて実行したいのですが どうしてもうまく来ません どうやればいいのか教えてください
432 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:46:53 ] >>431 ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[" & args1 & "]:R30000C[" & args1 & "],RC[-1])"
433 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:58 ] 俺なら = replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", "1") とやる事が多い
434 名前:433 mailto:sage [2009/06/09(火) 09:53:58 ] = replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", args1)
435 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:42:12 ] 質問です。 例えばですが、「abcdefg」といった文字列に、「def」が含まれているか、 といった処理をさせようとしているんですが、どうやって比較したらよいのでしょうか? *def*または、?def?の使い分けもできるようにしたいんですが、可能でしょうか?
436 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:50:42 ] >>435 InStr 正規表現
437 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:40:03 ] *def*と?def?の使い分けIをnStrでどうやるんだろ? 俺には分らんな。 Like演算子なら使い分けは簡単。 "abcde" Like "?bcd?"ならTrueだが "abcdef" Like "?bcd?"ならFalseだ。
438 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:35:40 ] 正規表現なら、 .*def.* .def. だぬ。
439 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:50:52 ] ADOからSQLで"*def*"とやるとエラーになんだよね "%def%"もしくは"_def_"と覚えたほうがいいと思う
440 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:09 ] >>437 横スレだけど、 len(str) が5文字かつ、instrが2なら "?bcd?" に該当するんじゃないかな。 正規表現やlike演算子使った方が楽だけど。
441 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:29:21 ] ×スレ ○レス
442 名前:437 mailto:sage [2009/06/10(水) 19:43:01 ] >>440 なるほど。
443 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 20:11:04 ] よこだっ!いいぞ!いいぞ!そう!よこっ!すれっ!すれっ!!よこすれっっ!!!
444 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:54:02 ] 質問です。 「マクロ→セキュリティ→Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れるのを、 マクロで行う事って出来ないんでしょうか?
445 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:59:50 ] >>444 何のウイルスを配布するつもりなの?
446 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:16:43 ] OS:Windows XP Professional SP2 Excel:2000 以下2つなのですが、参照している列と値を格納する配列以外は全く一緒です。 引数の参照渡しとかでまとめることはできませんか? Yousosu=0 For Each Youin In Range(Cells(36,3),Cells(49,3)) If Youin.Value="" Then ReDim Preserve Joken1(Yousosu) Joken1(Yousosu)=Cells(Youin.Row,2).Value Yousosu=Yousosu+1 End If Next Yousosu=0 For Each Youin In Range(Cells(36,4),Cells(49,4)) If Youin.Value="" Then ReDim Preserve Joken2(Yousosu) Joken2(Yousosu)=Cells(Youin.Row,2).Value Yousosu=Yousosu+1 End If Next
447 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:54:09 ] できま
448 名前:427 mailto:sage [2009/06/11(木) 01:05:01 ] s(ry
449 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:13:20 ] すぇん
450 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:00:42 ] >>446 異なる部分を引数にもつ関数作れば?
451 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:59:51 ] >>446 やりたいことが分からんけど Dim Joken(36 to 49, 3 to 4) For i=36 to 49 If Cells(i, 3).value = "" Then Joken(i, 3)=Cells(i, 2).value endif If Cells(i, 4).value = "" Then Joken(i, 4)=Cells(i, 2).value endif Next i
452 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:06:37 ] >>444 レジストリ
453 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:25:43 ] VBAの年月を取得したいのですが 以下のように作成したのですが、 年:XXXX 4桁で取得できました。 月:XX 2桁ができません、1桁になります。 5月なら05として取得したいのですが、修正方法がわかりません A1には、2009/5/1と入力しています。 VBAに詳しい方で簡単に、どうぞお願いします。 Sub sample() Dim myDate As Date myDate = Range("A1").Value Range("B7").Value = Year(myDate) Range("C7").Value = Month(myDate) Range("D7").Value = Day(myDate) End Sub
454 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:51:04 ] >>445 >>452 ウイルスとかじゃなくて、あちこちアップデートが必要ににりそうなファイルを 自動でパッチあてる感じにしたいんだ レジストリはVBEマクロでいじれるもんなの?
455 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:56:16 ] >>453 A1が日付なら Range("B7").Resize(, 3).Value = Split(Format$(Range("A1").Value, "yyyy/mm/dd"), "/") の1行で充分じゃね?
456 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:19 ] >>453 書式設定か、 Range("C7").Value = "0" & Month(myDate)
457 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:00:18 ] >>450 そうなのですが、いろいろ試してもうまくいかなくて… >>451 すみません。どんな動作をしたいか、書いておくべきでした。 なるほど…2次元ですか。 ただ、できれば動的配列にしたいかなぁなんて思ってまして。 2次元だと、Preserveは片方にしか利かないとか。 ありがとうございました。また、自分でも考えてみます。
458 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:03:50 ] >>456 それじゃ10月は010になってまずいんじゃないかなぁ。 右2文字を取り出せばいいけどね。
459 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:25:21 ] >>455 >>456 サンクス 宣言した変数(例、TTTTTTT)に05を文字列として入力したい) A1に2009/5/1と入力して、あるフォルダの2009年05月XXX.xlsというファイルを 読み込むマクロを書いています。 よろしくお願いします。
460 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:29:22 ] >>453 Range("C7").Value = "'" & Format(myDate, "mm") これじゃダメかな?
461 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:35:54 ] >>459 Format$(Range("A1").Value,"yyyy年mm月XXX")の文字列を作ってWorkbokks.Openと組み合わせるだけ。
462 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:25 ] >>460 できました。 サンクス , - ,----、 (U( ) | |∨T∨ (__)_)
463 名前:デフォルトの名無しさん mailto: [2009/06/12(金) 01:08:40 ] 取得した文字列を、すでに宣言した変数名と一致させて 使いたいのですが、できますか? やりたいのは Dim ABCDE As Integer Dim moji As String moji = AB "moji"CDE = 5 みたいな感じです
464 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:32:11 ] >>463 変数はただの入れ物だから、無理じゃないかなぁ 何がやりたいか詳しく書いてくれたら、 別の方法になるかもしれないけれど、実現できるコードを考えられるかも
465 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:26:27 ] >>464 たぶん>>463 が言いたいのはリフレクションを使って 動的に変数を追加・参照することは出来ないかってことじゃね? そんなことをして、なんになるのか分からないが、そういうことだと思う # javascriptで関数電卓のフレームワーク+プラグイン(関数やらが定義されてたりする)を作ったときに使ったくらいかな? たぶん、VBAのリフレクションは貧弱だから出来なさそうな気がする。 だけど、サンプルを見る限り、連想配列で良いんじゃね?って思うな。 最終的にやりたいことは userStatus("Jonson") = "空腹" userStatus("Harris") = "眠い" userStatus("cherry") = "ピヨピヨ来た" ってことでしょ。 VBAでどうやって連想配列を使うか知らないけど。 # たぶん、つかえないだろうなぁ # 無かったら、自分で作ればいいけど、速度面でどうなんでしょうねぇ。 # 下手なハッシュ関数作るより、 配列二つ並べて、逐一中身を検索した方が早かったりしてw
466 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 05:21:46 ] >>463 okwave.jp/qa2033484.html これみたいなカンジ?
467 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:05:14 ] >>465 なんか、全然わかってなくて書いちゃって恥ずかしいっす。 教えてくれてあんがと。 連想配列の使い方を調べたら、Dictionaryオブジェクトだらしいです。
468 名前:463 mailto: [2009/06/12(金) 07:51:24 ] "moji"CDEってのが変数ABCDEのつもりです たとえば takeda aoyama tanaka sirakawa aoyama koyama みたいな50種類くらいの名前がかぶりつつ列挙されてて、それぞれ何個 でてきたかしりたいのです。 変数 aoyama_name,koyama_name,takeda_name と人数分の変数を宣言しておいて、セルの文字列を順に取得し、 その文字列に対応する変数にカウントしていく方法ができないかと
469 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:13:29 ] 該当したらインクリメントすりゃ良いんでないかい? Instrでもlikeでも正規表現でも、何でも良い様な気がする。
470 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:34:58 ] >468 こういうことでいいのかな。 A列に(1行目から)集計対象があり、B列、C列に集計結果を出力する。 Option Explicit Dim 名前(100) As String, 件数(100) As Integer, i As Integer, i_max As Integer, 縦 As Long, 内容 As String Sub カウント() Call 初期処理 内容 = Cells(縦, 1).Value Do While (内容 <> "") If i_max = 0 Then 名前(0) = 内容: 件数(0) = 1: i_max = 1 Else For i = 0 To i_max If 内容 = 名前(i) Then 件数(i) = 件数(i) + 1 Exit For Else If i = i_max Then 名前(i_max) = 内容: 件数(i_max) = 1: i_max = i_max + 1 Exit For End If End If Next i End If 縦 = 縦 + 1: 内容 = Cells(縦, 1).Value Loop For i = 0 To i_max - 1 '集計結果の出力 Cells(i + 1, 2).Value = 名前(i): Cells(i + 1, 3).Value = 件数(i) Next i End Sub to be continued
471 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:38:23 ] 続きです Private Sub 初期処理() For i = 0 To 100 名前(i) = "": 件数(i) = 0 Next i i_max = 0: 縦 = 1 Exit Sub End Sub 以上 出現順に名前を格納する配列と件数を格納する配列を用意して、セルの内容を読み込む都度 名前配列を順に調べていく、初めてならば添字を+1して名前を格納し、同じ添字の件数配列 に1をセットするというやり方です。もっとスマートな方法があればお知らせください。
472 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:25:10 ] >>468 Excelの本来の機能は表計算ソフトだから、個数を集計する方法はいくつもあるよ。 COUNTIFとかピボットテーブルとか。 VBAだけでやろうとするより、ワークシートにデータを入れちゃって集計の関数を使った方が早い。 VBAだけでやりたいならDictionaryって便利な機能がある。同じ物があったかどうかのチェックが とても簡単。 Sub 集計() Dim name() As String 'テスト用データを用意 name = Split("takeda,aoyama,tanaka,sirakawa,aoyama,koyama", ",") Set dic = CreateObject("Scripting.Dictionary") For Each n In name '配列で集計 If dic.exists(n) Then dic(n) = dic(n) + 1 Else dic.Add n, 1 End If Next For Each d In dic '結果出力 Debug.Print d, dic(d) Next End Sub
473 名前:470 mailto:sage [2009/06/12(金) 13:14:48 ] >472 こういうことができるんですね。 集計対象データが大量の場合は、いったん文字列変数にに","をはさんで連ねていくことになりますね。 Dictionaryの機能は半角英数の大文字・小文字の別とか日本語対応はどうなんでしょう。
474 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:25:58 ] >>473 あくまでもサンプルだから , で区切ったデータを用意したけど、 実際のデータはワークシートやファイルから読み込むのが普通。 キーワードには日本語も使える。英字の大小は区別される。 データを "鈴木,高橋,山田,田中,鈴木,高橋" に変えて試してみ。
475 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:28:42 ] 50件程度なら重複チェックを省略しても、とりたてて問題はない。 For Each n In name '配列で集計 dic(n) = dic(n) + 1 Next たったこれだけで集計できる。 データが増えると遅くなるけど。
476 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:22:18 ] UserFormから数式を入力させて、その数式に該当するセルに処理を行いたいのですが、 ヒントになるサイトか関数などあれば教えてください。よろしくお願いします
477 名前:463 [2009/06/12(金) 16:27:12 ] 実は集計するだけではなく、 高橋 100点 三根 98点 山田 100点 高橋 100点 青山 97点 山田 99点 (50人くらい、データは1000件くらい) で100点の人だけ集計して100点の高橋が何人いて、 100点の山田が何人いるみたいなことをしたかったので、 100点で検索して左のセルをみて、 文字列を取得して、その取得した文字列と 関連するの配列名にカウントしたかった のですが、どうもdictionaryでできそうです。 みなさんありがとうございました。
478 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:27:50 ] 「数式に該当するセル」が意味不明 実例を示せ
479 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:15 ] >>477 その程度ならVBAなんぞ使わんでも一発で集計できるがね
480 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:43:26 ] >>478 失礼しました やりたいことは条件付き書式設定のようなことで、 例えば 30 20 50 60 40 80 というセルを選択した後、ユーザーフォームから数式を入力してボタンを押すと 数式に該当するセルに対して、処理を行うということです。 条件付き書式設定を使えというのは無しでお願いします。。。
481 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 17:31:32 ] 列なの行なの? なんなのその数字。
482 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 18:13:09 ] Chr(13)とvbCrlfの使い分けの判断は何?
483 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:49:23 ] vbCrLf = Chr(13) & Chr(10) Chr(13) = vbCr Chr(10) = vbLf
484 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:11:04 ] >>482 改行コードは状況によって変わることがあるから Chr(13)とかChr(10)とかに固定すると具合が悪いこともある
485 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:20:26 ] ぜんぜん「数式に該当するセル」の説明になってない…
486 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:26:08 ] 俺がエスパーすると 数式の解に該当する数字の入ったセル
487 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:58:14 ] 数式: >=50 数式に該当するセル: 50 60 80 ってことじゃね
488 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:10:30 ] 俺がエスパーすると、 フォームから「A2=A1+10」と入力する。A1に5が入っていたとしたらA2に15を入れる。 どうだ?
489 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:27:04 ] 463が説明しようとする度にエスパーが大量に必要になりそうな悪寒 何をどうしたいのか細切れに話そうとしてるからますます判らん w
490 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:28:17 ] ____ /_ノ ヽ、_\ o゚((●)) ((●))゚o ,. -- 、 /::::::⌒(__人__)⌒:::::: / __,>─ 、 | |r┬-| / ヽ | | | | { |__ | | | | } \ ,丿 ヽ | | | | / 、 `┬----‐1 } | | | | / `¬| l ノヽ wwwwwwwwwwwwwwwww \ `ー'ォ / 、 !_/l l / } { \ l / ,' \ ´`ヽ.__,ノ / ノ \ ヽ、\ __,ノ /  ̄ ヽ、_ 〉 ,!、__/
491 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:49 ] >>480 数式からEvaluateで戻り値を求めて、その戻り値でフィルターにかけりゃいいじゃん。 それともフィルタオプションで検索条件範囲の1行目を空白にして、2行目に=A2=数式と書きだして抽出するとかね。
492 名前:491 mailto:sage [2009/06/13(土) 16:24:49 ] 俺のエスパー度はマグニチュード7くらいの自信があるから上で間違いないな。
493 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:52:40 ] 463まとめ >>463 >>468 >>477 >>480
494 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:30:24 ] >>493 仲間はずれがいるぜ。 >>480 は>>476 だな。
495 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:23:18 ] / ノノ ノノノ ヾヽ、ヽ / ノj ` ´ i | i { ` , ,-,、´ i | { i )-―-'( i | ヽ i ⌒ } |_,,,. -‐- 、 __)), ,ノ人 、_, ノ''"´ , \ / ` ー--,. '´ . : :`( ゝ、 / : : :: :´: . : :\ , ' ´_ ヽ / r´: : : : : : ,. ' ´ ヽ>'´ ,'ヽ! / γ: : ノ _ ,, 、,, ,,__i 。 ./ ; ,! i ir' " ヽ ,,, ''' ´ `"7 :/ i |、 ° }, ' ` y' / "'''‐‐- ...,,,_| ヽ、ー/ __ _/ / `'''-,,,て ´  ̄ ̄ / ,イ `''-、__/ / ` / ,! _, `''-,,_ ,..、_,,..イ´ i'´ `ゝ''"´ \_ ,,,,,...ゞ、_ |ー-/ ミ〉 !r'´ ヽ ミ/、 /| i i }