Excel VBA 質問スレ Part75

■ このスレッドは過去ログ倉庫に格納されています
2022/02/09(水) 14:24:32.62ID:I0u44nFvd
!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
2022/03/27(日) 12:19:46.20ID:CPBl4WFea
>>599
まあ高々数十行位なら気にすることはないよ
602デフォルトの名無しさん (ワッチョイ adcc-tbOq)
垢版 |
2022/03/27(日) 12:41:21.31ID:cPay0R1J0
誰かSalseforceのAPIをVBAでたたく方法わかる人いませんか?
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、
2022/03/27(日) 12:52:04.46ID:dAzXJbreM
字下げや改行なんてVBAでやることじゃない
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?
2022/03/27(日) 13:07:11.24ID:OVREMJced
文書の整形と文書自体を一緒にしてしまうところが悲しい・・・
2022/03/27(日) 17:11:35.24ID:hNNvtCzu0
なんでよ?VBAの義務教育編で字下げは真っ先に学習するはずじゃ??
2022/03/27(日) 17:22:28.69ID:2Abk94v90
年収1000万のインド人はインデントもコメントもなし
一般人はちゃんとつけよう
2022/03/27(日) 17:30:10.15ID:6akgwO9ga
>>602
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?
2022/03/27(日) 17:33:41.29ID:OVREMJced
>>607
APIは変に教えるとよくないと思うから
それを使って何かするような事をしたいなら正式な仕事なりで発注させるべきだと思うぞ
そもそも何もわかってない奴がここで質問してるのもおかしな話だろ
2022/03/27(日) 17:34:17.13ID:OVREMJced
スクレイピングもたまに質問するやつがいるけど
それも同じな
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
2022/03/27(日) 19:02:58.02ID:jqHr+5yx0
>>600
そうだな
>>597>>595へのレスだ
2022/03/27(日) 19:18:00.28ID:7EXZAGuD0
>>610
VBAのスクレイピングは今だとSelenium使ったChromeのスクレイピングが主流なんじゃなかろうか
バージョン合わせるのが面倒だけど安定してるし
2022/03/27(日) 19:39:07.33ID:2Abk94v90
Seleniumはほんといいね
IEからxpathで・・・ってやってたのがほんとアホらしくなった
2022/03/27(日) 19:43:23.36ID:U13zJWe20
Seleniumは昔インストールしたんだがよくわからず
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな
2022/03/27(日) 19:51:02.70ID:7EXZAGuD0
昔のSeleniumはChromeの方にも拡張機能入れて…とかだった気がするけど今は事前準備も書くのも凄く簡単になってるね
2022/03/27(日) 19:59:57.15ID:2Abk94v90
>>614
100%切り替えた方が良い
ちょっと癖があるけど、cssセレクタ覚えればアホみたいに楽になるぞ
ちなみにXPathはしんどい
617デフォルトの名無しさん (ワッチョイ 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")
とかで出せるかと思ったのですが駄目でした。
2022/03/27(日) 20:19:01.83ID:uW5IEa4H0
set TikuB = dickA("A")
Tikubi("b") = bibibibibi-----
2022/03/27(日) 20:22:07.59ID:EN8vWua40
>>610
For EachなのにIfで条件指定しないのか
2022/03/27(日) 20:29:11.49ID:hNNvtCzu0
乳首エロい
2022/03/27(日) 20:31:09.02ID:BqsGdBXW0
>>617
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?

普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。
2022/03/27(日) 20:33:33.24ID:BqsGdBXW0
おっと、Dictionalyのスペルが違ってるか
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
2022/03/28(月) 01:22:22.67ID:LEJNBveMa
("A")
2022/03/28(月) 02:04:12.07ID:dJWBHkZn0
(:; U: ::)
2022/03/28(月) 07:56:32.13ID:bggr0gZp0
Selenium Webdriver と、
Chrome の拡張機能・Selenium IDE の2種類ある
2022/03/28(月) 07:57:45.06ID:W5FkPi4A0
Selenium Webdriver
2022/03/28(月) 12:34:55.90ID:DkLhkvc4M
ウェブダイバー
2022/03/28(月) 13:29:17.84ID:9Kb03WZY0
ウェブダイバーはカラオケで歌うぞ
2022/03/28(月) 18:29:52.50ID:jKre83rL0
>>623
今更だけど
Dim dicA As New Dictuonary
みたいに普通に1命令で設定しなかったのは何故?
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
ってやる人はいるみたい
2022/03/28(月) 18:55:38.23ID:jKre83rL0
>>631
いやいや、ループでそれぞれ別インスタンスとして使うにしても、定義は1回でNewするのが複数回で済むでしょ。
例えば上のレスのようにDictionaryにDictionaryを格納する場合でもDictionaryにしまった時点で参照は渡されるんだから消えないし、
その後、Newしてまた渡してやればインスタンスはまた別物として扱われるよね。
2022/03/28(月) 19:07:54.06ID:AcTRGxgL0
コードで語ればいいのに
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の参照情報が格納されているため、きちんと別の値が保持される。
つまりはそういうこと。
2022/03/28(月) 19:51:37.75ID:BH9MBdK/a
↑ こいつは一体何を説明してるんだろう…
2022/03/28(月) 19:53:39.70ID:nzzJclxc0
みんな教え方バラバラだから質問者が困ってるよー
2022/03/28(月) 20:06:46.75ID:GBAIeVpDp
>>636
分からないならすっこんでればいいんじゃないかな
2022/03/28(月) 20:07:19.86ID:jdteRYNZd
実務ではよくある話
2022/03/28(月) 21:12:23.25ID:DlrSWjY+a
>>637
>>617の質問は解決してるし、>>630
の質問は>>634が一番ありそうだし
困ってる質問者って誰?

>>638
そうだねw
2022/03/29(火) 00:49:06.48ID:zHBdUnr/a
>>638
うるさい、だまってればいいんじゃないかな
2022/03/29(火) 01:38:58.63ID:YOHlvasK0
まあ、知らなかっただけって可能性が高いんだが
DimでNewしてるオブジェクト変数はNothingにできないって罠があるからな

そして今更だが、VBAにDictionaryはないぞ、と
2022/03/29(火) 06:28:42.33ID:z3WwGups0
>>642
nothingに出来ないってどういう事だ?
以下のコード、間違えてるんだろうか

Sub foo()
Dim a As New Collection
Set a = Nothing
End Sub
2022/03/29(火) 07:06:07.15ID:YJRadFF90
>>643
https://thom.hateblo.jp/entry/2016/09/27/221527
2022/03/29(火) 07:24:06.81ID:Nk63wsBAa
それをNothingにできないと言うか?
2022/03/29(火) 07:25:09.72ID:z3WwGups0
>>644
量子論で草
nothingできるけど元に戻る、vbaの狂気を垣間見た気がする
647デフォルトの名無しさん (テテンテンテン MM96-tbOq)
垢版 |
2022/03/29(火) 08:16:28.05ID:JuGZiW1lM
dictionaryって連想配列だろ
VBA的にはマスタの代わりか、重複を避けて集計するぐらいしか使わないイメージ
だからここで問題にされてることってどうでもいい気もするけどなw
>>602
お前の質問に答えられるレベルに人はここにはいないだろw
海外のサイトで質問するほうがいいよ
2022/03/29(火) 08:48:32.13ID:ZoTD6ZCz0
そもそもVBAのオブジェクト型は参照カウンタ方式だから、Nothingの代入はオブジェクトの破棄じゃないし
破棄の予約とでも言えばいいのかな

システムは予約が入ってるかどうか定期的にチェックして、可能なら破棄する
実際に破棄するタイミングはシステムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる

ところで破棄のアルゴリズムって公開されてる?
あるいは誰かが解析した資料がどっかにある?
2022/03/29(火) 08:57:03.34ID:91VKkhT6M
カウントゼロで破棄だろ
説明するまでもない
2022/03/29(火) 08:58:53.63ID:TzrFOdrRd
>>648
トレーシングGCと参照カウントがごっちゃになってるのかな
参照カウントは基本的に参照が外れたら即破棄
2022/03/29(火) 10:42:09.75ID:YJRadFF90
この辺、VB.Netとかの他言語でCOMオブジェクトの解放とかやってないと想像つきにくいよね。
そういうの知ってても面倒くさいし、サーバーサイドでEXCEL自体ないこともあるから
あの手この手で別の方法使ってEXCELの更新行おうとするよね。
2022/03/29(火) 11:13:32.55ID:DZfi33jJd
想像というよりやるべき作法をわからずに適当に作るからでは
使ったら解放するものは何か理解していれば間違えないでしょ
適当にここでNothingすればいいやとか思ってるから問題がおきてしまう
2022/03/29(火) 11:35:23.69ID:4eDRgxgoM
>>602
Salesforce CLIを呼び出してCSV等に出力し、それを読み込めばいい
VBAから直接APIを呼ぶのは自前でパースしなきゃいけなくて面倒だぞ
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で
>システムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
なんてことはないはず
2022/03/29(火) 13:35:16.03ID:oJxqSb9ha
>>654
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
> とかやってみ
>>644のリンク先にも書いてあるけどMsgBox にブレークポイントかけてウオッチウインドで見てみ
Nothing にできないことと、Nothing の時に参照されたら New されると言うのは違う
2022/03/29(火) 13:45:44.59ID:YOHlvasK0
>>655
ああ、そうだな
オブジェクト変数をNothingにできない

(VBAコードから)オブジェクト変数をNothingとして評価できない
に訂正しとくわ
2022/03/29(火) 13:49:11.35ID:DZfi33jJd
>>654
バグるんではなく自分でバグらせてるだけでしょ
Dimで変数を宣言する際にNewを付与するとヘルプのこちらの記載
「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの
新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を
割り当てる必要がなくなります。」
にある通り変数を参照する限りはNothingにすることはできない
(デバッグで変数を参照してしまっても同様)
変数がNothingか判定したいなら素直に宣言の際はNewを使わなければいいだけ
Newをどういうときに使うとコーディング上効果的かわからない、他人が理解できないかもしれないなら使わないほうがいい
2022/03/29(火) 13:53:26.54ID:/B8eDHF6d
>>656
評価って表現もなんかおかしくない?
Nothingになっていることを確認できない、とか
2022/03/29(火) 14:15:22.73ID:YJRadFF90
でもこれ、ちょっと怖いよね
Dimの宣言時にNewしてやると、Nothingにしたら次触るとき、インスタンスが設定されていなければ
勝手に新しいインスタンスを設定するなんて
知らなかったら分岐に Is Nothingとか使いそうだし、知ってたら知ってたでSet 〜 As New 〜の代わりに使って、知ってる人じゃなければ分からないような属人化コードわざと書いたり出来るってことだもんね。

.Netとかでも同じような挙動をするのかな?
2022/03/29(火) 14:49:39.05ID:DZfi33jJd
怖いもなにもヘルプに書いてあることを理解せずに伝えたりそれを聞きかじっただけでやるからでしょ
質問する側も答える側も一部分だけのやり取りしてるのを踏まえて会話しないと事故のもとだよ
まあ事故るのは質問する側だけなんで答える側はそこまで保証できないが
2022/03/29(火) 15:00:51.71ID:5Hfxlu6fa
>>657
> 「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を割り当てる必要がなくなります。」

から

> 変数を参照する限りはNothingにすることはできない

と言うのは飛躍しすぎ

問題はそっちじゃなくて

> 「必ずオブジェクトが存在することが保証される (Nothing を設定してオブジェクトが破棄されたとしても、オブジェクト変数を再利用しようとすると、再作成される)」

の方な

ただ個人的には上記の文で「オブジェクトが破棄されたとして」のくだりは余計だと思う
複数から参照されてたらオブジェクト自体は破棄されないから
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で作成したインスタンスの話はしてないよ
2022/03/29(火) 15:12:01.06ID:DZfi33jJd
まあどうでもいい話だった無視してくれ
すまん
2022/03/29(火) 15:23:41.67ID:YOHlvasK0
>>657
元の話はなぜDimでNewしないって話だから
バグのもとだからやめといたほうが良いという、理由の可能性の一つを挙げてるだけだが

実際知っててもミスることはあるし、しらないとデバッグが困難だからな
2022/03/29(火) 15:30:09.53ID:9zoeUatEa
>>662
混同してるのはお前さんの方
Aは変数でオブジェクトじゃないぞ
2022/03/29(火) 15:31:19.17ID:YOHlvasK0
>>662
まあ、Nothingにできないは厳密には確かに違う。Nothing代入できるし
Nothingにならないって言うほうが正しいな

このコンテキストでその違いが重要か?とは思うが
2022/03/29(火) 15:54:16.92ID:ffasCIjOa
>>666
違いは重要じゃないけど
> Nothingにならないって言うほうが正しいな
と言う明らかな間違いを言い続けるのはどうかと思うぞ… ⇒ >>655
2022/03/29(火) 18:10:12.28ID:OyTS9aq30
列ではなく、選択した箇所だけを固定したいのですが出来ませんか?
2022/03/29(火) 18:32:44.42ID:ZoTD6ZCz0
>>666
違う
代入すればNothingになる
その次にアクセスすると、またそのタイミングで自動的にNewされる
2022/03/29(火) 18:52:31.36ID:DZfi33jJd
各自が想定してるコードが違うんだから言葉遊びにすぎないよ
自分のレスもいまいちだったかもしれんがNothingをセットして終了するならNothingかもしれないが
後続のコードにIs Nothingなり変数の参照があるならそれは結果的にNothingではなくなるのと一緒と自分は思ってるだけ
例に出して申し訳ないが
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
これとかね
自分なりの結論は宣言時にNewは使わないほうが無難
2022/03/29(火) 19:12:31.97ID:YOHlvasK0
>代入すればNothingになる
>その次にアクセスすると、またそのタイミングで自動的にNewされる
厳密にはその通り
そんなことは分かったうえで、それをコード上で確認できないから
Nothingにならない と表現したわけで、その表現が間違いらしいですわ

(VBAコードから)オブジェクト変数をNothingとして評価できない
すべての個所をそう読み替えといてくれ

飽きたし俺はこの話はもうこれで終わり
2022/03/29(火) 19:15:45.64ID:YJRadFF90
まぁ>>670の言う通り言葉遊びだよね
みんな実際の挙動は理解しての会話になってるみたいだし
2022/03/29(火) 19:19:18.21ID:y+mxjJK80
まあオレは今まで知らなかったけどな!
2022/03/29(火) 19:32:15.47ID:/IcSX3Pk0
>>644
おれ以外にもthom先生見てる人いたか
2022/03/29(火) 20:35:52.45ID:TgcL8J/yM
どう見ても最初はわかってなかったやろ
最後にやっと理解できたみたいだけど
2022/03/29(火) 21:25:13.63ID:YV5lTWI/0
人に優しく行きましょう
それは分かる人に与えられた特権なのです
2022/03/30(水) 05:40:49.56ID:bXpTryOw0
人生は優しくなるためにある
2022/03/30(水) 08:23:09.21ID:0ps204vGM
スマホ手打ちなので誤字等ありましたらすみませんがよろしくお願いします。

rangeを用いた範囲指定でcells(row,columns)の行、列の部分に端数切り上げで数式を入れたいと考えています。
vbaで roundupを用いる時はworksheetfunction.をつける必要があることをネットで知ったのですが、ページによって頭にapplication.をつけてるものとそうでないものが混在しました。有無によってどのような違いがあるのか教えてください。
2022/03/30(水) 08:47:30.52ID:06EhkzBAd
数式を入れるのかワークシート関数を使って値をいれたいのかよくわからないけど
後半の質問であればVBA上では動作に違いはないよ
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application(object)」の
「アクティブ セル (ActiveCell プロパティ) など、最も一般的なユーザーインターフェイス オブジェクトを返すプロパティとメソッドのほとんどは、Application オブジェクト修飾子を指定しないで使用できます。」
と書いてある通り
こういう質問する前にヘルプを見ると知りたい事や知っておいたいいことが書いてる場合もあるし怪しい回答の知識を覚えなくて済むから見る癖つけたほうがいいぞ
2022/03/30(水) 08:54:37.31ID:6Q6BE8PxM
>679
ありがとう、参考にします。
2022/03/30(水) 09:15:22.27ID:p8/VPuFXr
いえいえ
682デフォルトの名無しさん (ワッチョイ 9eda-Gt7H)
垢版 |
2022/03/30(水) 10:25:12.15ID:otm0Hfbh0
実際に組んでみてうまく行かない場合に調べるとか質問とかしたらいいと思う
2022/03/30(水) 10:38:48.27ID:xL2+oAob0
ちょっと教えてください
複数のシートを一緒にスクロールして
常に同じ位置に同じ行列が表示させられるような移動方法ってありますか?

例)
シート1〜シート10までをグループ化して
シート1をスクロールして1000行目を頭に表示すると
残りのシート2〜シート10も同じように1000行目を表示している

