トップページtech
1001コメント393KB

Excel VBA 質問スレ Part36 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/01/09(金) 16:59:02.80ID:GzFHQ3J4
ExcelのVBAに関する質問スレです

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

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

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

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

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

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

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

前スレ:Excel VBA 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/

関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0083デフォルトの名無しさん2015/01/20(火) 07:00:04.66ID:iuLmkOeX
>>82
当面的に無理やり通すならresumeかgoto駆使する
あとは、workbook.loadイベントでワザとエラー発生させとくとか
0084デフォルトの名無しさん2015/01/20(火) 07:06:38.60ID:iuLmkOeX
つか、Openイベントの処理だっけか
まだオブジェクトが認識されてないんでね?
0085デフォルトの名無しさん2015/01/20(火) 08:41:20.38ID:dg0GDE71
VBAのバージョン管理の良いやり方を教えてください
書けるようになってきた反面、破綻寸前です
0086デフォルトの名無しさん2015/01/20(火) 09:05:42.56ID:tR2SZl1M
最初の1回だけエラーになるのは、
初期値が入っていないのかも?

b
a=b
宣言だけして、初期化しなかった変数を使ってエラー

b=0 などと宣言と同時に、初期値が入っていれば、
エラーは起きない
0087デフォルトの名無しさん2015/01/20(火) 09:23:54.97ID:GsFnMcAh
VBAのマクロに設定したパスワードって、ツール使えばだいたい解除できるじゃない。
だったら見られても分りにくくする難読化のツールありますか?
ググッてもVBA用のは無いようなのですが。
0088デフォルトの名無しさん2015/01/20(火) 09:36:37.55ID:iwY+YMua
無いよ、諦めて
0089デフォルトの名無しさん2015/01/20(火) 11:00:46.84ID:GsFnMcAh
Application.Interactive = False をやるとEXCEL2013の操作が
一切出来なくなりますが、EXCELのウインドウの移動なども出来なくなり
不便なので、Ribbonの操作とか、セルの操作とか、そういうのだけ
禁止する方法ありますか?
0090デフォルトの名無しさん2015/01/20(火) 11:16:17.35ID:h3ZK+Qpq
フォームに変数使うことってできますか?
例えばフォームで「会員No.XXXXを登録しますか?」と表示させて
その下のボタン、「登録」「保留」「キャンセル」を押して決めるとか

XXXXは指定のセルから数値を読み取るとか
0091デフォルトの名無しさん2015/01/20(火) 11:34:42.01ID:jGkVNXKd
>>85
俺と同じだw
今現在は一箇所のフォルダにファイル名_バージョン.xlsm xxxx_000080.xlsm etc
にしてるけど、
使いやすいバージョン管理システムを見てまわってるところw
0092デフォルトの名無しさん2015/01/20(火) 12:56:00.67ID:9WW5KIHI
パスワードクラックするようなやつに難読化とか意味ない
0093デフォルトの名無しさん2015/01/20(火) 14:49:13.72ID:hS3N5Hvv
>>90
ラベル使ってcaption変えればいいのては?
0094902015/01/20(火) 17:42:27.69ID:h3ZK+Qpq
プロパティのcaptionのとこですか?
それだとナンバーを毎回手動で変えることになるんですか?
0095デフォルトの名無しさん2015/01/20(火) 18:11:15.93ID:jGkVNXKd
label1.caption = "label1.Caption = "会員No" & Cells(x,y) & "を登録しますか?"
ってことなんじゃ
0096デフォルトの名無しさん2015/01/20(火) 19:30:26.59ID:6mGj69QS
>>86
レスありがとう。

原因不明のままだが,下記のデバッグ用の一行を挿入したら,
エラーそのものが発生しなくなった。

With Sheets(1).ChartObjects(Obj)
.Left =
.Top =
.Width =
.Height =
With .Chart.PlotArea
.Format.Line.Weight = 0.5
A = .Left <---この一行を入れるとエラーが出なくなった。.WidthでもOK。
.Left = L
.Width =

