!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
Excel VBA 質問スレ Part75
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スフッ Sd7f-wadS)
2022/02/09(水) 14:24:32.62ID:I0u44nFvd601デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/27(日) 12:19:46.20ID:CPBl4WFea >>599
まあ高々数十行位なら気にすることはないよ
まあ高々数十行位なら気にすることはないよ
602デフォルトの名無しさん (ワッチョイ adcc-tbOq)
2022/03/27(日) 12:41:21.31ID:cPay0R1J0 誰かSalseforceのAPIをVBAでたたく方法わかる人いませんか?
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、
603デフォルトの名無しさん (ブーイモ MMa6-+Ivz)
2022/03/27(日) 12:52:04.46ID:dAzXJbreM 字下げや改行なんてVBAでやることじゃない
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?
604デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/27(日) 13:07:11.24ID:OVREMJced 文書の整形と文書自体を一緒にしてしまうところが悲しい・・・
605デフォルトの名無しさん (ワッチョイ 61da-CM16)
2022/03/27(日) 17:11:35.24ID:hNNvtCzu0 なんでよ?VBAの義務教育編で字下げは真っ先に学習するはずじゃ??
606デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/27(日) 17:22:28.69ID:2Abk94v90 年収1000万のインド人はインデントもコメントもなし
一般人はちゃんとつけよう
一般人はちゃんとつけよう
607デフォルトの名無しさん (アウアウウー Sacd-/MGz)
2022/03/27(日) 17:30:10.15ID:6akgwO9ga >>602
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?
608デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/27(日) 17:33:41.29ID:OVREMJced609デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/27(日) 17:34:17.13ID:OVREMJced スクレイピングもたまに質問するやつがいるけど
それも同じな
それも同じな
610デフォルトの名無しさん (JP 0He2-i83I)
2022/03/27(日) 17:50:20.50ID:ob1ESvJwH >>609
VBA でのスクレイピングはイマイチですねえ、動いたり動かなかったりするし、なにかいい方法はないものか?
Function ScrapingAlgoA003(objIE As InternetExplorer, url, keyword As String)
objIE.navigate url
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim ReturnValue As Double
Dim div As HTMLDivElement
For Each div In htmlDoc.getElementsByClassName(keyword)
ReturnValue = CDbl(div.innerText)
ScrapingAlgoA003 = ReturnValue
Next div
Set htmlDoc = Nothing
End Function
VBA でのスクレイピングはイマイチですねえ、動いたり動かなかったりするし、なにかいい方法はないものか?
Function ScrapingAlgoA003(objIE As InternetExplorer, url, keyword As String)
objIE.navigate url
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim ReturnValue As Double
Dim div As HTMLDivElement
For Each div In htmlDoc.getElementsByClassName(keyword)
ReturnValue = CDbl(div.innerText)
ScrapingAlgoA003 = ReturnValue
Next div
Set htmlDoc = Nothing
End Function
611デフォルトの名無しさん (ワッチョイ 9e68-c/bJ)
2022/03/27(日) 19:02:58.02ID:jqHr+5yx0612デフォルトの名無しさん (ワッチョイ 5134-Nuys)
2022/03/27(日) 19:18:00.28ID:7EXZAGuD0613デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/27(日) 19:39:07.33ID:2Abk94v90 Seleniumはほんといいね
IEからxpathで・・・ってやってたのがほんとアホらしくなった
IEからxpathで・・・ってやってたのがほんとアホらしくなった
614デフォルトの名無しさん (ワッチョイ 368c-XyTZ)
2022/03/27(日) 19:43:23.36ID:U13zJWe20 Seleniumは昔インストールしたんだがよくわからず
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな
615デフォルトの名無しさん (ワッチョイ 5134-Nuys)
2022/03/27(日) 19:51:02.70ID:7EXZAGuD0 昔のSeleniumはChromeの方にも拡張機能入れて…とかだった気がするけど今は事前準備も書くのも凄く簡単になってるね
616デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/27(日) 19:59:57.15ID:2Abk94v90617デフォルトの名無しさん (ワッチョイ 12b1-VQaK)
2022/03/27(日) 20:17:18.33ID:Df2KiTxu0 質問です。
連想配列に格納した連想配列の値を取り出すには
どうしたらよいのでしょうか?
Dim dicA as Dictionary
Dim dicB as Dictionary
dicB.Add "a",100
dicB.Add "b",100
dicB.Add "c",100
dicA.Add "A",dicB
としたとき、dicAの中のdicB("b")の値を取得したいとき
どうしたらいいのでしょうか。
Debug.print dicA("A").("b")
とかで出せるかと思ったのですが駄目でした。
連想配列に格納した連想配列の値を取り出すには
どうしたらよいのでしょうか?
Dim dicA as Dictionary
Dim dicB as Dictionary
dicB.Add "a",100
dicB.Add "b",100
dicB.Add "c",100
dicA.Add "A",dicB
としたとき、dicAの中のdicB("b")の値を取得したいとき
どうしたらいいのでしょうか。
Debug.print dicA("A").("b")
とかで出せるかと思ったのですが駄目でした。
618デフォルトの名無しさん (ワッチョイ 9202-q+eG)
2022/03/27(日) 20:19:01.83ID:uW5IEa4H0 set TikuB = dickA("A")
Tikubi("b") = bibibibibi-----
Tikubi("b") = bibibibibi-----
619デフォルトの名無しさん (ワッチョイ 655f-ObPs)
2022/03/27(日) 20:22:07.59ID:EN8vWua40 >>610
For EachなのにIfで条件指定しないのか
For EachなのにIfで条件指定しないのか
620デフォルトの名無しさん (ワッチョイ 61da-CM16)
2022/03/27(日) 20:29:11.49ID:hNNvtCzu0 乳首エロい
621デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/27(日) 20:31:09.02ID:BqsGdBXW0 >>617
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?
普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?
普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。
622デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/27(日) 20:33:33.24ID:BqsGdBXW0 おっと、Dictionalyのスペルが違ってるか
Dictionaryかすまんこ
Dictionaryかすまんこ
623デフォルトの名無しさん (ワッチョイ 12b1-VQaK)
2022/03/27(日) 20:45:16.14ID:Df2KiTxu0 元の文と違いますが解決しました。
ありがとうございました。
Sub foo()
Dim dicA As Dictionary: Set dicA = New Dictionary
Dim dicB As Dictionary: Set dicB = New Dictionary
Set dicA("A") = dicB
dicA("A")("a") = "test"
Debug.Print dicA("A")("a") 'test
End Sub
ありがとうございました。
Sub foo()
Dim dicA As Dictionary: Set dicA = New Dictionary
Dim dicB As Dictionary: Set dicB = New Dictionary
Set dicA("A") = dicB
dicA("A")("a") = "test"
Debug.Print dicA("A")("a") 'test
End Sub
624デフォルトの名無しさん (アウアウウー Sacd-+Ivz)
2022/03/28(月) 01:22:22.67ID:LEJNBveMa ("A")
625デフォルトの名無しさん (ワッチョイ 9202-q+eG)
2022/03/28(月) 02:04:12.07ID:dJWBHkZn0 (:; U: ::)
626デフォルトの名無しさん (ワッチョイ b12c-XwpL)
2022/03/28(月) 07:56:32.13ID:bggr0gZp0 Selenium Webdriver と、
Chrome の拡張機能・Selenium IDE の2種類ある
Chrome の拡張機能・Selenium IDE の2種類ある
627デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/28(月) 07:57:45.06ID:W5FkPi4A0 Selenium Webdriver
628デフォルトの名無しさん (ブーイモ MMad-+Ivz)
2022/03/28(月) 12:34:55.90ID:DkLhkvc4M ウェブダイバー
629デフォルトの名無しさん (ワッチョイ ad49-+/qe)
2022/03/28(月) 13:29:17.84ID:9Kb03WZY0 ウェブダイバーはカラオケで歌うぞ
630デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/28(月) 18:29:52.50ID:jKre83rL0631デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/28(月) 18:47:34.87ID:2Ad/srHwa 横からだけど
For ...
Dim D As New Dictionary
...
Next
ってやると最初の一回しかNewしないから常に
Dim D As Dictionary: Set D = New Dictionary
ってやる人はいるみたい
For ...
Dim D As New Dictionary
...
Next
ってやると最初の一回しかNewしないから常に
Dim D As Dictionary: Set D = New Dictionary
ってやる人はいるみたい
632デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/28(月) 18:55:38.23ID:jKre83rL0 >>631
いやいや、ループでそれぞれ別インスタンスとして使うにしても、定義は1回でNewするのが複数回で済むでしょ。
例えば上のレスのようにDictionaryにDictionaryを格納する場合でもDictionaryにしまった時点で参照は渡されるんだから消えないし、
その後、Newしてまた渡してやればインスタンスはまた別物として扱われるよね。
いやいや、ループでそれぞれ別インスタンスとして使うにしても、定義は1回でNewするのが複数回で済むでしょ。
例えば上のレスのようにDictionaryにDictionaryを格納する場合でもDictionaryにしまった時点で参照は渡されるんだから消えないし、
その後、Newしてまた渡してやればインスタンスはまた別物として扱われるよね。
633デフォルトの名無しさん (ワッチョイ 79ac-+/qe)
2022/03/28(月) 19:07:54.06ID:AcTRGxgL0 コードで語ればいいのに
634デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/28(月) 19:46:09.16ID:W5FkPi4A0 >>630
知らなかっただけじゃないか
知らなかっただけじゃないか
635デフォルトの名無しさん (ワッチョイ 924f-XwpL)
2022/03/28(月) 19:46:21.63ID:jKre83rL0 >>633
Sub hoge()
Dim dic1 As Scripting.Dictionary
Dim dic2 As Scripting.Dictionary
Dim itemCounter As Long
Set dic1 = New Scripting.Dictionary
For itemCounter = 0 To 3
Set dic2 = New Scripting.Dictionary
dic2.Add 0, "fuga" & CStr(itemCounter)
dic1.Add itemCounter, dic2
Next
For itemCounter = 0 To 3
Debug.Print dic1(itemCounter)(0)
Next
End Sub
出力結果:
fuga0
fuga1
fuga2
fuga3
dic1の中にdic2を入れてるけど、dic2の変数自体は使いまわし。
dic2はループの中でNewされているけど、dic1の中にそのときの
dic2の参照情報が格納されているため、きちんと別の値が保持される。
つまりはそういうこと。
Sub hoge()
Dim dic1 As Scripting.Dictionary
Dim dic2 As Scripting.Dictionary
Dim itemCounter As Long
Set dic1 = New Scripting.Dictionary
For itemCounter = 0 To 3
Set dic2 = New Scripting.Dictionary
dic2.Add 0, "fuga" & CStr(itemCounter)
dic1.Add itemCounter, dic2
Next
For itemCounter = 0 To 3
Debug.Print dic1(itemCounter)(0)
Next
End Sub
出力結果:
fuga0
fuga1
fuga2
fuga3
dic1の中にdic2を入れてるけど、dic2の変数自体は使いまわし。
dic2はループの中でNewされているけど、dic1の中にそのときの
dic2の参照情報が格納されているため、きちんと別の値が保持される。
つまりはそういうこと。
636デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/28(月) 19:51:37.75ID:BH9MBdK/a ↑ こいつは一体何を説明してるんだろう…
637デフォルトの名無しさん (ワッチョイ 61da-CM16)
2022/03/28(月) 19:53:39.70ID:nzzJclxc0 みんな教え方バラバラだから質問者が困ってるよー
638デフォルトの名無しさん (ササクッテロラ Sp79-JoQ9)
2022/03/28(月) 20:06:46.75ID:GBAIeVpDp >>636
分からないならすっこんでればいいんじゃないかな
分からないならすっこんでればいいんじゃないかな
639デフォルトの名無しさん (スププ Sdb2-9QKR)
2022/03/28(月) 20:07:19.86ID:jdteRYNZd 実務ではよくある話
640デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/28(月) 21:12:23.25ID:DlrSWjY+a641デフォルトの名無しさん (アウアウウー Sacd-+Ivz)
2022/03/29(火) 00:49:06.48ID:zHBdUnr/a >>638
うるさい、だまってればいいんじゃないかな
うるさい、だまってればいいんじゃないかな
642デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 01:38:58.63ID:YOHlvasK0 まあ、知らなかっただけって可能性が高いんだが
DimでNewしてるオブジェクト変数はNothingにできないって罠があるからな
そして今更だが、VBAにDictionaryはないぞ、と
DimでNewしてるオブジェクト変数はNothingにできないって罠があるからな
そして今更だが、VBAにDictionaryはないぞ、と
643デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/29(火) 06:28:42.33ID:z3WwGups0 >>642
nothingに出来ないってどういう事だ?
以下のコード、間違えてるんだろうか
Sub foo()
Dim a As New Collection
Set a = Nothing
End Sub
nothingに出来ないってどういう事だ?
以下のコード、間違えてるんだろうか
Sub foo()
Dim a As New Collection
Set a = Nothing
End Sub
644デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/29(火) 07:06:07.15ID:YJRadFF90645デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/29(火) 07:24:06.81ID:Nk63wsBAa それをNothingにできないと言うか?
646デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/29(火) 07:25:09.72ID:z3WwGups0647デフォルトの名無しさん (テテンテンテン MM96-tbOq)
2022/03/29(火) 08:16:28.05ID:JuGZiW1lM dictionaryって連想配列だろ
VBA的にはマスタの代わりか、重複を避けて集計するぐらいしか使わないイメージ
だからここで問題にされてることってどうでもいい気もするけどなw
>>602
お前の質問に答えられるレベルに人はここにはいないだろw
海外のサイトで質問するほうがいいよ
VBA的にはマスタの代わりか、重複を避けて集計するぐらいしか使わないイメージ
だからここで問題にされてることってどうでもいい気もするけどなw
>>602
お前の質問に答えられるレベルに人はここにはいないだろw
海外のサイトで質問するほうがいいよ
648デフォルトの名無しさん (ワッチョイ 0dce-+Ivz)
2022/03/29(火) 08:48:32.13ID:ZoTD6ZCz0 そもそもVBAのオブジェクト型は参照カウンタ方式だから、Nothingの代入はオブジェクトの破棄じゃないし
破棄の予約とでも言えばいいのかな
システムは予約が入ってるかどうか定期的にチェックして、可能なら破棄する
実際に破棄するタイミングはシステムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
ところで破棄のアルゴリズムって公開されてる?
あるいは誰かが解析した資料がどっかにある?
破棄の予約とでも言えばいいのかな
システムは予約が入ってるかどうか定期的にチェックして、可能なら破棄する
実際に破棄するタイミングはシステムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
ところで破棄のアルゴリズムって公開されてる?
あるいは誰かが解析した資料がどっかにある?
649デフォルトの名無しさん (ラクッペペ MM96-gZpx)
2022/03/29(火) 08:57:03.34ID:91VKkhT6M カウントゼロで破棄だろ
説明するまでもない
説明するまでもない
650デフォルトの名無しさん (スッップ Sdb2-nQMq)
2022/03/29(火) 08:58:53.63ID:TzrFOdrRd651デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/29(火) 10:42:09.75ID:YJRadFF90 この辺、VB.Netとかの他言語でCOMオブジェクトの解放とかやってないと想像つきにくいよね。
そういうの知ってても面倒くさいし、サーバーサイドでEXCEL自体ないこともあるから
あの手この手で別の方法使ってEXCELの更新行おうとするよね。
そういうの知ってても面倒くさいし、サーバーサイドでEXCEL自体ないこともあるから
あの手この手で別の方法使ってEXCELの更新行おうとするよね。
652デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 11:13:32.55ID:DZfi33jJd 想像というよりやるべき作法をわからずに適当に作るからでは
使ったら解放するものは何か理解していれば間違えないでしょ
適当にここでNothingすればいいやとか思ってるから問題がおきてしまう
使ったら解放するものは何か理解していれば間違えないでしょ
適当にここでNothingすればいいやとか思ってるから問題がおきてしまう
653デフォルトの名無しさん (ブーイモ MMad-nQMq)
2022/03/29(火) 11:35:23.69ID:4eDRgxgoM654デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 12:59:23.02ID:YOHlvasK0 >>643
Set a = Nothing
のあとに
MsgBox (a Is Nothing)
とかやってみ
問題にしてるのはオブジェクト変数をNothingにできないことで
つまり
Set obj = Checkobj()
If obj Is Nothing Then
みたいなコードがバグるってことなんだが
>>648
インスタンスの解放とか問題にしてないが
破棄の予約ってなんなんだよ
Nothingの代入は単に参照カウンタを減らすだけだぞ
結果カウントゼロなら廃棄される
.Netじゃないし、VBAで
>システムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
なんてことはないはず
Set a = Nothing
のあとに
MsgBox (a Is Nothing)
とかやってみ
問題にしてるのはオブジェクト変数をNothingにできないことで
つまり
Set obj = Checkobj()
If obj Is Nothing Then
みたいなコードがバグるってことなんだが
>>648
インスタンスの解放とか問題にしてないが
破棄の予約ってなんなんだよ
Nothingの代入は単に参照カウンタを減らすだけだぞ
結果カウントゼロなら廃棄される
.Netじゃないし、VBAで
>システムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
なんてことはないはず
655デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/29(火) 13:35:16.03ID:oJxqSb9ha656デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 13:45:44.59ID:YOHlvasK0657デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 13:49:11.35ID:DZfi33jJd >>654
バグるんではなく自分でバグらせてるだけでしょ
Dimで変数を宣言する際にNewを付与するとヘルプのこちらの記載
「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの
新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を
割り当てる必要がなくなります。」
にある通り変数を参照する限りはNothingにすることはできない
(デバッグで変数を参照してしまっても同様)
変数がNothingか判定したいなら素直に宣言の際はNewを使わなければいいだけ
Newをどういうときに使うとコーディング上効果的かわからない、他人が理解できないかもしれないなら使わないほうがいい
バグるんではなく自分でバグらせてるだけでしょ
Dimで変数を宣言する際にNewを付与するとヘルプのこちらの記載
「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの
新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を
割り当てる必要がなくなります。」
にある通り変数を参照する限りはNothingにすることはできない
(デバッグで変数を参照してしまっても同様)
変数がNothingか判定したいなら素直に宣言の際はNewを使わなければいいだけ
Newをどういうときに使うとコーディング上効果的かわからない、他人が理解できないかもしれないなら使わないほうがいい
658デフォルトの名無しさん (スップ Sd12-+Ivz)
2022/03/29(火) 13:53:26.54ID:/B8eDHF6d659デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/29(火) 14:15:22.73ID:YJRadFF90 でもこれ、ちょっと怖いよね
Dimの宣言時にNewしてやると、Nothingにしたら次触るとき、インスタンスが設定されていなければ
勝手に新しいインスタンスを設定するなんて
知らなかったら分岐に Is Nothingとか使いそうだし、知ってたら知ってたでSet 〜 As New 〜の代わりに使って、知ってる人じゃなければ分からないような属人化コードわざと書いたり出来るってことだもんね。
.Netとかでも同じような挙動をするのかな?
Dimの宣言時にNewしてやると、Nothingにしたら次触るとき、インスタンスが設定されていなければ
勝手に新しいインスタンスを設定するなんて
知らなかったら分岐に Is Nothingとか使いそうだし、知ってたら知ってたでSet 〜 As New 〜の代わりに使って、知ってる人じゃなければ分からないような属人化コードわざと書いたり出来るってことだもんね。
.Netとかでも同じような挙動をするのかな?
660デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 14:49:39.05ID:DZfi33jJd 怖いもなにもヘルプに書いてあることを理解せずに伝えたりそれを聞きかじっただけでやるからでしょ
質問する側も答える側も一部分だけのやり取りしてるのを踏まえて会話しないと事故のもとだよ
まあ事故るのは質問する側だけなんで答える側はそこまで保証できないが
質問する側も答える側も一部分だけのやり取りしてるのを踏まえて会話しないと事故のもとだよ
まあ事故るのは質問する側だけなんで答える側はそこまで保証できないが
661デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/29(火) 15:00:51.71ID:5Hfxlu6fa >>657
> 「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を割り当てる必要がなくなります。」
から
> 変数を参照する限りはNothingにすることはできない
と言うのは飛躍しすぎ
問題はそっちじゃなくて
> 「必ずオブジェクトが存在することが保証される (Nothing を設定してオブジェクトが破棄されたとしても、オブジェクト変数を再利用しようとすると、再作成される)」
の方な
ただ個人的には上記の文で「オブジェクトが破棄されたとして」のくだりは余計だと思う
複数から参照されてたらオブジェクト自体は破棄されないから
> 「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を割り当てる必要がなくなります。」
から
> 変数を参照する限りはNothingにすることはできない
と言うのは飛躍しすぎ
問題はそっちじゃなくて
> 「必ずオブジェクトが存在することが保証される (Nothing を設定してオブジェクトが破棄されたとしても、オブジェクト変数を再利用しようとすると、再作成される)」
の方な
ただ個人的には上記の文で「オブジェクトが破棄されたとして」のくだりは余計だと思う
複数から参照されてたらオブジェクト自体は破棄されないから
662デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 15:09:04.14ID:DZfi33jJd Nothingしてもその後に”変数を参照した”らNothingが再作成されたインスタンスに変わるんだからできないと一緒じゃない?
それと変数とオブジェクトを一緒に考えてないか?
自分は
Dim A As Object
Dim B As Object
Set A = XXX
Set B = A
Set A = Nothing
この場合のAの話をしていてXXXで作成したインスタンスの話はしてないよ
それと変数とオブジェクトを一緒に考えてないか?
自分は
Dim A As Object
Dim B As Object
Set A = XXX
Set B = A
Set A = Nothing
この場合のAの話をしていてXXXで作成したインスタンスの話はしてないよ
663デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 15:12:01.06ID:DZfi33jJd まあどうでもいい話だった無視してくれ
すまん
すまん
664デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 15:23:41.67ID:YOHlvasK0 >>657
元の話はなぜDimでNewしないって話だから
バグのもとだからやめといたほうが良いという、理由の可能性の一つを挙げてるだけだが
実際知っててもミスることはあるし、しらないとデバッグが困難だからな
元の話はなぜDimでNewしないって話だから
バグのもとだからやめといたほうが良いという、理由の可能性の一つを挙げてるだけだが
実際知っててもミスることはあるし、しらないとデバッグが困難だからな
665デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/29(火) 15:30:09.53ID:9zoeUatEa666デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 15:31:19.17ID:YOHlvasK0667デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/03/29(火) 15:54:16.92ID:ffasCIjOa668デフォルトの名無しさん (ワッチョイ 55d3-Q6Rq)
2022/03/29(火) 18:10:12.28ID:OyTS9aq30 列ではなく、選択した箇所だけを固定したいのですが出来ませんか?
669デフォルトの名無しさん (ワッチョイ 0dce-+Ivz)
2022/03/29(火) 18:32:44.42ID:ZoTD6ZCz0670デフォルトの名無しさん (スップ Sdb2-Slbg)
2022/03/29(火) 18:52:31.36ID:DZfi33jJd 各自が想定してるコードが違うんだから言葉遊びにすぎないよ
自分のレスもいまいちだったかもしれんがNothingをセットして終了するならNothingかもしれないが
後続のコードにIs Nothingなり変数の参照があるならそれは結果的にNothingではなくなるのと一緒と自分は思ってるだけ
例に出して申し訳ないが
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
これとかね
自分なりの結論は宣言時にNewは使わないほうが無難
自分のレスもいまいちだったかもしれんがNothingをセットして終了するならNothingかもしれないが
後続のコードにIs Nothingなり変数の参照があるならそれは結果的にNothingではなくなるのと一緒と自分は思ってるだけ
例に出して申し訳ないが
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
これとかね
自分なりの結論は宣言時にNewは使わないほうが無難
671デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/29(火) 19:12:31.97ID:YOHlvasK0 >代入すればNothingになる
>その次にアクセスすると、またそのタイミングで自動的にNewされる
厳密にはその通り
そんなことは分かったうえで、それをコード上で確認できないから
Nothingにならない と表現したわけで、その表現が間違いらしいですわ
(VBAコードから)オブジェクト変数をNothingとして評価できない
すべての個所をそう読み替えといてくれ
飽きたし俺はこの話はもうこれで終わり
>その次にアクセスすると、またそのタイミングで自動的にNewされる
厳密にはその通り
そんなことは分かったうえで、それをコード上で確認できないから
Nothingにならない と表現したわけで、その表現が間違いらしいですわ
(VBAコードから)オブジェクト変数をNothingとして評価できない
すべての個所をそう読み替えといてくれ
飽きたし俺はこの話はもうこれで終わり
672デフォルトの名無しさん (ワッチョイ 924f-JoQ9)
2022/03/29(火) 19:15:45.64ID:YJRadFF90 まぁ>>670の言う通り言葉遊びだよね
みんな実際の挙動は理解しての会話になってるみたいだし
みんな実際の挙動は理解しての会話になってるみたいだし
673デフォルトの名無しさん (ワッチョイ b5e6-gZpx)
2022/03/29(火) 19:19:18.21ID:y+mxjJK80 まあオレは今まで知らなかったけどな!
674デフォルトの名無しさん (ワッチョイ 655f-ObPs)
2022/03/29(火) 19:32:15.47ID:/IcSX3Pk0 >>644
おれ以外にもthom先生見てる人いたか
おれ以外にもthom先生見てる人いたか
675デフォルトの名無しさん (ブーイモ MMa6-+Ivz)
2022/03/29(火) 20:35:52.45ID:TgcL8J/yM どう見ても最初はわかってなかったやろ
最後にやっと理解できたみたいだけど
最後にやっと理解できたみたいだけど
676デフォルトの名無しさん (ワッチョイ 9202-dpz8)
2022/03/29(火) 21:25:13.63ID:YV5lTWI/0 人に優しく行きましょう
それは分かる人に与えられた特権なのです
それは分かる人に与えられた特権なのです
677デフォルトの名無しさん (ワッチョイ 655f-ObPs)
2022/03/30(水) 05:40:49.56ID:bXpTryOw0 人生は優しくなるためにある
678デフォルトの名無しさん (ラクッペペ MM96-48vY)
2022/03/30(水) 08:23:09.21ID:0ps204vGM スマホ手打ちなので誤字等ありましたらすみませんがよろしくお願いします。
rangeを用いた範囲指定でcells(row,columns)の行、列の部分に端数切り上げで数式を入れたいと考えています。
vbaで roundupを用いる時はworksheetfunction.をつける必要があることをネットで知ったのですが、ページによって頭にapplication.をつけてるものとそうでないものが混在しました。有無によってどのような違いがあるのか教えてください。
rangeを用いた範囲指定でcells(row,columns)の行、列の部分に端数切り上げで数式を入れたいと考えています。
vbaで roundupを用いる時はworksheetfunction.をつける必要があることをネットで知ったのですが、ページによって頭にapplication.をつけてるものとそうでないものが混在しました。有無によってどのような違いがあるのか教えてください。
679デフォルトの名無しさん (スッップ Sdb2-Slbg)
2022/03/30(水) 08:47:30.52ID:06EhkzBAd 数式を入れるのかワークシート関数を使って値をいれたいのかよくわからないけど
後半の質問であればVBA上では動作に違いはないよ
「https://docs.microsoft.com/ja-jp/office/vba/api/excel.application(object)」の
「アクティブ セル (ActiveCell プロパティ) など、最も一般的なユーザーインターフェイス オブジェクトを返すプロパティとメソッドのほとんどは、Application オブジェクト修飾子を指定しないで使用できます。」
と書いてある通り
こういう質問する前にヘルプを見ると知りたい事や知っておいたいいことが書いてる場合もあるし怪しい回答の知識を覚えなくて済むから見る癖つけたほうがいいぞ
後半の質問であればVBA上では動作に違いはないよ
「https://docs.microsoft.com/ja-jp/office/vba/api/excel.application(object)」の
「アクティブ セル (ActiveCell プロパティ) など、最も一般的なユーザーインターフェイス オブジェクトを返すプロパティとメソッドのほとんどは、Application オブジェクト修飾子を指定しないで使用できます。」
と書いてある通り
こういう質問する前にヘルプを見ると知りたい事や知っておいたいいことが書いてる場合もあるし怪しい回答の知識を覚えなくて済むから見る癖つけたほうがいいぞ
680デフォルトの名無しさん (ラクッペペ MM96-48vY)
2022/03/30(水) 08:54:37.31ID:6Q6BE8PxM >679
ありがとう、参考にします。
ありがとう、参考にします。
681デフォルトの名無しさん (オッペケ Sr79-+/qe)
2022/03/30(水) 09:15:22.27ID:p8/VPuFXr いえいえ
682デフォルトの名無しさん (ワッチョイ 9eda-Gt7H)
2022/03/30(水) 10:25:12.15ID:otm0Hfbh0 実際に組んでみてうまく行かない場合に調べるとか質問とかしたらいいと思う
683デフォルトの名無しさん (ワッチョイ 69f0-c/bJ)
2022/03/30(水) 10:38:48.27ID:xL2+oAob0 ちょっと教えてください
複数のシートを一緒にスクロールして
常に同じ位置に同じ行列が表示させられるような移動方法ってありますか?
例)
シート1〜シート10までをグループ化して
シート1をスクロールして1000行目を頭に表示すると
残りのシート2〜シート10も同じように1000行目を表示している
よろしくお願いします
複数のシートを一緒にスクロールして
常に同じ位置に同じ行列が表示させられるような移動方法ってありますか?
例)
シート1〜シート10までをグループ化して
シート1をスクロールして1000行目を頭に表示すると
残りのシート2〜シート10も同じように1000行目を表示している
よろしくお願いします
684デフォルトの名無しさん (ワッチョイ 6e7c-O0kb)
2022/03/30(水) 14:07:54.57ID:4QxrGADI0 裸の王様がやってきた やってきた やってきたぞ
685デフォルトの名無しさん (ワッチョイ 552f-XwpL)
2022/03/30(水) 19:23:16.04ID:QNA9H61R0 >>683
いったんアクティブにしていいなら
Application.GotoとかWindow.ScrollIntoViewとかで表示位置は変えられるけど
まあ使い物にならない可能性が高いな
アクティブじゃないシートのスクロール位置を変える方法があるなら俺も知りたい
それかWindow10個作って同時にスクロールにするとか
いったんアクティブにしていいなら
Application.GotoとかWindow.ScrollIntoViewとかで表示位置は変えられるけど
まあ使い物にならない可能性が高いな
アクティブじゃないシートのスクロール位置を変える方法があるなら俺も知りたい
それかWindow10個作って同時にスクロールにするとか
686デフォルトの名無しさん (ワッチョイ 1242-PYYx)
2022/03/30(水) 19:31:25.53ID:ljpoek3c0 複数のシートのデータを纏めたシートを作ったらどうかな
687デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/30(水) 19:32:55.87ID:2JfZorGz0 スクロールのイベントってないんか
クリックしたセルを同じにするマクロ
なんじゃこりゃ
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet1" Then
Sheets("sheet2").Select
Sheets("sheet2").Cells(Target.Row, Target.Column).Select
Sheets("sheet3").Select
Sheets("sheet3").Cells(Target.Row, Target.Column).Select
Sheets("sheet1").Select
End If
End Sub
クリックしたセルを同じにするマクロ
なんじゃこりゃ
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet1" Then
Sheets("sheet2").Select
Sheets("sheet2").Cells(Target.Row, Target.Column).Select
Sheets("sheet3").Select
Sheets("sheet3").Cells(Target.Row, Target.Column).Select
Sheets("sheet1").Select
End If
End Sub
688デフォルトの名無しさん (ワッチョイ 5e8e-/mVJ)
2022/03/30(水) 19:47:16.20ID:R9seM6Mc0 馬鹿が考えた操作なんて実装しても、所詮馬鹿の馬鹿な発想でしかない
689デフォルトの名無しさん (ワッチョイ a901-uHCF)
2022/03/30(水) 22:06:13.73ID:wN+Ljz7f0 >>687
フォーム内のスクロールバーはイベント取得できるぽい
そういうのでいいならフォーム内スクロールバーに従ってシートをスクロールさせることはできそう
もしくはシート1のスクロールを監視して自分でイベント発行するか
フォーム内のスクロールバーはイベント取得できるぽい
そういうのでいいならフォーム内スクロールバーに従ってシートをスクロールさせることはできそう
もしくはシート1のスクロールを監視して自分でイベント発行するか
690デフォルトの名無しさん (ワッチョイ 9202-dpz8)
2022/03/30(水) 22:25:38.10ID:N270RWsC0 彼女の下のお口から出る糸を、シート(She糸)と呼びます
691デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/03/30(水) 22:25:54.14ID:2JfZorGz0 >>689
逆にスクロールを実装すればよかったのね
下スクロールを実装したら期待通りの動きになったわ
Sub Macro4()
' Keyboard Shortcut: Ctrl+Shift+P
Windows("Book1 - 1").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 2").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 3").Activate
ActiveWindow.SmallScroll Down:=30
End Sub
逆にスクロールを実装すればよかったのね
下スクロールを実装したら期待通りの動きになったわ
Sub Macro4()
' Keyboard Shortcut: Ctrl+Shift+P
Windows("Book1 - 1").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 2").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 3").Activate
ActiveWindow.SmallScroll Down:=30
End Sub
692デフォルトの名無しさん (ブーイモ MMa6-+Ivz)
2022/03/31(木) 04:24:20.35ID:YoVJ22V0M 糸を出す女ってスパイダーガールか
693デフォルトの名無しさん (ブーイモ MM96-/MGz)
2022/04/01(金) 07:19:21.13ID:fdMR9HVCM 宗教的な話題になりそうだけど、If文で判定入れてそれ以外の場合は何もしないって処理の時、elseを省く?それとも何も処理をしないって明示するためにelseの中に何も書かない?
694デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/04/01(金) 08:08:06.08ID:AJ0kjIG/a 俺は省く
逆に Select Case の Case Else は必ずつけて何もしなくていいことを明示するコメントを書いておく
逆に Select Case の Case Else は必ずつけて何もしなくていいことを明示するコメントを書いておく
695デフォルトの名無しさん (ワッチョイ f568-+Ivz)
2022/04/01(金) 08:13:36.66ID:YZ/4IsUH0 こういう書き方ってどうにかしてうまくまとめる方法はありますか?
if C=1 then
if B=1 then
if A=1 then
msgbox "メイン処理を実行します"
else
msgbox "A=1じゃなかったので実行しなかった"
else
msgbox "B=1じゃなかったので実行しなかった"
else
msgbox "C=1じゃなかったので実行しなかった"
if C=1 then
if B=1 then
if A=1 then
msgbox "メイン処理を実行します"
else
msgbox "A=1じゃなかったので実行しなかった"
else
msgbox "B=1じゃなかったので実行しなかった"
else
msgbox "C=1じゃなかったので実行しなかった"
696デフォルトの名無しさん (アウアウウー Sacd-1WDX)
2022/04/01(金) 08:33:32.40ID:cX1o4aeta >>695
If C <> 1 Then
msgbox "C=1じゃなかったので実行しなかった"
Goto Skip
End If
If B <> 1 Then
msgbox "B=1じゃなかったので実行しなかった"
Goto Skip
End If
If A <> 1 Then
msgbox "A=1じゃなかったので実行しなかった"
Goto Skip
End If
msgbox "メイン処理を実行します"
Skip:
Goto 嫌なら Sub に入れて Return とか
If C <> 1 Then
msgbox "C=1じゃなかったので実行しなかった"
Goto Skip
End If
If B <> 1 Then
msgbox "B=1じゃなかったので実行しなかった"
Goto Skip
End If
If A <> 1 Then
msgbox "A=1じゃなかったので実行しなかった"
Goto Skip
End If
msgbox "メイン処理を実行します"
Skip:
Goto 嫌なら Sub に入れて Return とか
697デフォルトの名無しさん (ワッチョイ a901-uHCF)
2022/04/01(金) 09:19:19.95ID:qbFmdfWP0 >>695
ネスト深くなるとわかりにくい
処理は簡単な単位でまとめたほうがいい
実行する/しないは一つの単位(success/errorのように)としてまとめたほうがいい
拒否理由="なし"
if c<>1 then 拒否理由="cじゃない"
else if b<>1 then 拒否理由="bじゃない"
else if a<>1 then 拒否理由="aじゃない"
if 拒否理由="なし"
メイン処理
else
msgbox 拒否理由&"ので実行しません"
ネスト深くなるとわかりにくい
処理は簡単な単位でまとめたほうがいい
実行する/しないは一つの単位(success/errorのように)としてまとめたほうがいい
拒否理由="なし"
if c<>1 then 拒否理由="cじゃない"
else if b<>1 then 拒否理由="bじゃない"
else if a<>1 then 拒否理由="aじゃない"
if 拒否理由="なし"
メイン処理
else
msgbox 拒否理由&"ので実行しません"
698デフォルトの名無しさん (ワッチョイ 9eda-c/bJ)
2022/04/01(金) 19:02:13.39ID:qNIRpAbL0 わかりにくいってだけで正常に動作しているならコメントでも書いとけばいいんじゃね
699デフォルトの名無しさん (ラクッペペ MM96-gZpx)
2022/04/01(金) 19:04:18.25ID:iXF+QXI0M >>696
do loop 0でブレイク
do loop 0でブレイク
700デフォルトの名無しさん (ワッチョイ 2d5f-5wp0)
2022/04/02(土) 10:46:13.39ID:fjGlq1dk0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 日本、G7への中国招待を懸念 議長国フランスに慎重な対応要請 [どどん★]
- カップスタ〜食べたその日から〜味の虜に〜虜になりました!
- 歳を取ったらゲーム出来なくなる問題、解決方法なし
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- ハートチップルの袋の柄のパンツとかカーテン
- ひまだねー
- 『エアジョーダンのゲン』にありがちなこと