よろしくお願いします
684デフォルトの名無しさん (ワッチョイ 6e7c-O0kb)
垢版 |
2022/03/30(水) 14:07:54.57ID:4QxrGADI0
裸の王様がやってきた やってきた やってきたぞ
2022/03/30(水) 19:23:16.04ID:QNA9H61R0
>>683
いったんアクティブにしていいなら
Application.GotoとかWindow.ScrollIntoViewとかで表示位置は変えられるけど
まあ使い物にならない可能性が高いな

アクティブじゃないシートのスクロール位置を変える方法があるなら俺も知りたい

それかWindow10個作って同時にスクロールにするとか
2022/03/30(水) 19:31:25.53ID:ljpoek3c0
複数のシートのデータを纏めたシートを作ったらどうかな
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
688デフォルトの名無しさん (ワッチョイ 5e8e-/mVJ)
垢版 |
2022/03/30(水) 19:47:16.20ID:R9seM6Mc0
馬鹿が考えた操作なんて実装しても、所詮馬鹿の馬鹿な発想でしかない
2022/03/30(水) 22:06:13.73ID:wN+Ljz7f0
>>687
フォーム内のスクロールバーはイベント取得できるぽい
そういうのでいいならフォーム内スクロールバーに従ってシートをスクロールさせることはできそう