結局,EXCEL内部データが初期化不十分で,プロパティ読みだし操作で
初期化されるものと思われる。
0097デフォルトの名無しさん2015/01/20(火) 20:52:58.14ID:6mGj69QS
>>96
自己レス

グラフのサイズ指定処理だが,一番最初に以下の処理で
画面ズームサイズを保存して一定値にしてからでないと,
グラフサイズが正確に指定できない。これもEXCELの不具合。

Z = ActiveWindow.Zoom
ActiveWindow.Zoom = 一定値

グラフサイズ指定処理

ActiveWindow.Zoom = Z
0098デフォルトの名無しさん2015/01/20(火) 21:07:42.46ID:iwY+YMua
EXCELの不具合を共有したいにしても手順ってものがあるでしょうに。
現状では誰も信じないと思うよ。
0099デフォルトの名無しさん2015/01/20(火) 21:18:01.98ID:6mGj69QS
>>98
現象を報告しているのみ。ネットでも類似報告はある。
ただ,そういう経験がなけば無視すればよい。
0100デフォルトの名無しさん2015/01/20(火) 22:16:47.34ID:Q1gKznlw
まあ本当にExcelの不具合だと思うなら、ぜひマイクロソフトに報告してあげて下さい
ここで不十分な報告しても何の役にも立たん
0101デフォルトの名無しさん2015/01/21(水) 01:26:50.20ID:a4gaLSo8
>>97
だからどのイベントか書けよ
0102デフォルトの名無しさん2015/01/21(水) 02:50:37.26ID:Xic+hwyG
連続するメタ文字"()+"を正規表現でマッチさせたいとき
"\(\(\+"とやってますけど、範囲を指定してエスケープするにはどうすれば良いですか?
0103デフォルトの名無しさん2015/01/21(水) 02:51:32.80ID:Xic+hwyG
間違えました。
連続するメタ文字"+()+"を正規表現でマッチさせたいとき
"\+\(\)\+"とやってますけど、範囲を指定してエスケープするにはどうすれば良いですか?
0104デフォルトの名無しさん2015/01/21(水) 04:25:21.94ID:PQV/sDzo
[a-z]よろしく文字コードでやれるんじゃねえの 鼻ホジ

Regular Expression(正規表現) Part132ch.net
http://peace.2ch.net/test/read.cgi/tech/1415149975/
0105デフォルトの名無しさん2015/01/21(水) 06:12:54.10ID:z33vr0gG
>>101
フォームは使っていないからイベントは無関係。
0106デフォルトの名無しさん2015/01/21(水) 08:42:51.44ID:a+GjDkiJ
>>91
やはりそうなるよね
数パターン個別にカスタマイズして、
あとで統合しようとすると意味不明になる

VBAしか触らないから、
よくわからん本気のツール導入も敷居が高いし

VBAだけでバージョン管理できたら良いのにと思う
0107デフォルトの名無しさん2015/01/21(水) 09:08:28.10ID:G0jKgpER
前スレだかにバージョン管理してるって人居たよね
ソースエクスポートしてテキストで管理って言ってたけど面倒くさそう
0108デフォルトの名無しさん2015/01/21(水) 09:42:25.78ID:NByG1E6b
Sheet1をエクスポートして保存されたクラスモジュールをインポートすると、
Sheet1のオブジェクトモジュールではなく、クラスモジュールとして
インポートされるんですが、これをSheet1のオブジェクトモジュールと
してインポートする方法はありますか?
要するにエクスポートしてインポートしたら、完全に元通りにしたいのです。
0109デフォルトの名無しさん2015/01/21(水) 10:20:51.10ID:nNlZ8uj4
  ●●●ケネディ大統領は何故、死なねばならなかったのか?●●●
  http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53

↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
  この掲示板に優秀な書き込みをして、総額148万円の賞金をゲットしよう!(*^^)v
0110デフォルトの名無しさん2015/01/21(水) 12:49:32.86ID:CTKuHmCR
>>99
> ネットでも類似報告はある。

