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


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

Excel VBA 質問スレ Part15



1 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:07:19 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/ ←New!

関連スレ
Excel総合相談所 91
pc11.2ch.net/test/read.cgi/bsoft/1270542226/
Word総合相談所
pc11.2ch.net/test/read.cgi/bsoft/1263719084/
【質問不可】Excel総合相談所スレの雑談・議論スレ2
pc11.2ch.net/test/read.cgi/bsoft/1151651536/

669 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 10:12:08 ]
あ、コメントアウトされてたのね。

老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。
end subのすぐ前でOK。

670 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:23:54 ]
>>老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。
なんで? 不要だろ

671 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:25:52 ]
ここから先しばらく不毛な論争が続きますので質問者の方は無視してくださいな



672 名前:664 [2010/06/27(日) 15:51:40 ]
Set re = Nothingを入れる事でメモリ解放するって事ですかね?

個人的にはそんな事より"A1:A5"の範囲ならまだしも
セル範囲が増えた場合オーバーフローしないか心配です
何か良い方法ないですかねぇ
配列を使わずにセル範囲を一つ一つループで置換orスルーできるような処理があれば1番なんですが

673 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:55:12 ]
>>669
完全に不要。
あと、解放、な。

674 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:56:56 ]
>>672
何がどうオーバーフローするんだ?

675 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:06:12 ]
Nothing入れないと自動変数の領域がキャッシュされてるため
いつまでもオブジェクトが削除されないとかVB.netで聞いた事ある

676 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:12:26 ]
.NETからExcelを操作した時のアウトプロセス解放関連の話と
勘違いしている予感。

677 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:23:59 ]
COMのGCって参照カウンタでしょ。
それに反しなければわざわざリリースなんて要らん。



678 名前:672 [2010/06/27(日) 16:26:01 ]
>>674
ちょっとまだ試行中なのですが、例えば配列数を膨大な数にした場合や
各配列内のデータ(取得したセルの値)、文字数が多い場合等です

Variant型を超える事はないと思ってはいますが、
少し今のやり方だと心配なんですよね

679 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:41:37 ]
>>675
キャッシュ(笑)
VB.net(笑)
適当なこと言ってんなハゲ

680 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 17:51:36 ]
「行儀が悪い」

これならどうだ

681 名前:デフォルトの名無しさん [2010/06/27(日) 18:46:33 ]
煽りとかでは無くて純粋に教えてほしいんだけど、
setした物はnothingにして終わらせる、って教わったんだ。

当時聞いた話では、メモリを占有し続けるからって感じで納得してたんだけど、
これは嘘なのかな?

マナーとしてnothingを代入してやるのか、それとも技術的な理由があるのか、それが知りたい。
nothing入れてやる必要が無いなら、余計なコード書きたくないし、教えてください。

682 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:41:25 ]
>メモリを占有し続けるから

これは嘘ではない

683 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:49:31 ]
nothingを代入しなくて、その変数が生きていれば、メモリが開放されることはない
nothingを代入しても、そのメモリがいつ開放されるかは定かではない
nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される

原則はこういうこと
昔は使い終わったらすぐにnothing代入して、開放可能にしましょうってのが主流だった
今は特殊なオブジェクトでもない限り、あんまり気にしなくていいと思うぞ

684 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:57:09 ]
テンプレに書いてくれ
無駄なもの
最後にnothing
最後にerase
とか
他にもあるんだろうけど


685 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:09:26 ]
>>682-683
ありがとう。
俺、後輩にいつもnothingで終わらせろって言ってた・・・。
先輩の指導を鵜呑みにして、自分で調べなかったのが凄く恥ずかしい。
nothing忘れると、先輩が口を酸っぱくして指摘してたんで、そうと信じてた。

>nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される
VBAの場合はend subを通った時点でdimが無効になるから、基本的にはset nothingいらないのかぁ・・・。

本当にありがとう。


686 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:53:29 ]
SQLServerのJOBにActiveXスクリプト書くときは
Nothingしないと警告でるよ

687 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:21:13 ]
そういや、fjのmalloc/free論争はどう決着したんだっけなあ



688 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:38:02 ]
>>685
俺は無駄なNothing代入はいらない派だが、またそうやって人の言うこと鵜呑みにするなよ?
VBAは参照カウント方式だから、参照がなくなった時点で自動的に解放されるが、
循環参照(オブジェクトAとBがお互いの参照を保持しちゃってるような場合)があるときは
明示的に解放してやらないとメモリリークする
とりあえずNothingで終わらせておけば問題は発生しないし思考停止できる、というのも一つの考え方ではある

689 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 23:43:38 ]
俺も無駄なNothing代入はいらない派だが
>>688
メモリリークといっても、エクセルの使用メモリが増えていくだけで
エクセルを終了させれば開放される

>Nothingで終わらせておけば問題は発生しないし思考停止できる
ちなみに変数をNothingにしてもメモリリークは防げないこともある

Sub test()
    Set x = CreateObject("Scripting.Dictionary")
    Set y = CreateObject("Scripting.Dictionary")
    Call x.Add("y", y)
    Call y.Add("x", x)
    Set x = Nothing
    Set y = Nothing
End Sub

このプロシジャ呼ぶとちょっとずつメモリ使用量が増加していくぞ

690 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 00:31:57 ]
だからさあ、いらないって言うやつは自分が作るときに使わなきゃいい
いるってやつは自分が作るときに使えばいい
わざわざ他人のコーディングを否定すんなよクズども
いい加減この無限ループやめろっての



ここまでテンプレ

691 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 01:10:01 ]
質問スレだから
質問されたら答えるだけ
間違いを教えていいわけない
結論はどっちでもいいと答えるのかもしれないけど

692 名前:デフォルトの名無しさん [2010/06/28(月) 09:06:38 ]
全角英数字を半角英数字にする関数ってありますか?
Case文で全文字毎に置換するしかないですかね?

693 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:12 ]
>>692
つ素寅昆布

694 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:31 ]
はいいえ

695 名前:デフォルトの名無しさん [2010/06/28(月) 11:02:28 ]
>>693
まんこの中見る器具!

696 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 11:40:42 ]
>>692
記号もカナも、半角に変換できる文字は全部変換してもいいんならStrconv
英数以外は変換したくないんなら1文字ずつやるしかない

697 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 15:54:16 ]
相互参照になった場合は?



698 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 17:29:18 ]
>>696
つ性器豹源







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

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

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