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


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

Excel VBA質問スレ Part11



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/

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






[ 続きを読む ] / [ 携帯版 ]

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

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