url 書かない奴は、脳内と見なされてもしょうがない
0111デフォルトの名無しさん2015/01/21(水) 13:03:28.22ID:vxIgxT3t
>>108
たしか
エクスポート/インポート を自前で作らないと駄目じゃなかったかな

それか
インポート時に
1) 一旦クラスモジュールとして インポートして
2) Sheet1のモジュールへ コピペ
3) 1)のクラスモジュール削除

とかね
0112デフォルトの名無しさん2015/01/21(水) 14:10:56.42ID:NByG1E6b
>>111
レスありがとうございます。
教えていただいた二通りの方法は、VBAでプログラムを組めば自動的に
実行できますか?
それとも手作業でやるしかないでしょうか?
0113デフォルトの名無しさん2015/01/21(水) 14:37:19.71ID:eny8H5q0
ソース一式を出力するなら

http://d.hatena.ne.jp/jamzz/20131002/1380696685
EXCELファイル内のVBAプロジェクトのソース一式をエクスポートする

を見れば
0114デフォルトの名無しさん2015/01/21(水) 15:03:39.62ID:vxIgxT3t
>>112
多分VBAで可能なはず
職場は EXCEL2010だけど自宅は未だに EXCEL97なんで
現状 超古いEXCELでしか試せないのよ

これがまともに動けばこれの応用でできるとおもうけど

With ThisWorkbook.VBProject.VBComponents("sheet1").CodeModule
.InsertLines .CountOfLines, "'コメント"
Debug.Print .Lines(1, .CountOfLines)
End With

上を実行すると
sheet1のモジュールの最後に
'コメント
が追加されかつイミディエイト へソースが表示されるハズです
0115デフォルトの名無しさん2015/01/21(水) 19:45:06.53ID:SYTiPYt8
つーか、シートのコピーじゃいかんの?
0116デフォルトの名無しさん2015/01/21(水) 22:05:43.84ID:ilOt01Hf
Excel2013でユーザーフォーム内のテキストボックスにログを出力するようにしたいんだけど、
テキストボックスが一番最後の行にスクロールしてくれない。

Textbox1.SetFocus
Textbox1.CurLine = Textbox1.LineCount-1
ではダメなんですかね?
0117デフォルトの名無しさん2015/01/21(水) 22:06:32.26ID:NByG1E6b
>>113 >>114
情報有難うございます。
ちょっと試してみます。
0118デフォルトの名無しさん2015/01/22(木) 09:30:51.95ID:4WNaJbbR
Set A = Worksheets("Sheet1").Cells.Find(B)
If A Is Nothing Then Exit Sub
Else A.Select
Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = Date