もしくはシート1のスクロールを監視して自分でイベント発行するか
2022/03/30(水) 22:25:38.10ID:N270RWsC0
彼女の下のお口から出る糸を、シート(She糸)と呼びます
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
2022/03/31(木) 04:24:20.35ID:YoVJ22V0M
糸を出す女ってスパイダーガールか
2022/04/01(金) 07:19:21.13ID:fdMR9HVCM
宗教的な話題になりそうだけど、If文で判定入れてそれ以外の場合は何もしないって処理の時、elseを省く?それとも何も処理をしないって明示するためにelseの中に何も書かない?
2022/04/01(金) 08:08:06.08ID:AJ0kjIG/a
俺は省く
逆に Select Case の Case Else は必ずつけて何もしなくていいことを明示するコメントを書いておく
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じゃなかったので実行しなかった"
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 とか
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 拒否理由&"ので実行しません"
2022/04/01(金) 19:02:13.39ID:qNIRpAbL0
わかりにくいってだけで正常に動作しているならコメントでも書いとけばいいんじゃね
2022/04/01(金) 19:04:18.25ID:iXF+QXI0M
>>696
do loop 0でブレイク
2022/04/02(土) 10:46:13.39ID:fjGlq1dk0
>>697
おれもこんな感じだな
Elseifは好きじゃないからSelectCaseかなあ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況