!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:I0u44nFvd610デフォルトの名無しさん (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:fjGlq1dk0701デフォルトの名無しさん (アウアウウー Sae9-ukBL)
2022/04/02(土) 12:32:39.80ID:wbru5aYXa VBA の Select Case は Case 節に式が書けるから素直に
Select Case True
Case C <> 1
msgbox "C=1じゃなかったので実行しなかった"
Case B <> 1
msgbox "B=1じゃなかったので実行しなかった"
Case A <> 1
msgbox "A=1じゃなかったので実行しなかった"
Case Else
msgbox "メイン処理を実行します"
End Select
がわかりやすいかな
Select Case True
Case C <> 1
msgbox "C=1じゃなかったので実行しなかった"
Case B <> 1
msgbox "B=1じゃなかったので実行しなかった"
Case A <> 1
msgbox "A=1じゃなかったので実行しなかった"
Case Else
msgbox "メイン処理を実行します"
End Select
がわかりやすいかな
702デフォルトの名無しさん (ササクッテロラ Sp01-a6kw)
2022/04/02(土) 13:02:04.64ID:ZSAOoecqp703デフォルトの名無しさん (ワッチョイ cbda-91fs)
2022/04/02(土) 19:50:51.52ID:xmwnc1Js0 複数の条件が成り立つ場合の優先度とか気にせんと・・・
704デフォルトの名無しさん (アウアウウー Sae9-ukBL)
2022/04/02(土) 20:08:08.57ID:rQp/oHNqa >>703
なんでドキュメント読まないの?
複数の Case 句の expressionlist 式に一致する場合は、最初に一致した句に続くステートメントのみが実行されます。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement
なんでドキュメント読まないの?
複数の Case 句の expressionlist 式に一致する場合は、最初に一致した句に続くステートメントのみが実行されます。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement
705デフォルトの名無しさん (ワッチョイ 4be6-4iMi)
2022/04/03(日) 00:02:19.90ID:ZgXClf4M0 A=1かつB=1かつC=1だったらXが実行されるって言う事ではないのね
なんかややこしいね(´・ω・`)
なんかややこしいね(´・ω・`)
706デフォルトの名無しさん (ワッチョイ 5dce-fe9w)
2022/04/03(日) 03:01:36.86ID:J74pUyNp0 俺は中身が1行の時はCaseを1行にまとめる派
Sub Macro()
Select Case True
Case C <> 1: errmsg ("C")
Case B <> 1: errmsg ("B")
Case A <> 1: errmsg ("A")
Case Else: MsgBox "メイン処理を実行します"
End Select
End Sub
Sub errmsg(s$)
MsgBox s & "=1じゃなかったので実行しなかった"
End Sub
Sub Macro()
Select Case True
Case C <> 1: errmsg ("C")
Case B <> 1: errmsg ("B")
Case A <> 1: errmsg ("A")
Case Else: MsgBox "メイン処理を実行します"
End Select
End Sub
Sub errmsg(s$)
MsgBox s & "=1じゃなかったので実行しなかった"
End Sub
707デフォルトの名無しさん (アウアウウー Sae9-ukBL)
2022/04/03(日) 06:50:49.06ID:o4u0MtXma >>706
errmsg の呼出時の括弧は要らないのでは?
errmsg の呼出時の括弧は要らないのでは?
708デフォルトの名無しさん (ワッチョイ 0d68-fe9w)
2022/04/03(日) 07:52:44.68ID:6Vj/pyuu0 >>706
こういうふうにはしないほうが良い?
Sub Macro()
Select Case True
Case C <> 1: msg ="C"
Case B <> 1: msg ="B"
Case A <> 1: msg ="A"
Case Else: msg= "メイン処理を実行します"
End Select
End Sub
msgbox(msg)
こういうふうにはしないほうが良い?
Sub Macro()
Select Case True
Case C <> 1: msg ="C"
Case B <> 1: msg ="B"
Case A <> 1: msg ="A"
Case Else: msg= "メイン処理を実行します"
End Select
End Sub
msgbox(msg)
709デフォルトの名無しさん (ブーイモ MM79-2Qsg)
2022/04/03(日) 08:39:48.32ID:D1zTFGCZM そうやって本筋じゃない方へ話題は逸れていく
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は [蚤の市★]
- パワフル女性世界3位に高市首相 米誌フォーブス選出 [蚤の市★]
- 【S.RIDE】「忘年会の幹事ずるい」 ソニー系配車アプリの広告が物議…… 運営が謝罪「配慮に欠ける不適切な表現」掲出終了に [ぐれ★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★2 [Hitzeschleier★]
- テレ朝本社から社外スタッフの男性が転落し死亡 テレビ朝日がコメント [ひかり★]
- 【東京】テレ朝本社から社外スタッフの男性が転落し死亡 テレビ朝日がコメント 通行人の男性巻き込まれ軽傷 六本木 [ぐれ★]
- 高市「野党はもう債権とか為替の話はしないで!よく分からないから答えない!」 [884040186]
- Twitter医師ら「死ぬほど勉強して博愛精神求められるとかそらみんな美容外科なるわ。嫌なら普通の医療も保険診療廃止しろ!」 [762037879]
- ホロライブvtuberさん、ソシャゲに登場するも演技力で界隈に衝撃が走る [329329848]
- NISAって優れた制度だけど、やってない人多いよな
- 【悲報】教育ママ「ギャオオオオオン!息子が大麻吸ってるのお!!」⇨中3の息子を警察に突き出し全てを終わらせる [455031798]
- 「サトウのごはん」営業利益+220%、経常利益+205%、純利益+261% [256556981]