この処理で、検索して見つかったらそのセルを選択して、
その後アクティブセルからいくつか移動したセルに日付を入れてるんだけど
選択→その位置から移動 の2回の処理をオブジェクト変数Aを使って1回で処理したいんだけど
どうしたらいい?
0119デフォルトの名無しさん2015/01/22(木) 09:36:06.38ID:vsxHNAsj
Cells(A.Row, A.Column + 1).Value = Date
とか
A.offset(略 = 略
とか
0120デフォルトの名無しさん2015/01/22(木) 09:38:23.54ID:vsxHNAsj
あとexit subするならelseでなくend ifでいいよ
いやend ifも要らないか
0121デフォルトの名無しさん2015/01/22(木) 11:44:29.12ID:4WNaJbbR
なるほど(・ω・)
0122デフォルトの名無しさん2015/01/22(木) 14:09:02.53ID:4WNaJbbR
ある列に↓のようにリストがあって

生産課 山田太郎 様
技術開発課 田中次郎 様
総務課 鈴木 様
...

フォームのテキストボックスに苗字を入力して、ボタンを押したら
別のテキストボックスに一致するセルの中身を出すようにしたいんだけど
同じ苗字が二人以上いる時に、まとめて抽出するにはどうしたらいい?
findで範囲内で一致するもの全てを同時に返すとかできますか?
0123デフォルトの名無しさん2015/01/22(木) 18:52:36.11ID:dmH5GNro
正規表現
0124デフォルトの名無しさん2015/01/22(木) 20:19:58.26ID:vNSjR/4e
>>122
findはダメだろ
普通にfor nextとかで繰返し一致する名前を全て書き出せばいい
0125デフォルトの名無しさん2015/01/22(木) 22:23:31.11ID:+1w7MZS/
オートフィルタ
0126デフォルトの名無しさん2015/01/22(木) 23:04:07.41ID:DV1cEPLZ
>>123
なにそれ?
ろくでなし子さん?
0127デフォルトの名無しさん2015/01/22(木) 23:22:43.93ID:dmH5GNro
画像検索しちまったじゃねーか
0128デフォルトの名無しさん2015/01/23(金) 06:06:36.11ID:lAQTOxJ2
>>105
そもそも知識無いの丸わかり(笑)
0129デフォルトの名無しさん2015/01/23(金) 08:10:55.33ID:db6c84vZ
>>97
句読点にカンマ使うような低脳には誰も答えないよ
0130デフォルトの名無しさん2015/01/23(金) 21:06:11.71ID:2WOFIePM
プロシージャを呼ぶとき
Callをつけるのとつけないのではどちらが好ましいの?
0131デフォルトの名無しさん2015/01/23(金) 21:42:06.36ID:QWMFiZg9
Call を付けてないと変数と見間違う

これを懸念するなら Call 付けた方が好ましい
0132デフォルトの名無しさん2015/01/23(金) 23:11:44.56ID:2WOFIePM
>>131
そりゃ間違えそうになるけど変数ならどっかに=があるから区別つくでしょ。
0133デフォルトの名無しさん2015/01/23(金) 23:54:43.14ID:9aT4HWHH
>そりゃ間違えそうになるけど

間違える事がなくなるわけでしょ w
0134デフォルトの名無しさん2015/01/24(土) 00:33:33.63ID:qV60IszQ
キッチリ作る時は戻り値付けるから、callとかまず無い
0135デフォルトの名無しさん2015/01/24(土) 03:13:55.66ID:4KWVQwlI
きっちり作る時って、全部Functionで作るのが流行ってるの?
0136デフォルトの名無しさん2015/01/24(土) 04:10:03.61ID:3QTKI0dL
関数定義をすべてFunctionにしたとしても
明示的に戻り値無視したいときにCallで呼んだりせんのかね
0137デフォルトの名無しさん2015/01/24(土) 06:25:07.60ID:bCSfcL8K
callとcall無しの大きな違いは()が無いこと。ぐらいに思ってる。
んで、()は付けたい派だからcall無しはナイなあ

call無し呼び出しの利点って何?
0138デフォルトの名無しさん2015/01/24(土) 06:27:04.33ID:bCSfcL8K
戻り値はUNIXライクに「return」とか「result」とかをpublicで作っちゃう場合もあるかな
あんま深く考えてないや
0139デフォルトの名無しさん2015/01/24(土) 08:02:47.97ID:qV60IszQ
>>135
>>130がどんなシチュエーションか分からんから商用向けで書いたんだが、
要求仕様にアプリが落ちない事ってのが多いから、余程でない限り各functionにエラー処理と戻り値チェックは必須化してるよ
簡易ツールは超適当だが
0140デフォルトの名無しさん2015/01/24(土) 08:27:29.74ID:vmC8k43Y
エラーを無視するの?
0141デフォルトの名無しさん2015/01/24(土) 09:35:40.00ID:4KWVQwlI
>>139
なるほどねぇ。昔は俺もそんな作りにしていたことがあったなぁ。

今は役割によって細分化してるから、そもそも落ちないメソッドが結構あるし、
落ちたときに必要な後処理によってOn Error Gotoをメソッドに書くか決めてる。

どのモジュールのどのメソッドで落ちたかはエラー情報モジュールを作っておいて、
全てのメソッドを実行する際に設定したり、実行時にログを出力したりしてる。

どっちがいいとかじゃないけど、全てのメソッドにOn Error Gotoとか付けるとテストケース作ったり、
テストするときに大変じゃない?
0142デフォルトの名無しさん2015/01/24(土) 10:09:25.62ID:qV60IszQ
>>141
処理によってエラー処理の有無を分けると必ず漏れるから規約で決める方が全体的に楽かな
エラーモジュールは後々便利だから俺もやるね

テストケースは整合性のある試験データを用意してもらって、かつ設計書で起こしてるから不要な試験はやらない感じ
あと、強制終了しない作りにしとけば納品後も言い訳立つから
0143デフォルトの名無しさん2015/01/24(土) 10:55:09.87ID:nnj+BbUn
エクセルVBAを外部に依頼するのって一般的じゃないけど
小規模法人や個人事業者とかだと便利そうだな
0144デフォルトの名無しさん2015/01/24(土) 11:30:02.39ID:6PENQCIF
一度作って終わりじゃないことは頭に入れておくこと

決算処理で発覚した障害や法改正時の対応とかで
「急いでくれ、○○までに!」
というのがあると足元見られるかもよ
0145デフォルトの名無しさん2015/01/24(土) 11:51:30.03ID:XTk+0QY6
普通職場にVBAできる人は一人はいるもの?
おれんところ正規社員50人以上いるけど一人もいないんだけど。

俺多少できるけどバイトだし
0146デフォルトの名無しさん2015/01/24(土) 11:55:13.16ID:ZhE/54TS
>>145
アホばっかりの会社だな(ワラ
0147デフォルトの名無しさん2015/01/24(土) 11:58:24.09ID:XTk+0QY6
>>146
おれが何か作ってやるとワークシート関数とか数式とか使ってやってると思われるわ
説明面倒だから流してるけど
0148デフォルトの名無しさん2015/01/24(土) 12:29:15.21ID:6PENQCIF
>>145
いない
下手をするとPC使える人すら一人もいない

それに一人しかいないと辞められると困る状況に陥るから任せたくないな〜w
0149デフォルトの名無しさん2015/01/24(土) 12:48:55.10ID:miZ0p/s9
いない
どうしても必要なら外注
内部は安上がりな事務処理要員
0150デフォルトの名無しさん2015/01/24(土) 13:23:49.43ID:nnj+BbUn
>>145
事務系だと経理にはいるかも知れないが
「VBA出来る」ってレベルだと1〜2パーセントじゃない?

オレは職場ではエクセルは殆ど出来ないことになってるw
0151デフォルトの名無しさん2015/01/24(土) 14:24:00.95ID:aPP2OAcd
範囲を定数で持ちたい時ってどうすればいい?
具体的にはデザインが変わることを想定して
初期化位置や入力の位置を定数で持ちたいのだけど
代替案とかでもいいです
0152デフォルトの名無しさん2015/01/24(土) 15:18:57.52ID:W3y8Uzfq
>>151
デザインが変わるってのは、処理対象のシートのフォーマットが変わるって意味だとして…

自分は、その可能性がある場合、VBAの修正はいらないように、別シートに設定用シート作ってる。
「フォーマット変えたら、このシートのこの数字(開始列No.とか)修正してね〜」
で済むから。

コードではその設定シートに入ってるセルアドレスや、列No.、行No.を参照するようにしてる。
0153デフォルトの名無しさん2015/01/24(土) 15:45:42.96ID:qV60IszQ
>>151
range("名前")じゃダメ?
0154デフォルトの名無しさん2015/01/24(土) 15:58:33.26ID:O9IWPZcG
Excel2003ですが
標準モジュールフォルダに一連の操作を行うモジュールが30個たまっているのですが
操作を倍増させるために丸々複製して5倍に増幅させようと考えていますが
1つ1つ複製するしか方法は無いのでしょうか?

30モジュールをフォルダにまとめてフォルダごと複製のような事はできないのでしょうか?
01551542015/01/24(土) 16:02:12.70ID:O9IWPZcG
>>154
>操作を倍増させる → 一連の流れは同じでも異なるバリエイションの操作を5通り作ろうとしています。 コードが複雑化しているため変数をしこむより複製する方が速い感じです
0156デフォルトの名無しさん2015/01/24(土) 16:16:04.54ID:0YrHFNJH
>>132
間違えそうというか、パっと見で分かりにくいからって
関数名は全角日本語にしちゃってるのって自分だけ?
さらに変数も基本日本語にしてる
例えば、gyou とか row より 行 の方が分かりやすいんで・・・

ネットのサンプルプログラムでも
日本語使ってるのは見たことないですが、
日本語だと何かデメリットあるんでしょうか
何かあるなら変えようと思う
0157デフォルトの名無しさん2015/01/24(土) 16:33:46.61ID:qV60IszQ
>>155
バリエーションを増やした時に内容が変わる変数をpublic化して、
バリエーション毎の呼び出し時に変数の値を再設定すれば
処理自体はほぼそのままに出来るかと
0158デフォルトの名無しさん2015/01/24(土) 16:38:06.33ID:qV60IszQ
>>156
日本語環境下(ms office 日本語版)のVBA以外の何かに移植する時に非常に困る
俺は最近変数は日本語使う様になったな
簡易ツール限定で
0159デフォルトの名無しさん2015/01/24(土) 16:48:23.60ID:NK64dzTd
>>158
それは思ったが確か文字列リテラルも同様に制約受けるよな
だから好みの問題でいいんじゃね?

>>154
テストケース書くとパターン展開して150パターン(出来ねえよ!)なんて事は良くあるけど、まさかその150パターンをフラットに実装しようとしてるなら保守で死ぬぞw
0160デフォルトの名無しさん2015/01/24(土) 16:54:42.28ID:LdIBiv/J
>>158
> 日本語環境下(ms office 日本語版)のVBA以外の何かに移植する時に非常に困る

そんな機会あるの?
0161デフォルトの名無しさん2015/01/24(土) 16:56:53.66ID:aPP2OAcd
>>152-153
ありがとうございます
名前の定義はあまり使いたくなかったので
設定シート案採用させていただきます
お二人とも親切にありがとう
0162デフォルトの名無しさん2015/01/24(土) 17:12:53.59ID:qV60IszQ
>>159>>160
>>156の環境と未来は本人しかわからないから本人に判断してもらう
俺は今後も日本語変数使うと思う
めっちゃ楽や〜
01631542015/01/24(土) 18:08:32.20ID:JtJ7UWun
>>157
そのようにも考えましたがプロシージャの数が多すぎて入り組んでいるため挫折しました。。
0164デフォルトの名無しさん2015/01/24(土) 18:17:27.25ID:qV60IszQ
>>163
バリエーション作るって事は変数値を変える場所は調べるんでしょ
作業量は対して変わらんと思うけど
0165デフォルトの名無しさん2015/01/24(土) 18:38:05.32ID:ZpIGFQ1h
変数は滅多に使わないけど
関数名だけは所々日本語使ってしまうなぁ
帳票作成処理()とか
英語力がそんなないから…orz
0166デフォルトの名無しさん2015/01/24(土) 18:42:01.30ID:W3y8Uzfq
>>161
お役に立ててよかったです。

自分の場合は、わけわからん人が勝手に設定シートをいじくらないように、下記のようにしてます。
・設定シートは非表示(VBAからしか表示できない方で)
・管理者用ボタン配置
・ボタン押下でパスワード入力させる
→設定シート表示
・ブック閉じる時には設定シートを非表示
これで、VBAわからないけど管理はできる人に設定シート管理は任せる。

あと、行列番号、セルアドレスだけでなく、他に期や年で変更が発生しうる要素は設定シート管理にしとく。
0167デフォルトの名無しさん2015/01/24(土) 23:02:50.95ID:4KWVQwlI
>>154
ご愁傷さま。普通クラスモジュールが多いのは分かるけど、標準モジュールで30もあるなんて
元々の作りが悪い可能性が相当高いよ。そうじゃなかったらごめん。
多分、リファクタリングするとコード量が1/3以下になる気がする。あくまでカンだけどね。
今後のことを考えると、ごっそり時間を貰ってある程度クラスやインターフェースの知識をもってる人に
全改修して貰った方がいい。長い目で見たら絶対その方が後々の改修が減るよ。
とにかく短い時間でやっつけで片付けるしかないと言うのであれば、せいぜい共通化出来るところを探して共通化し、
変数で設定したり、分岐したりするしかない。
0168デフォルトの名無しさん2015/01/24(土) 23:08:50.79ID:KEoUQ8Iu
>>167に同意
大規模な改修または今後一切の仕様変更をしないという決断を迫られてるかと
0169デフォルトの名無しさん2015/01/24(土) 23:10:26.86ID:aakO0k5F
じゃあ俺は>>167に反対
0170デフォルトの名無しさん2015/01/24(土) 23:25:53.10ID:LJy0wi3+
>>167
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0171デフォルトの名無しさん2015/01/24(土) 23:26:30.22ID:LJy0wi3+
>>168
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0172デフォルトの名無しさん2015/01/24(土) 23:27:10.57ID:LJy0wi3+
>>169
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0173デフォルトの名無しさん2015/01/24(土) 23:27:59.22ID:LJy0wi3+
>>154
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0174デフォルトの名無しさん2015/01/24(土) 23:30:29.96ID:LJy0wi3+
>>126
★2 ExcelのVBA以外の部分に関する質問はNGです。
0175デフォルトの名無しさん2015/01/24(土) 23:31:08.28ID:4KWVQwlI
はい、ごめんなさい。
向こうのスレに戻ります。
0176デフォルトの名無しさん2015/01/24(土) 23:47:03.79ID:LIgrDPe3
前もこんな流れで荒れたり白けたりしてたよな・・・
テンプレ守れってのは分かるけど、ちょっとな・・・
0177デフォルトの名無しさん2015/01/24(土) 23:51:10.58ID:LJy0wi3+
>>64
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
0178デフォルトの名無しさん2015/01/24(土) 23:52:38.15ID:KEoUQ8Iu
自分も>>4のスレ行きます
0179デフォルトの名無しさん2015/01/24(土) 23:56:43.86ID:4KWVQwlI
>>176
仕方ないよ。忘れてたけどこのスレはテンプレが絶対なんでしょ?
俺はあまり気にしてなかったけど、そう言うことなら仕方ない。
それ用のスレあるし。
0180デフォルトの名無しさん2015/01/25(日) 18:06:28.80ID:tAhczX8T
むこうの1がテンプレが悪いってことにするためにわざと荒らすからねぇ
0181デフォルトの名無しさん2015/01/25(日) 22:30:57.90ID:4QrMsa9l
VBAの構造化プログラミング初心者ですが
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/images/04_Structure02.gif
この図の全体制御に対して呼び出すプロシージャー(主制御)の下に

条件に応じて実行させる処理が300通りほどありプロシージャーを300個つくりどれか一つを呼び出して処理するように書くと
途中で処理能力の限界に達してErrorが発生します。

300の処理を1つのプロシージャーに書きセレクトケースで実行させようと書きましたがやはり容量オーバーで実行できません。

現状妥協策としてしょりを100に絞って1つのプロシージャーにセレクトケースで条件に応じた処理を選択し実行するように書いていますが、
選択肢が沢山有る処理をプロ大量のシージャーにわけて管理することはできないのでしょうか? 単純にこれをやるとループ処理させたときに
数秒たつとすぐに処理の限界というようなErrorが出ます。
01821812015/01/25(日) 22:56:23.58ID:4QrMsa9l
>>181
書き方がわかりにくくて済みません
要は

全体制御
  |
子制御1、子制御2

に対して 孫制御が300個あり
子制御が実行するのは300のうちの1つだけで

複数の子制御で併用して使えるよう300個のプロシージャーにわけて書いて
条件に応じてそのプロシージャーを呼び出すようにしますと構造化プログラミングのルールに違反するようでErrorとなりますという話ですが
こういう場合は一体どう組めばいいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています