Excel VBA 質問スレ Part39 [転載禁止]©5ch.io
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2015/11/27(金) 20:36:45.35ID:9HV+ag/s___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0820デフォルトの名無しさん
2016/02/10(水) 13:39:21.10ID:OnEbfKeK短絡評価の話なら
If 条件A Then If 条件B Then 〜
でいいでしょ
0821デフォルトの名無しさん
2016/02/10(水) 16:31:02.12ID:6eyh9AMRぬるぽ
0822デフォルトの名無しさん
2016/02/10(水) 16:38:25.44ID:zs62Z3CJガッ
0823デフォルトの名無しさん
2016/02/10(水) 16:54:10.35ID:YqpZzmVY毎日使っているマクロで最近エラーが出るようになりました。
コードの一部を下に貼ります。
C=Range・・・(中略)の行で「実行時エラー '6' オーバーフローしました」が出てしまいます。
Dim C As Variant
LastRow = SourceWS.Cells(Rows.Count, "B").End(xlUp).Row
FirstRow = SourceWS.Cells(LastRow, "B").End(xlUp).Row
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "J"))
0824823
2016/02/10(水) 16:58:27.84ID:YqpZzmVY変数のSourceWS、LastRow、FirstRowには正しく格納されていることを確認しています。
ちなみにLastRowは200000ぐらいでした(これは日によって変わります。10万以上であることがほとんど)
0825823
2016/02/10(水) 17:08:28.76ID:YqpZzmVYA列のセルは今までは空欄でした。
つい最近からA列には整数を格納するように変更しました
(GetTickCountで取得した整数です)
恐らくこの変更が影響していると思うのですが原因がわかりません。
どなたかヒントをお願いします。
0826デフォルトの名無しさん
2016/02/10(水) 17:56:27.46ID:6eyh9AMRCells(FirstRow, "A") ってなんかおかしくない?
0827デフォルトの名無しさん
2016/02/10(水) 20:20:29.77ID:YqpZzmVYすみません。どこがおかしいかわかりません。
変数Cに格納する行範囲をB列で判断しているのですが・・・
その行範囲のA列からJ列をバリアント配列Cに格納し、
その後他のブックに貼り付けています。
0828デフォルトの名無しさん
2016/02/10(水) 21:06:36.31ID:QrO94O6C普通に指定している行が多すぎるんじゃない?
Function Test(o As Range) As String()
Const BatchWidth = 100 '一度に処理する行数
Dim S() As String
With o
t = .Row
b = .Rows.Count
l = .Column
r = .Columns.Count
End With
ShiftC = r - l + 1
ReDim S(1 To b - t + 1, 1 To ShiftC)
For i = t To b Step BatchWidth
sc = i + BatchWidth - 1
If b < sc Then bw = b Else bw = sc
x = Range(o.Cells(i, 1), o.Cells(bw, ShiftC))
For pr = i To bw
For pc = 1 To ShiftC
S(pr, pc) = x(pr - i + 1, pc)
Next
Next
Next
Test = S
End Function
こんな感じでVariant型配列よりも容量の小さい配列に分割処理して入れ込んでみるとかで解決しないかな。
0829デフォルトの名無しさん
2016/02/10(水) 21:11:14.10ID:5Sg0dwj90830デフォルトの名無しさん
2016/02/10(水) 22:49:55.78ID:CjFlMRzq要素数2百万くらいどうってことない気がするが、何だろうな。
0831デフォルトの名無しさん
2016/02/10(水) 22:56:58.93ID:W4AkdBgm何ですか2百万て?間違ってる上にセンスない回答ですね。
無能は黙っててください。
0832デフォルトの名無しさん
2016/02/10(水) 23:01:11.33ID:UeLxeYgcじゃあまずアンタが黙らないとね
0833デフォルトの名無しさん
2016/02/10(水) 23:01:33.33ID:CjFlMRzqハア?
FirstRowがいつくかわからんが、LastRowが200000ぐらいでA〜J列なんだろ?違うの?
0834デフォルトの名無しさん
2016/02/10(水) 23:02:19.87ID:W4AkdBgm残念ですが僕は無能ではありません。ハズレ!
0835デフォルトの名無しさん
2016/02/10(水) 23:03:08.82ID:W4AkdBgmおいおまえ数字読めないのか!?
0836823
2016/02/10(水) 23:15:33.87ID:YqpZzmVY今回エラーが発生した時の、行数は約20万、列数はA〜Jの10列なので要素数としては約200万でした。
0837デフォルトの名無しさん
2016/02/10(水) 23:16:03.19ID:UeLxeYgcLastRowが200000ぐらい、FirstRowは不明だが最小で1なので
行数は20万前後とする。
A〜Jで10列、
つまり要素数は20万行 * 10列 で200万件
小学生でも出来る計算だぞ
0838デフォルトの名無しさん
2016/02/10(水) 23:19:33.56ID:CjFlMRzq何を言いたいのかわからんが、自分の環境(イミディエイト)でこう出るんだが?
FirstRow=1 : LastRow = 200000
?Range(Cells(FirstRow, "A"), Cells(LastRow, "J")).Count
2000000
要素数2百万の配列になるんじゃないのか?
0839デフォルトの名無しさん
2016/02/10(水) 23:23:31.90ID:CjFlMRzqはこういう勘違いをしてるのかな?
FirstRow=1 : LastRow = 200000
C = Range(Cells(FirstRow, "A"), Cells(LastRow, "J"))
?typename(C)
Variant()
と
set C = Range(Cells(FirstRow, "A"), Cells(LastRow, "J"))
?typename(C)
Range
の違い。
0840デフォルトの名無しさん
2016/02/10(水) 23:24:31.96ID:W4AkdBgmおいお前要素数200万であってるじゃねーか?
まぎらわしい事言うなよ!
でも200万とオバーフローは金輪際関係ないから!
お前がセンスないのは俺のほうが正しい!
0841デフォルトの名無しさん
2016/02/10(水) 23:25:53.23ID:jMBe0mp+常駐ソフトを全部停止させて動かしてみた?
0842デフォルトの名無しさん
2016/02/10(水) 23:26:10.04ID:QrO94O6C0843デフォルトの名無しさん
2016/02/10(水) 23:26:10.66ID:CjFlMRzq俺は最初から >>830 で
「要素数2百万くらいどうってことない気がする」
と言っているのだがな。
0844デフォルトの名無しさん
2016/02/10(水) 23:27:52.95ID:W4AkdBgmお前は正しいw
0845デフォルトの名無しさん
2016/02/10(水) 23:30:18.01ID:TYDlKOEk0846823
2016/02/10(水) 23:33:40.88ID:YqpZzmVY>>845
最初に書いてなくてすみません。
エクセル2010でxlsmです。
0847823
2016/02/10(水) 23:36:48.09ID:YqpZzmVY常駐ソフト停止することを試していませんが、
それならば、メモリが不足しています、のエラーになるかと。
オーバーフローというのが解決のヒントかと個人的には思います。
0848デフォルトの名無しさん
2016/02/10(水) 23:36:48.13ID:W4AkdBgm謝るな!荒したのは俺だw
まあ俺は答えは分からんがガンバってくれたまえwww
0849デフォルトの名無しさん
2016/02/10(水) 23:38:29.98ID:YqpZzmVYなんかワロたw
0850デフォルトの名無しさん
2016/02/10(水) 23:43:11.68ID:CjFlMRzq一応聞くけどGetTickCountの値はどの程度?
それとDeclare文の宣言はどうなってますかね?
0851デフォルトの名無しさん
2016/02/10(水) 23:49:20.06ID:jMBe0mp+確かにメモリーが不足していますのエラーってあるよね
でもなんとなく
その行がエラーを出すんじゃなくてそれより前のコードで大量にメモリーを使用したままなんじゃないのかなぁ
だって結局こういうことでしょ
Sub sample()
Dim C As Variant
C = Range("A1:J200000")
End Sub
0852デフォルトの名無しさん
2016/02/10(水) 23:49:30.85ID:YqpZzmVYGetTickCountの値:
→190423431〜217241781
Declare文の宣言はどうなってますかね:
→Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
0853デフォルトの名無しさん
2016/02/11(木) 00:10:42.37ID:cll589HHLastRowやFirstRowの型、
それとGetTickCountを何かの変数に格納しているならその変数の型、
いずれも十分なサイズなんですよね?
うーむ
0854823
2016/02/11(木) 00:32:34.09ID:GSEE6twL申し訳ありませんが私の知識不足により貴方のレスの意図が理解できていません。
コメント返すまで時間をください・・・
>>853
LastRowやFirstRowの型:
→Dim FirstRow As Long
→Dim LastRow As Long
GetTickCountを何かの変数に格納しているならその変数の型:
→Public Out(1 To 1, 1 To 7) '←標準モジュールにPublicで宣言(variantは明示してませんが)
→Out(1, 1) = GetTickCount 'GetTickCountはVariant変数に直接格納しています
この変数Outを後ほどセルに書き出しています。
0855デフォルトの名無しさん
2016/02/11(木) 00:47:48.35ID:mEBsgK8aたとえばさ、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "A"))
でもエラーになるの?
エラーが出始めた前後で、
貴方に心当たりがあるのはA列の変化だけなんでしょ?
だったらその値だけを取得してもエラーになるかどうか試してみたら?
0856デフォルトの名無しさん
2016/02/11(木) 03:30:20.36ID:GSEE6twL>>823とは異なるデータ(行数は約19万)でまたもオーバーフローしたので>>855を試してみました。
エラーが出た後、デバッグをクリックし、イミディエイトウィンドウに、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "A"))
としたところオーバーフローしました。ただ、
C = Range(SourceWS.Cells(FirstRow, "B"), SourceWS.Cells(LastRow, "B"))
↑ではエラーとなりませんでした。
C = Range(SourceWS.Cells(FirstRow, "B"), SourceWS.Cells(LastRow, "J"))
↑これもエラーとなりませんでした。
また、A列のデータを全てクリヤした後マクロを実行すると、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "J"))
↑最近毎回エラーとなるここでエラーが出ませんでした。
どうやら、A列のデータ次第でエラーが出たり出なかったりしているようです。
でもまだ原因がわかりません。どなたか助けてください。
0857デフォルトの名無しさん
2016/02/11(木) 04:14:34.02ID:b/HRrcI5いろいろテストしたけど
A列の中に かなり大きな値で書式設定(通貨or会計とか)してるセルない?
一度 A列全選択して書式を標準にしたらどうでしょうか?
こちらでテストしたら(Excel2016) データが
=10^15
又は
1000000000000000
で書式が 通貨or会計の時
Dim c As Variant
c = Range("a1")
がオーバーフローになる(書式が標準や数値の時にはならない)
0858デフォルトの名無しさん
2016/02/11(木) 07:23:22.39ID:mEBsgK8aいや、あのさあ、もうちょっと応用を利かそうよ
A列に問題があるって分かったんなら、
次はそのなかでどの行に問題があるかを調べていくんだよ
例えば
Dim i As Long も宣言しといて
For i = FirstRow To LastRow
Debug.Print C = SourceWS.Cells(i, 1)
Next i
なんてやるとかできるじゃん
あるいは1セルずつだと止まらないかもしれないから
その時は
For i = 1 To LastRow - FirstRow + 1
C = SourceWS.Cells(FirstRow, 1).Resize(i)
Next i
でどこまで行数増やしたら止まるのかをしらべるとかさ
そうやって問題点を絞り込んでいけば
仮に原因までは分らなくても回避策は講じられるかもしれないでしょ
0859デフォルトの名無しさん
2016/02/11(木) 09:29:53.37ID:cll589HHあなたの問題を検証しようとしていたら環境がおかしく(?)なってきた。
>>825 で
「A列のセルにGetTickCountで取得した整数を格納した」
と書いてあるので、セル範囲に直接 =GetTickCount() として値を入れてみた。
そうすると以下の2パターンでエクセルが落ちる。
1. 当該範囲を選択後、C = Selection.value としてVariant配列を作成したとき
2. 値を入れた領域の右側のセルに行って ctrl + R でコピーしたとき
まっさらなシートでやってもエクセルを立ち上げ直してもOSを立ち上げ直しても再現する。
これまでこんなことはなかった気がするが、なんだこりゃ?
Office Personal 2010 Excel 14.0.7163.5000(64ビット)
0860デフォルトの名無しさん
2016/02/11(木) 12:57:34.93ID:GSEE6twLいろいろテストして頂きありがとうございました。
>>858の方法で一行ずつVariant変数に格納してみたところ、
上の方の行では問題ありませんでしたが、13万行あたりでエラー。
その行のA列の書式は日付型でした。
正常にVariantに格納できていた行のA列は標準書式でした。
A列の書式を全て標準とすることで当初のマクロは正常に動きました。
なぜこれでエラーが回避できたのかはわかりませんが、とりあえず大きく前進しました。
ありがとうございました。
>>858
858の一行ずつ格納するコードを実行することでA列書式が影響していることがわかりました。
ありがとうございました。
>>859
私の問題で迷惑をかけてしまい申し訳ありません。
私の環境で1,2を試してみましたがエクセルは落ちませんでした。
OFFICE2010 32bit + Win7 64bit
0861823
2016/02/11(木) 12:59:46.57ID:GSEE6twLかつてA列には日付が入っており、その名残というか当時の書式が残ってしまっていたようです。
0862デフォルトの名無しさん
2016/02/11(木) 14:46:45.09ID:2zWchetY> 私の問題で迷惑をかけてしまい申し訳ありません。
いや、そう言うケースでエラーになるのは俺には勉強になったよ
0863デフォルトの名無しさん
2016/02/11(木) 15:44:40.95ID:cll589HH一体なんだったのかわからん。
さて、ドキュメント作成の作業に戻ろう...
0864デフォルトの名無しさん
2016/02/11(木) 23:27:10.13ID:8WhoCP6Oその際に型を選択するんだが、元の値がその型に収まらない場合エラーが出る
今に始まった話じゃないし、対策としてRange.Value2ってのも実装されてる
0865デフォルトの名無しさん
2016/02/11(木) 23:56:26.18ID:zhBGlfG9それぞれのシートのA1,A2,B1,B2,C1,C2と固有のセルデータを所得して、
それを新たなブックに1行ずつデータを順に張り付けたい。
1行が1ブック(シート)分のデータになるようにしたい。
どのようにVBAを書けばいいですか
Excel2010でお願いします。
0866デフォルトの名無しさん
2016/02/12(金) 00:06:05.03ID:4EYM4HYY0867デフォルトの名無しさん
2016/02/12(金) 00:22:05.65ID:NB9uA2aw普通に書けばいいですね
0868デフォルトの名無しさん
2016/02/12(金) 01:59:27.96ID:gunxxlb9他のブックを参照する、特定のセルの値をとる、
1行ずつブックに値を書く、とかね。
0869デフォルトの名無しさん
2016/02/12(金) 06:02:16.01ID:4KxhZPevちなみにいくらぐらい欲しいの?
こんなの報酬もらおうにも100円ぐらいの内容だと思うけど
0870デフォルトの名無しさん
2016/02/12(金) 06:08:37.28ID:Fbay5uRwで、一日かかるかどうかだから二万円くらいじゃね?
0871デフォルトの名無しさん
2016/02/12(金) 07:44:15.34ID:vUMz7FOm0872デフォルトの名無しさん
2016/02/12(金) 08:41:10.25ID:eUWMATXs100円ww
君のような事例が今のIT業界を作ってるんだなって改めて思ったわ。
0873デフォルトの名無しさん
2016/02/12(金) 08:53:48.16ID:6JIdb1d45万円欲しい
0874デフォルトの名無しさん
2016/02/12(金) 09:42:12.77ID:tdFcrErR人月仕事って高いよな
0875デフォルトの名無しさん
2016/02/12(金) 12:23:58.29ID:IOOvL8tC0876デフォルトの名無しさん
2016/02/12(金) 16:56:54.83ID:OpesMGU+a(10,10)という配列があり
if a(10,t) > 50 then
のように使うとき、tが12とかだったらエラになりますが、これの回避の仕方をご教授お願いいたします。
0877デフォルトの名無しさん
2016/02/12(金) 17:03:35.83ID:vtZ9jqP1例外処理をする
0878デフォルトの名無しさん
2016/02/12(金) 17:22:44.29ID:0HgA+kac0879デフォルトの名無しさん
2016/02/12(金) 17:24:28.01ID:OpesMGU+のように作っておけばいいのですね。
勉強になりました!
0880デフォルトの名無しさん
2016/02/12(金) 17:45:43.40ID:4KxhZPevOn Error は他に適当な回避策がないときや、
回避策があってもそれやるがメンドクサイ時とかに使うもんであって
配列の要素数なんて簡単に分るんだから
横着せずにちゃんと UBound と LBound を使って処理しようよ
If (LBound(a, 2) <= t) And (UBound(a, 2) >= t) Then
if a(10,t) > 50 then
End If
End If
のほうが良いよ
0881デフォルトの名無しさん
2016/02/12(金) 17:45:50.42ID:Xj/79B1T0882デフォルトの名無しさん
2016/02/12(金) 18:31:13.80ID:hlhHAQgj可能
VirtualBox + Windows + Excel と言う構成で良ければ
0883823
2016/02/13(土) 19:38:51.24ID:EYTUo5+Jレス遅くなってすいません。
"日付"書式のセルの値をValueプロパティで取り出そうとすると
日付書式の制限(西暦100年1月1日〜西暦9999年12月31日:-657434〜2958465)
を超えるとオーバーフローする、という理解で正しいでしょうか?
Value2というものがあるということは知っていましたが、このようなときに使うんですね。
とても勉強になりました。ありがとうございました。
ValueよりもValue2の方が優れているように感じます。
今後Valueプロパティではなく全てValue2プロパティを使うことにすると何か問題ってありませんかね?
例えば処理が若干遅いとか・・・
0884デフォルトの名無しさん
2016/02/13(土) 21:49:38.36ID:GDWv9XcG処理速度はValue2の方が速い
0885デフォルトの名無しさん
2016/02/13(土) 22:19:41.35ID:2d9oUeOe0886デフォルトの名無しさん
2016/02/13(土) 22:41:26.61ID:f/VF2KeB0887デフォルトの名無しさん
2016/02/13(土) 23:19:04.31ID:OylkXFzpそのまま回答するのはめんどくさい。
https://www.moug.net/tech/exvba/0060037.html
を参考にできんじゃね。
0888デフォルトの名無しさん
2016/02/14(日) 00:13:22.48ID:zC+zpx/w0889デフォルトの名無しさん
2016/02/14(日) 01:10:16.92ID:fDQc/eCz通貨型と日付のシリアル値が取得できる
それ以外の型では違わない
0890デフォルトの名無しさん
2016/02/14(日) 01:11:01.50ID:zC+zpx/wありがとうございます
0891デフォルトの名無しさん
2016/02/14(日) 01:34:20.60ID:AnW4+fzX0892デフォルトの名無しさん
2016/02/14(日) 01:42:46.28ID:zC+zpx/w0893デフォルトの名無しさん
2016/02/14(日) 01:43:20.90ID:UrOJS99m0894デフォルトの名無しさん
2016/02/14(日) 02:06:30.53ID:SJCumIm8C系列ならBASIC系列よりよっぽど簡単に覚えられるからC#でもJavaでも大した問題にはならないんだが。
0895デフォルトの名無しさん
2016/02/14(日) 05:49:53.65ID:RVpb+5w9両方使えるようにすりゃいいだけ
0896デフォルトの名無しさん
2016/02/14(日) 07:51:34.27ID:fDQc/eCz機能的にも速度的にも
ていうか、素直にVB使えばええやん
もしかして無料って知られてない?
会社のルールでインスコできないヤツはご愁傷様
0897デフォルトの名無しさん
2016/02/14(日) 10:13:31.34ID:/e94Iuh/0898デフォルトの名無しさん
2016/02/14(日) 11:02:24.78ID:fDQc/eCz0899デフォルトの名無しさん
2016/02/14(日) 12:29:32.95ID:qwowkzgX0900デフォルトの名無しさん
2016/02/14(日) 12:43:28.94ID:SJCumIm8VBAまでのバージョンだと仕様的に基本的なデータ型を別に扱わなければならなかったせいで、
Variant型が必要だったけど、VB.NETになって全てObject型で扱う事が出来るから廃止された。
という風にググッたら書いてあった。
0901デフォルトの名無しさん
2016/02/14(日) 13:16:52.23ID:+WF+5Yylでも大幅な書き換え作業はやっぱりいやだな。いま出来ている事ができなくなる不安もあるし。
0902デフォルトの名無しさん
2016/02/14(日) 19:29:42.13ID:I7Qc+kxzここだけsetの洗礼を免れるのは違和感があるんですが本当にいいんです?
func(obj1, obj2)
dim a
a = array(obj1, obj2, 1, "挿入")
set a(0) = nothing
a = array()
それとこういう場合のnothingし忘れたobj2の参照はどうなるんでしょうかね
0903デフォルトの名無しさん
2016/02/14(日) 19:56:22.66ID:SJCumIm8でもなんで自分で実験すりゃ済む事を疑問として抱え込んだり、出来ないと思い込んでVBAの欠点だと騒ぐんだろう。
0904デフォルトの名無しさん
2016/02/14(日) 20:03:05.35ID:Bsnhcx6p>オブジェクト型の変数もその他もお構いなしに突っ込めるのは関数だから
ちがいます
要素がバリアント型なので普通の値もオブジェクトも格納できるだけです
Nothingし忘れはどうなるだろうな
配列の要素まで参照カウンタ減らしてくれるかな?
デストラクタ(Class_Terminate)にログ仕込んだクラス作って実験してみればわかるんじゃね
0905デフォルトの名無しさん
2016/02/14(日) 20:08:24.25ID:viQJz0oS変数ならprivate subを使えば良いようですが、ファイルの装置番号の引き継がせかたがわかりません。すみませんがお願いいたします
sub a()
open 〜input.txt output as #1
call b
endsub
sub b()
print #1
close #1
end sub
0906デフォルトの名無しさん
2016/02/14(日) 20:22:40.85ID:0n9Q+x/Ksub(a)の上行に public 装置番号
とか宣言すればモジュール内で使えます
workシートのあるセルを使っても引き渡せます
0907デフォルトの名無しさん
2016/02/14(日) 20:49:27.29ID:qwowkzgXたぶん>>902はなぜ Set = と書かなくても格納できるのかを疑問視してるんじゃない?
バリアント型だから普通の値もオブジェクトも格納できるってのはその通りだけど、Set = と書かなくてすむ
別の理由を求めたいんだろう。
0908デフォルトの名無しさん
2016/02/14(日) 20:50:38.97ID:qwowkzgX>なんで自分で実験すりゃ済む事を疑問として抱え込んだり、出来ないと思い込んでVBAの欠点だと騒ぐんだろう。
ふつうは実験する前に規格があるからじゃない?
0909デフォルトの名無しさん
2016/02/14(日) 21:10:13.27ID:1RrNJs8yセルで引き渡します。ありがとうございました
0910デフォルトの名無しさん
2016/02/14(日) 22:02:39.06ID:+EEU6IXV> ここだけsetの洗礼を免れるのは違和感があるんですが本当にいいんです?
いいも何もマイクロソフトがそれでいいと思ったからこうなってるだけだしな。
元々Setが必要なのはデフォルトプロパティが紛らわしいから値の代入と参照の代入を区別する為だけど、
マイクロソフトはArray()関数の引数でデフォルトプロパティを使いたい場面はないと判断しだんだろ。
必要だと思えばそれなりの構文を用意してくるはずだ。
要するにそういう決まりだというだけで、何ら論理的な理由はない。
受けいれるか受けいれないかだけだ。
あと、必ず最後にNothingを代入するのはやめろ。
メモリの解放を人が管理するとかならず漏れがあるから言語側で面倒を見てくれているのだから
Nothingの代入を書く癖がつくと当然書き漏らしが出てくる。
そして、そのプログラムを見た誰かは当然「どうしてここだけNothingが代入されていないのか」
という無駄な疑問を抱く事になる。プログラム的にな何ら問題がないにもかかわらず、だ。
つまり、どうしても他人を混乱に落しいれたいのでなければ余計な事はするな。
Nothingは代入するな。
0911デフォルトの名無しさん
2016/02/14(日) 22:11:05.23ID:Ahl3Hrvyこの前提が間違ってる
「万が一書き漏らした場合には他者がそのコードを見たときに混乱する可能性も有る」
という程度の話なら理解できるけど
0912デフォルトの名無しさん
2016/02/14(日) 22:11:45.16ID:SJCumIm8そこには注意する必要があるけどな。
最後にNothing入れたい変数を持つ一連の処理は可能な限り別関数にすべきだけど。
0913デフォルトの名無しさん
2016/02/14(日) 22:13:39.02ID:+EEU6IXVお前は万が一かもしれんが、普通の人は十が一程度なのだよ。
0914デフォルトの名無しさん
2016/02/14(日) 22:28:57.78ID:LvmVag53信じろ
もしメモリが開放されてなかったら馬鹿にしてもらってもいい
0915デフォルトの名無しさん
2016/02/14(日) 22:46:01.63ID:Ahl3Hrvyその程度の人物なら他人の書き漏らしにも気付かないから
結局同じ事だよ
0916デフォルトの名無しさん
2016/02/14(日) 22:58:05.65ID:Bsnhcx6p>ループ内でNewする時は明示的にNothing入れないとメモリを圧迫していく
軽く試した範囲では、新しいインスタンス代入した時点で、前のインスタンスは破棄されてるっぽいぞ
当然他に参照が無い前提だぞ
>>914
循環参照とかしてると、使われなくなった後も開放されないんだが
まあ、参照されてるわけだから、使われなくなっていないと言えなくもないが
0917デフォルトの名無しさん
2016/02/14(日) 22:58:31.32ID:qwowkzgXそういうことを推測すること自体おかしいよ。
言語仕様を規格化していないことは罪だ。
0918デフォルトの名無しさん
2016/02/15(月) 01:13:01.96ID:akbmk0Ll0919デフォルトの名無しさん
2016/02/15(月) 06:37:55.70ID:Lkye5vJLレス数が900を超えています。1000を超えると表示できなくなるよ。