- 1 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 13:43:16.31 ID:6yf2E1Gz0.net]
- !extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part77 https://mevius.5ch.net/test/read.cgi/tech/1658009255/ - VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 237 名前:デフォルトの名無しさん [2022/12/03(土) 14:26:56.17 ID:y5TLnC6XH.net]
- >>232
君、韓国人みたいな発言してるよ 気をつけたほうが良いと思う
- 238 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 14:33:59.75 ID:zLpEoZMka.net]
- いきなり〇国とか言い出すのも老害によくある行動
- 239 名前:デフォルトの名無しさん [2022/12/03(土) 14:59:55.68 ID:YYHySLTHa.net]
- 質問者はなんで出来ると思って質問したのか?
- 240 名前:222 mailto:sage [2022/12/03(土) 15:06:08.67 ID:S7dtgmin0.net]
- アドバイス頂けただけありがたいです。
神様皆様ありがとうございます マクロの記録なのですが、 マクロ記録→検索→全部→マクロ記録終了 そしてマクロを選択して編集すると Macro と書かれているだけでマクロが記録できません 記録してどんなワークシート関数を使っているのかみたいのですが 何か必要な設定があるのでしょうか? 現在excel2019を使っています
- 241 名前:222 mailto:sage [2022/12/03(土) 15:11:13.12 ID:S7dtgmin0.net]
- >>236
class.propertyみたいな呼び出し方で 配列や、インスタンス代入変数を参照できたらいいなって思ったんです function やsubを直接参照するのが気持ちよくなくて
- 242 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 15:32:48.63 ID:y5TLnC6XH.net]
- >>237
特にない 365だけど、昔も今も普通に記録されるよ https://i.imgur.com/3UPitt6.png
- 243 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 16:01:02.34 ID:y5TLnC6XH.net]
- >>238
vbaは化石だから色々と諦めるしかない
- 244 名前:デフォルトの名無しさん [2022/12/03(土) 17:35:51.41 ID:su8PlnK50.net]
- >>235
それ、朝鮮総連のマニュアルだよ。 「あなたは朝鮮人の可能性があると言って相手の反応を見ましょう」
- 245 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 18:08:54.01 ID:i+Roms8I0.net]
- >>224
それ、ちょっと思いついてネタ的に作ってみようかと思ったが そもそもブロックレベルのスコープもたないVBAでやると大変なことになるだけだったわ
- 246 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 18:30:19.13 ID:pfZ7JepId.net]
- >>232
回答もできず できることで負けてるから若さで勝ち誇りたいプライドもかわいそうだな そのまま年取るなよ >>242 ある程度まとまったコードを例えば分岐のいくつかでやりたいとかの場合は有効かもしれんけどね
- 247 名前:デフォルトの名無しさん [2022/12/03(土) 19:16:17.53 ID:lRZF9sqh0.net]
- >>238
Class内にDictionaryなりCollectionなりをSetしておいてItemをため込み、 Property Getで取得することはできそうな気がする。。。 ごめん、検証してないし希望とは違うかもしれんけど。
- 248 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 22:12:00.65 ID:K9qqP04ra.net]
- 複数行にまとめてVLOOKUP関数を埋め込みたいのでFormulaR1C1プロパティを使っているのですが、マジックナンバーを避けるために検索範囲や列番号を変数で表現すると一行がやたら長くなってしまいます
出来るだけ簡潔に書きたいのですが、何かいい方法はありませんかねえ
- 249 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 22:38:24.22 ID:RHVI1GN10.net]
- >>245
やたら長いとやらを貼らないと意味が分からない
- 250 名前:デフォルトの名無しさん mailto:sage [2022/12/03(土) 22:54:43.08 ID:y5TLnC6XH.net]
- >>245
indirectかませてるって事?
- 251 名前:デフォルトの名無しさん [2022/12/04(日) 05:27:51.07 ID:c2Va4wZ/0.net]
- >>245
長くなるというのがどういう状況かわからんけど、範囲をテーブル化して 構造化参照するとかListobjectで指定するとかは?
- 252 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 05:34:26.58 ID:SnW1Fv340.net]
- テーブルとか職場の人が嫌がるのですが
- 253 名前:デフォルトの名無しさん [2022/12/04(日) 07:20:23.13 ID:c2Va4wZ/0.net]
- >>249
あーテーブル嫌がる人けっこう多いよねーw >>245の件としてレスするけど、テーブル書式設定をクリアしてテーブルっぽく見せないってごまかしは置いてくとしてw 変数って書いてるからVBAコード内での一行なのだろうと仮定して、変数にすると長くなるのであれば変数名を短くするしかないかと。 多少なりともわかりやすくというなら列番号はEnum定義しておくとか。そのくらいかな。 的外れなレスだったらごめんね。
- 254 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 07:55:31.27 ID:CPo+UFwT0.net]
- 構造化参照も理解できない方たちが事務やってるの多いもんな
変数てLET関数のことかな VBAの変数名の付け方が参考になるんじゃないか むしろVBAだと変数名は少し長くなっても後から理解できるようにしておくというのが多いけど
- 255 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 08:09:42.33 ID:TGszPi/mH.net]
- >>240
新旧の互換性を維持する系の言語は いろいろ個性が強くなりますので できないことはできないで教えていただけてすっきりです >>244 アドバイスありがとうございます クラ
- 256 名前:スモジュール内のプロシージャーをすべてprivateにして
各プロシージャーの処理結果をモジュール変数の参照のようにしたいのです そうすれば多少は依存性が解消できて見通しよくなるような気がしてます 何かいい方法ないでしょうか? [] - [ここ壊れてます]
- 257 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 08:10:27.13 ID:TGszPi/mH.net]
- >>239
ありがとうございます 何か自分の設定がおかしいのかもしれません 調べてみます
- 258 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 10:02:49.72 ID:ep+/H4bNd.net]
- 自分はテーブル大好き派なんだが嫌いな人多いんだ
- 259 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 12:51:49.12 ID:SnW1Fv340.net]
- 嫌いどころかデータ蓄積の入力用シートすら作ってない不思議な人達ばかりよ現場は。
ひとつの表で完結させようとしている。 良くそれで仕事を完遂できるなと
- 260 名前:デフォルトの名無しさん [2022/12/04(日) 13:25:18.39 ID:pUfIiilw0.net]
- すみません
凄く基本的なマクロの質問になると思いますが質問させてください シート2のA2からA列の最終行までの値をコピーして シート1のB3に貼り付けをしたいのですがどうしたらいいでしょうか? 範囲を最終行に応じて自動的に変化させたいです 他にもB2から最終行まで、D3から最終行までとするにはどうしたら良いでしょうか?
- 261 名前:デフォルトの名無しさん [2022/12/04(日) 14:09:55.48 ID:5CZT7HJs0.net]
- >>252
クラス内のプロシージャを全てPrivateにして外部のモジュールから参照するのはしようと思えば出来る。
- 262 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 14:24:22.61 ID:S/+N28Tr0.net]
- >>256
VBA 最終行 でググれ https://www.excel-ubara.com/excelvba1/EXCELVBA318.html > シート2のA2からA列の最終行 なら With Worksheets("シート2") LastRow =.Cells(.Rows.Count, "A").End(xlUp).Row End With
- 263 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 15:39:27.71 ID:E+FYkBejd.net]
- >>256
クリップボード経由しないならこんな感じじゃない Dim iLastRow As Long iLastRow = Worksheets("Sheet2").Range("A1").SpecialCells(xlLastCell).Row Worksheets("Sheet1").Range("B1:B" & CStr(iRow - 1)).Value = Worksheets("Sheet2").Range("A2:A" & CStr(iLastRow)).Value ちなみに代入元と代入先の行数を合わせる必要があるからそこは必要に応じて書き換えてね
- 264 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 15:42:10.01 ID:TGszPi/mH.net]
- >>257
dim cls as class1 set cls =new class1 cls.arry(0) cls.dictionary("x") みたいなことできますか? プログラムはかなりできあがってきたんですが 出来るようなら書き換えたいです
- 265 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 16:08:10.76 ID:TGszPi/mH.net]
- 神様の皆様、よろしくお願いします
動的配列を使って要素を追加するケースで質問です dim ar() as variant redim ar(0) for i=0 to 9 ar(i)=i redim preserve ar(ubound(ar)+1) next redim preserve ar(ubound(ar)-1) // A A部分はar(10)を削除しようとして記述しています この記述は、ar配列の最終要素を削除する動作を保証しているのでしょうか? それとも何かの影響でarの最終要素以外の要素を削除することはあるのでしょうか?
- 266 名前:デフォルトの名無しさん [2022/12/04(日) 16:43:26.32 ID:cmQKIRXH0.net]
- >>261
VBE上でローカルウィンドウを出してF8を繰り返し押せば確認できるよ
- 267 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 16:53:49.22 ID:S/+N28Tr0.net]
- >>261
自分でシミュレーションしてみ ' i = 9 から... ar(i)=i ' ar(9)=9 redim preserve ar(ubound(ar)+1) ' redim preserve ar(9+1) redim preserve ar(ubound(ar)-1) ' redim preserve ar(10-1)
- 268 名前:デフォルトの名無しさん [2022/12/04(日) 16:55:07.12 ID:pUfIiilw0.net]
- >>258-259
ありがとうございます 凄く助かります
- 269 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 17:09:39.48 ID:TGszPi/mH.net]
- >>262
>>263 ありがとうございます 例えば1万回は最終要素を削除できたけれど 10億回すると削除されない、もしくは最終要素以外を削除してしまう という挙動はあり得ないのでしょうか? 言い換えてると vbaの仕様として、ubound(ar)は配列の最終要素を参照しており ubound(ar)-1は、最終要素の1つ手前を参照することを保証していると考えていいでしょうか?
- 270 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 18:25:54.71 ID:SVL4/CbaH.net]
- >>265
良い。問題無い。 保証されないのはforeach あれは順番が変わる事があるので、foreachで同じ事をやるのは絶対にNG
- 271 名前:デフォルトの名無しさん (ワッチョイ dc05-AmP8) mailto:sage [2022/12/04(日) 18:42:02.29 ID:QfYm9r1x0.net]
- 請求書をつくるとき取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってるんですが
これをうまい具合に自動化することはできませんか?
- 272 名前:デフォルトの名無しさん (スップ Sdc4-4FAg) mailto:sage [2022/12/04(日) 18:44:43.55 ID:E+FYkBejd.net]
- そういうコードをかけばいいんじゃない?
- 273 名前:デフォルトの名無しさん (ブーイモ MMba-5Y9H) [2022/12/04(日) 18:57:53.90 ID:k+5uNib2M.net]
- ピボットテーブルの特定セルを参照する関数なかったっけ?
- 274 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 19:30:14.40 ID:SVL4/CbaH.net]
- >>267
取引先ごとの売上をいれてるシートをピボットテーブルで日付ごとに合算してそれをコピペして請求書シートに貼ってる ↓ 請求書シートの所定の場所に、ピボットテーブルを表示させる でいいんじゃないの? 取引先や日付範囲でフィルタすれば全自動になると思う
- 275 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 20:19:07.12 ID:QfYm9r1x0.net]
- >>270
そのまま別のデータをコピペすることもあるので ピボットテーブル直接表示させたらズレませんか?
- 276 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 20:33:04.86 ID:SVL4/CbaH.net]
- >>271
どうズレるかはよく分からんけど・・・ ズレるのが怖いなら、 単純に参照すれば良い。黄色の部分は本当にシンプルな式だけで良いと思う https://i.imgur.com/rwpq1hu.png
- 277 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 20:47:06.88 ID:dKAtQmN50.net]
- >>267
ピボットテーブルのフィルターに「取引先」を設定して コピペするときにリンク貼り付けすれば 後はフィルターを切り替えるだけじゃないだろうか
- 278 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 22:29:31.05 ID:TGszPi/mH.net]
- >>266
ありがとうございました これでUboundを業務で使えます これからもご指導よろしくお願いします
- 279 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 00:46:19.76 ID:TwFYHOyP0.net]
- >>272
>>273 いずれもコピーは必要なんですね ここに貼り付ける、ときたら 勝手に集計したのを貼ってくれといいのですけど ちなみに零細で月に10枚程度しか請求書ださないとこは ExcelのなんちゃってDBで十分ですかね? フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った これとこれをグループ化とかも簡単にできないし
- 280 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 01:25:43.19 ID:vai3YpAKH.net]
- >>275
>ちなみに零細で月に10枚程度しか請求書ださないとこは >ExcelのなんちゃってDBで十分ですかね? じゃなくて、成長率 毎年の成長率が高い企業は、本当に気をつけたほうがいい >フリーSQLも含めACCESSやファイルメーカーもたかってみたがデータの柔軟性がなさすぎて困った Excelがおかしな事をしているだけなんだよ それがたまたま日本の零細~中小に合致しているだけ
- 281 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 01:33:53.42 ID:TwFYHOyP0.net]
- >>276
ファイルメーカーつかってたが レコードを日付でまとめて一覧ししてレポートだす機能もないんだよ…
- 282 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 01:36:52.68 ID:TwFYHOyP0.net]
- 外部からインポートもコピペではできないし
テーブルを全く計算も不得意ときてる
- 283 名前:デフォルトの名無しさん [2022/12/05(月) 03:27:44.54 ID:FhvtASfFd.net]
- 安い販売管理アプリすら買えない貧乏会社は潰れろ
- 284 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 06:57:51.15 ID:/0dw54cWH.net]
- 今どきはフリークラウドの管理ソフト(販売系、経理系、労務系)のサービスが山ほどあるでしょ
提供会社が無償提供やめたり、提供自体やめると面倒だけど データ移行性を確保できるのならそっち方法がいい
- 285 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 07:47:07.80 ID:TwFYHOyP0.net]
- >>279
>>280 それこそつかいにくい
- 286 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 11:40:12.06 ID:BG/y+01pF.net]
- >>246
一例をそのまま貼ると、こんな感じです。 Dim VLOOKUP商品名 As String VLOOKUP商品名 = "=VLOOKUP(RC" & eCols_明細.得意先コード & "," & WsName得意先テーブル & "!R" & eRows_通常.開始行 & "C" & eCols_得意先テーブル.得意先コード & ":R" & EndRow得意先テーブル & "C" & eCount_得意先テーブル & "," & eCols_得意先テーブル.得意先名 & "," & 完全一致 & ")" めちゃくちゃ長くて可読性が悪いなと……
- 287 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 12:03:42.76 ID:2GrVmVNid.net]
- 変数に代入している際の話なら
VLOOKUP商品名 = "" VLOOKUP商品名 = VLOOKUP商品名 & "AAA" VLOOKUP商品名 = VLOOKUP商品名 & "BBB" VLOOKUP商品名 = VLOOKUP商品名 & "CCC" とかきりのいいところで分割して代入すればいいんじゃない?
- 288 名前:デフォルトの名無しさん [2022/12/05(月) 12:08:08.63 ID:1vq1KTlma.net]
- >>282
それ自力で展開できないようじゃやばいよ
- 289 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 12:14:29.23 ID:EBZoNox0M.net]
- >>283
一応テーブルを参照する部分(VLOOKUP関数の参照範囲の箇所)を変数に代入することで少しは可読性があがったのですが、そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ、と思いまして >>284 「展開」とは?
- 290 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 12:36:26.38 ID:2GYg1OhQ0.net]
- >>267
「GROUP BY 複数条件」じゃないの? GROUP BY 取引先, 日付
- 291 名前:デフォルトの名無しさん (ワッチョイ 0101-9CiQ) mailto:sage [2022/12/05(月) 18:30:47.05 ID:ovLbu+Xd0.net]
- >>285
「そもそも複数行へのVLOOKUP関数の埋込みをFormulaR1C1プロパティを使わなくても出来ないものなのかなあ」ってのがよくわからん どんな機能を使おうが、セルに代入したいなら必ず一度はコードに記載しなきゃいけないんだから「eCols_明細.得意先コード」とかの変数名を短くするくらいしかないでしょ
- 292 名前:デフォルトの名無しさん [2022/12/05(月) 20:42:26.49 ID:vfUaA4330.net]
- >>282
VBAからvlookup関数を埋め込んだことが無いので処理のイメージがつかめないんだけど、 今やろうとしていることはvlookup関数の字面を文字列を繋げて作り上げようとしてる感じなのかな? そもそもVlookup関数の構文は VLOOKUP(検索値, 範囲, 列番号, 検索の型)なのだから変数を使うのであれば 検索値や範囲を変数に格納して繋げれば良いのでは? 例えば,,, Dim val as String: val="値" Dim rng as Range: set rng = range(”A1”,"B10") Dim col as long: col = 2 Dim FormulaStr as string FormulaStr = "=VLOOKUP(" & val & "," & rng.Address & "," & col & ", false)" みたいな感じ? 値や範囲をセルによって可変にしたいなら変数に格納する値を変えればいいわけだし。。。 こういうことじゃないのかな?
- 293 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 20:47:00.71 ID:imBemMvO0.net]
- そもそも数式をVBAで入力することってあんまりないよな
- 294 名前:デフォルトの名無しさん [2022/12/05(月) 21:46:02.27 ID:vfUaA4330.net]
- >>289
そうですねぇ、あんまりないですね。 経験としては、計算式があるのにどうしても直打ちされて消されてしまうシートに ボタン一発で計算式を復旧させる機能を付けた時くらいですかねw
- 295 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 22:43:24.64 ID:/0dw54cWH.net]
- やっぱりVlookやsumifみたいな
組み込み関数のほうが、普通にコードするより速く強力なんでしょうか?
- 296 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 00:26:23.27 ID:/P6wRT1K0.net]
- コードが短くなるから
- 297 名前:デフォルトの名無しさん (ワッチョイ 6eda-RX5i) [2022/12/06(火) 05:54:39.62 ID:iYcy7y+Q0.net]
- >>291
Excelに備わっている関数は強力だと思うし使い勝手が良かったりするものもありますね。
- 298 名前:рフ場合はcountifやmatch、max、minあたりはVBA上でもWorksheetfunctionからよく使います。 []
- [ここ壊れてます]
- 299 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 06:19:16.90 ID:MaIfapT+0.net]
- >>291
かなり最適化されてるしマルチスレッドで動作するから同じ処理ならVBAより相当速い
- 300 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 07:43:11.23 ID:Al8BgWGSd.net]
- >>275
零細だったらそれこそappsheetでもいいんじゃないですか?
- 301 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 08:29:25.79 ID:AKPIYKETr.net]
- 関数を直接入力するとその後にシートに何かしら入力するたびに再計算されるから面倒だわ
その再計算が気にならないってんならvbaで処理しても気にならないレベルでしょ countifなんか特に再計算に3分とかかかる場合もあるし
- 302 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 09:00:18.69 ID:0FDDxcj9H.net]
- >>296
ピボットあたりにしてみては? coutif遅いよ
- 303 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 11:03:13.75 ID:jhjyA+WOr.net]
- >>297
意味が分かりにくくてすまん だから関数を直接セルに入力するようなことはせずに、vbaでworksheetFunctionとかDictionaryとか使って結果だけを出力するなって意味 vbaで関数を入力するのは引き継ぎとか他人に渡すのを想定したときくらいかな
- 304 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 11:13:52.38 ID:64yedq7Nd.net]
- 2行目もよくわからんし
VBAで関数を入力とかイミフなんだが
- 305 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 11:40:45.39 ID:QNWFDahpa.net]
- Application.Calculation = xlCalculationManual はとりあえず書いとくでしょ
- 306 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 13:28:57.18 ID:/P6wRT1K0.net]
- つかVBAで関数使えるなんて最近知ったわ
- 307 名前:デフォルトの名無しさん [2022/12/06(火) 13:35:48.17 ID:41AW+NFUM.net]
- >>301
お馬鹿自慢要らない
- 308 名前:デフォルトの名無しさん [2022/12/06(火) 18:35:08.85 ID:+0skKz+k0.net]
- どんな機能も馬鹿には使えない
- 309 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 22:10:52.72 ID:0FDDxcj9H.net]
- >>300
昔書いてたけど、最近はほとんど書いてないな PCスペックが大幅に向上し、負荷のないコードが自然に掛けるようになった
- 310 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 23:34:20.45 ID:HLCihNOZ0.net]
- 2行目がひどすぎる
- 311 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 01:18:20.40 ID:X43S603Q0.net]
- なにが?
- 312 名前:デフォルトの名無しさん (JP 0H88-7kHv) mailto:sage [2022/12/07(水) 07:13:11.50 ID:FarCeGHLH.net]
- 演算処理能力、メモリ容量、基盤の伝送量と速度が大幅に向上し
組み込み関数による処理、VBA関数による処理などの差によるメモリ効率、処理速度を考えず 組み込み関数に依存しないコーディングを書けるようになった 言い換えると3行になるな メモリ効率を悪化させてしまった
- 313 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 11:24:59.17 ID:D8w4iSDKd.net]
- >>304
関数が入っているセルを参照するようなコードの場合 例えばCells(4, 3)にCells(3, 3)の値を10倍するような関数が入っているとして Cells(3, 3).Value = 40 Debug.Print Cells(4, 3).Value とやった場合、自動になっていればCells(4, 3)は400になった値が参照できて 手動ならもともと入っている値が参照できるという状態でしょ スペックが向上、負荷のないコードだから書かないというのは危険な考えでは
- 314 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 11:32:32.02 ID:utJNEW7kH.net]
- >>308
再計算に左右されるコードを書く事がそもそもおかしいんですわ
- 315 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 12:12:32.61 ID:LcpUtl7xM.net]
- 配列がらみのFunctionを作ったときにメモリを空けようと「一時的な配列」を初期化しているのだけれどもしかしてあんまり意味ない?
たとえばこのように↓ Function 戻り値配列 (引数)As Variant Dim TempArr As Variant (……何らかの処理) 戻り値配列 = TempArr Erase TempArr ← これ End Function 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう
- 316 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 12:16:33.70 ID:utJNEW7kH.net]
- >>310
function抜けたらメモリ勝手に空くから特に意味はない それに今は潤沢にメモリあるから、メモリの空き容量なんて気にしなくていいよ
- 317 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 12:21:53.20 ID:D8w4iSDKd.net]
- >>309
なるほど こういう回答するやつとは通じ合えないのがわかったわw しかも>>311の回答も適当だしな
- 318 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 13:54:56.12 ID:wBRRjjXH0.net]
- >>312
vbaって配列の要素に変数を入れ込んでから配列を初期化すると、 要素変数への参照は切れるけれどメモリ領域は解放されないのでは? それともvbaって配列要素への参照切れで割りあてたメモリを開放するの?
- 319 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 14:42:43.86 ID:snBsCL7QM.net]
- 調べてから質問しよう
- 320 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 15:06:50.61 ID:y9uo2cdUa.net]
- とりあえず「Erase」を書くのはあんまり意味無いっぽいんでやめます
- 321 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 18:33:11.05 ID:utJNEW7kH.net]
- >>312
といいつつなにも訂正できないアホ
- 322 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 18:52:51.37 ID:CifLjB7Ga.net]
- >>310
> 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう そりゃ参照を返してるだけで実体は一個しかないからRemoveAllしたら消えるよ その後 TempDic を使わない事を明示したいなら Set TempDic = Nothing でもしとけばいいけどまあ関数抜けたら TempDic はなくなっちゃうんだから気にしなくていいと思うよ
- 323 名前:デフォルトの名無しさん [2022/12/08(木) 00:25:28.15 ID:+1lRH4XG0.net]
- まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは
使い終わったらさっさと解放することに越したことはないよ。 最近当たったんだけどボタンを押して呼んだ関数の中で数万のインスタンスを生成する処理があって、 完了メッセージを出した後もその関数抜けるときにメモリを解放しているもんだから暫く待たされるという残念なコードを見てる。 生成した後のごちゃごちゃした処理は別関数でやってたのに実に残念なツールになってたよ。
- 324 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 01:16:01.92 ID:WwdCwmmca.net]
- 意識高い系のVBA使いとか生きるの辛そうだな
プログラミング界ではそもそもVBAな時点でみんな半端者扱いなんだから気楽にやろうぜ
- 325 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 02:22:15.27 ID:tbk78NJr0.net]
- vbaを使ってて0.01秒早くしてどうすんだ?って思うときはある
- 326 名前:デフォルトの名無しさん (ワッチョイ aa01-QZbE) mailto:sage [2022/12/08(木) 06:20:02.03 ID:lmp5fbT90.net]
- >>318
> まぁでも関数やメソッド抜けるまでは保持し続けるから単一責任原則を守ったコードに慣れるまでは > 使い終わったらさっさと解放することに越したことはないよ。 呼び出し元に返す話に何を言ってるんだ?
- 327 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 07:04:26.73 ID:HFBnNvT0H.net]
- ならやっぱり配列要素がプリミティブでなければ
要素そのものを解放しないと 配列だけ初期化する意味なんてあるの?
- 328 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 07:26:25.62 ID:HFBnNvT0H.net]
- というか、vbaには参照切れで自動的にメモリ開放する機能がないってことなのか
- 329 名前:デフォルトの名無しさん [2022/12/08(木) 08:07:05.00 ID:+1lRH4XG0.net]
- >>322
例えば配列にループしてインスタンスを設定するとして、そのループの中でひとつの変数にNewしてインスタンスを作成して、 そのインスタンスを配列に設定した場合、前回のループで設定したインスタンスは配列の内容が削除されれば、他に参照しているところがない限りメモリから解放されるよ。
- 330 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 08:35:17.09 ID:yLcZaBdRH.net]
- >>323
ガベージコレクションね 無いよ 逆に参照が合った時に初めてnewされるよ
- 331 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 10:09:55.21 ID:JnPWza2ja.net]
- >>322
配列の話じゃねーから絡んできて頓珍漢なこというのはやめてくれ > 同じ要領で“TempDic”をRemove allしたら戻り値の連想配列も空になっちゃったけどこれはなんでなんだろう
- 332 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 10:17:37.27 ID:owyQh2KqM.net]
- >>326
仕様ですが何か?
- 333 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 10:23:17.17 ID:ch+LF4H/0.net]
- 配列の話じゃなかったんですね、すみません
- 334 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 10:27:25.77 ID:owyQh2KqM.net]
- よく見たら >>317 で解決済みじゃんか
- 335 名前:デフォルトの名無しさん [2022/12/08(木) 12:32:14.89 ID:+1lRH4XG0.net]
- >>326
それは済まなかった でもそんなにイライラするなよ ハゲが止まらなくばるぞ
- 336 名前:326 [2022/12/08(木) 14:20:26.49 ID:65k1Y+1Y0.net]
- >>330
いやわたしはハゲちゃおらんよ。 君みたいなハーゲマンと一緒にしないでくれ。
- 337 名前:デフォルトの名無しさん mailto:sage [2022/12/08(木) 17:59:48.27 ID:sOdFjo8m0.net]
- またヘアの話してる。。
ヘア話好きだなぁお前ら
|

|