1 名前:デフォルトの名無しさん [2021/05/25(火) 12:48:01.06 ID:mepUVc/i0.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part70 https://mevius.5ch.net/test/read.cgi/tech/1616072923/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
128 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 13:18:33.33 ID:+aLYn71C0.net] >>126 後段の「何か別のCSVファイルを手動で」は、 ・別のbook(.xlsx)からPowerQueryでのcsv読込み? ・それともcsvファイルをダブルクリックで直接開き? PowerQueryでのcsv読込みなら エンコードを一度自動認識で読み込んでも 後からステップの「ソース」の設定(歯車または詳細エディター)で 固定することも出来るけど・・・
129 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 13:51:45.19 ID:PrzcCeEoH.net] 入力の手間や長くなるのが嫌なら Dim n%, n1%, n2%, n3% で全部Integerになる
130 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 14:28:09.00 ID:w++2yo+P0.net] >>128 済みません、VBAでQueryTableを使ってUTF-8のCSVをシートに読み込んだ後、適当なShift-JISのCSVファイルをダブルクリックして直に開くと 開いたCSVの中の2バイト文字が文字化けしています Excelで開いてるウィンドウを全部閉じてから、CSVを開き直すと文字化けしていません
131 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 15:56:52.45 ID:Ko2adBFs0.net] マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる
132 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 16:25:26.38 ID:eGJ4gYzF0.net] 基礎って何ですか?
133 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 16:45:34.26 ID:QYWEL8gWM.net] >>132 私もそう思いました 基礎って何ですか?
134 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:09:51.31 ID:fW5GrJR10.net] 例えばVBAの基礎と言えば ・モジュールの先頭にはOption Explisit書いて全ての型は明示的に記述すること。 ・行、列を扱うときは使用範囲の最大値を考慮してIntegerでなくLong型で定義すること。 ・モジュール、関数、変数の名称は一見して何を意味しているのか分かるようにつけること。 ・モジュール、メソッド、関数には複数の役割を持たせて作らないこと。 ・基本、ひとつの変数に複数の型のインスタンスを代入する場合、Object型を使わずにインターフェースを作成して代入すること。 ・グローバル変数は使用せず、プロパティを使用すること。 ・VBA上では四捨五入を求めるROUNDは銀行丸めなので必要に応じてWorksheetFunctionのROUNDを使うこと 小数点以下の計算を行う場合、DoubleやSingle型は浮動小数点数扱いでIEEE754準拠のため誤差が発生 することがあることを念頭においておくこと。 まだまだ沢山あるけど 人や会社の厳しさや緩さによって多少は変わるけど こういった最初の内から押さえていないとマズいことだと思う。
135 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:10:33.71 ID:X22osQ9q0.net] >>130 問題が起きないように使えばいいのでは?
136 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:37:56.35 ID:NS39OhGXd.net] >>134 めんどくさいって思ったことないですか?
137 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 22:53:56.98 ID:zpL5HDoS0.net] RowがLongなのはわかるけど、 ColumnはIntegerで足りね?
138 名前:デフォルトの名無しさん [2021/06/05(土) 22:58:04.78 ID:OxA9wcds0.net] WindowsAPIのmciSendString関数を使おうとサンプルコードを見ているのですが、 Callで呼び出さずにrc=と記述されたものばかり見受けられます。 rc=の意味を調べてもなかなか回答が見つからず…これって何なのでしょうか。
139 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:01:50.30 ID:PrzcCeEoH.net] >>138 return code
140 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:05:55.78 ID:+aLYn71C0.net] 1つのbookにシート数44、1シートに1クエリーがあり、 「すべて更新」ボタンでやると部分的にクエリー更新に失敗
141 名前:することが多いため、 一覧表作ってシート名とクエリー名を変数にして For To Next で順番にクエリーを更新していくマクロを組んだ。 それまではちゃんと機能していたものの、シートの改造・追加・並び替えをしたら、 実行時エラー '-2147319767 (80028029)': オートメーション エラーです。 無効な前方参照か、コンパイルされていない種類への参照です。 と、エラーが出て途中で止まったでござる。 検索すると「メモリーの使いすぎ?」みたいな話はヒットするも、よくわからず。 プロジェクトエクスプローラー眺めてて、 「シートの順番入れ替えたりしたので、シート名の順番がぐちゃぐちゃになってるな・・・」 と、各シートのプロパティで、 sheet01 (○○○)、sheet02 (□□□)、sheet03 (△△△)・・・ と直してみたら、今度はエラーも出ず、1発で44クエリーが最後までマクロが実行されてもうた。 Dim tblQ As ListObject ' 対象となるクエリーの変数宣言 Dim ws As String ' sheet名の文字列変数宣言 Dim q As String ' クエリー名の文字列変数宣言 (中略) Set tblQ = ThisWorkbook.Worksheets(ws).ListObjects(q) ←ここで止まった tblQ.QueryTable.Refresh BackgroundQuery:=False としてたのだけど、sheet名がマクロの実行順に並んでいないと、 VBAはwsやqの検索に失敗することがある (特にシート数が多い場合) という理解でいいのかな? [] [ここ壊れてます]
142 名前:デフォルトの名無しさん [2021/06/05(土) 23:06:05.26 ID:HEfJq5i50.net] >>138 その程度の馬鹿頭でWindows APIなんか使うなよ
143 名前:デフォルトの名無しさん [2021/06/05(土) 23:09:38.86 ID:OxA9wcds0.net] >>139 ご回答ありがとうございます! rcという変数に関数を格納する、というのがいまいち理解できません。 Callで関数を呼び出しても問題ないはずですよね?
144 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:22:29.75 ID:fW5GrJR10.net] >>135 問題が起きにくくするようにのための決めごとだよ もっとも、やってる仕事場のプログラマーが歩んできた経験則に大きく左右されたりもするから そこは仕事場ごとのコーディング規約に基づいて組めばいいんじゃないかな。 それはプログラマーのお仕事としての基本になるかな。 >>136 面倒くさいよ。でも他の言語とは比較にならないくらい楽な方だよ。 >>137 またいつシートの行や列が増えないとも限らないじゃん。とある銀行系のところは行や列が増える以前からそんな想定をしてて最初からLong型を使うことがコーディング規約に記載されてたよ。 それにどうせInteger型はLong型を半分マスクしたものだからLong使って処理が遅くなったり容量余計食ったりすることないしね。
145 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 23:35:33.21 ID:NS39OhGXd.net] >>142 乱暴だけどw Functionと一緒だよ。
146 名前:デフォルトの名無しさん [2021/06/06(日) 00:10:56.51 ID:AEt8vzaWM.net] いつものruby馬鹿の自演
147 名前:デフォルトの名無しさん [2021/06/06(日) 01:19:16.01 ID:X88mu3QB0.net] >>144 ありがとうございます!
148 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 02:19:15.47 ID:rqYM4O//d.net] いつものあいつ
149 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 04:32:20.52 ID:V1i0NaJEa.net] >>140 シート順を駄目な順に戻して再現するならそうかも
150 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 10:05:15.65 ID:s0YManYn0.net] Ruby信者はあわしろいくやという人の手先らしい こんなスレまでわざわざ荒らしに来るちょっと頭が残念な人
151 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 11:13:17.21 ID:GvzTzrtAM.net] >>134 > こういった最初の内から押さえていないとマズいことだと思う。 うんうん、ドヤるなら綴りぐらいはまともに書けないとマズいわなw > ・モジュールの先頭にはOption Explisit
152 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 11:44:13.88 ID:kiIZdW9jp.net] まーたあわしろいくやか
153 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 13:08:52.04 ID:JiG+HYt80.net] 基礎ってなんですか?って質問している時点で恐ろしいわ。。。 基本を知らずにExcelを操作している社員がいる職場のシートは難解なんだろうなきっと。。。
154 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 13:48:07.37 ID:g5KkmiV+a.net] >マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる と言われたらまず基礎がどのぐらいか定義してもらわないと 何言ってるか分からないからだ
155 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 14:25:18.18 ID:+MyNHKVga.net] グローバル変数は許せよ
156 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 15:13:22.89 ID:WJZoQhbE0.net] その変数の問題だと思うんですが、subの中からFunctionをコールして、String型変数を引数で渡しても Functionの中でその変数が空っぽになります。どうして文字列が渡せないんでしょうか Function aaa(ByVal hoge As String) As Long を Call aaa(hoge) と書くとaaa内でhogeが空っぽです Public hoge とかしてみても駄目でした
157 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 15:52:47.68 ID:1YH+vaIj0.net] それ自分を呼び出してるだけじゃね
158 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 16:34:01.92 ID:vQVSsWXH0.net] また
159 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:16:44.69 ID:PdUE2wOEH.net] >>155 まずはモジュールの先頭にOption Explisitって書いてみ
160 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:31:48.02 ID:efAmahNiM.net] 値渡しするならCall aaa((hoge))が望ましい っていうか返り値があるFunctionってCallで呼び出す?返り値と同じ型の変数に代入とか演算に使ったりしない?
161 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:21:18.04 ID:pNkKMnVc0.net] VBAだけではないと思うんだけど、コードって使い回すじゃん?切った貼ったの繰り返しで完成後汚えなぁと思うことない? あと、コードを保管方法ってなんかないかな?使ったエクセル開いてコピーとかメモ帳とかいろいろやったけど不便でならない。
162 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:26:33.85 ID:WJZoQhbE0.net] FunctionとSubの違いもよく分かってなかったんですが、Functionの返り値を変数で受けようとした所 そもそも渡したい文字列がFunctionに渡せなくて困ってました 単に、自作の関数を呼び出す時に引数を渡してやればいいだろと思ってたんですが、それが出来ないので VBAはその辺が厳密なんですかね……?
163 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:32:25.23 ID:efAmahNiM.net] 例えばFunctionで返り値をString型が欲しい場合求める場合 Public Function aaa(ByVal hoge)As String ってString型を指定してやってFunction内でaaa = 【返したい文字列】ってやる必要があるのは分かる?
164 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:35:37.03 ID:efAmahNiM.net] Functionを呼ぶ側は bbb = aaa((hoge)) ってやるんよ 参照渡し(ByRef)の場合は変数をダイレクトに書いて良いけど、値渡し(ByVal)の場合は変数を括弧でくくってやらんと上手く渡せない場合がある。
165 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:11:37.69 ID:s0YManYn0.net] >>160 コピーして切った貼ったして使うことを使い回しとは言わない どっちにしろ使い回したい部分をモジュールや関数単位に纏めてそれを呼び出せ。 それが使い回しというものだ。
166 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:27:28.02 ID:HeHF5+P0d.net] 場合って何よ 具体的に書きなよ
167 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 19:56:36.98 ID:efAmahNiM.net] >>165 参照渡しと値渡しを同時に行う際、値渡しの変数に括弧をつけておらず、尚且つ変数のみである場合、参照渡しとして認識されるが呼び先では値渡し指定なので不一致であるとエラーを吐いて停止する(但し変数に対して演算を行っていた場合は値渡しとして認識される)から値渡しする時は括弧つける癖をつけろ。その方が可読性もあがる。 って言えば満足か?
168 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:01:57.50 ID:PdUE2wOEH.net] >>164 言うか言わないかは個人の認識の問題
169 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:28:43.00 ID:s0YManYn0.net] >>166 うん? それ何か違う気がする 演算した後値渡しでエラーになると言うことは、そもそも渡す引数の呼び出す側の値が呼び出さ
170 名前:黷驫ヨ数の引数の型で許容されるものでは無かったってことじゃないの? 例えば呼ぶ側でVariant型を定義した変数に“1”という文字列を入れていて、それを受ける呼び出される側の引数が Integer型に宣言されていた場合は型違いでエラーになるけど、呼び出し前にその変数に対して+1したものを代入すればその時点で暗黙の変化によりVariantの 内部型はIntegerになるから型が合ってエラーにはならない。という状況で、 括弧の話とはあまり関係ない気がするんだけど認識違う? [] [ここ壊れてます]
171 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:30:46.16 ID:s0YManYn0.net] 暗黙の変化ってなんだよ暗黙の変換ね
172 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:42:48.07 ID:aS7dMAuf0.net] Public Sub aaa() Dim aa As String, bb As String, cc As Long bb = ″b″ cc = 2 aa = bbb(bb, cc) End Sub Public Function bbb(ByRef b As String, ByVal c As Long)As String (中略) End Sub ってやるとFunction入る前にエラーで弾かれて aa = bbb(bb, (cc))ってやったりaa = bbb(bb, cc + 1)ってやったりすると通るんだがおま環だった?
173 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 20:47:53.29 ID:1YH+vaIj0.net] なにエラー?
174 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 21:00:41.59 ID:qWOh0TID0.net] >>148 やってみた。 やっぱエラーで止まった。 sheet番号がぐちゃぐちゃでもちゃんと動作するような、 クエリーを変数にした記述の仕方があるかもしれないけど、 少なくとも >>140 のやり方では、どうもオートメーションエラーになるみたい。
175 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 21:34:20.79 ID:s0YManYn0.net] >>170 コピーして実行してみたけど まず“b”のダブルクォーテーションが全角なのと、Functionを閉じているところがEnd Subになっている。 コンパイルした時点でエラーで弾かれたよ。 そこを修正したらエラーが出なくなった。
176 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 22:08:04.98 ID:vQVSsWXH0.net] >>170 ファイル壊れてんじゃね
177 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 22:13:12.19 ID:s0YManYn0.net] 関数やメソッドに括弧が必要なのは確か ・Functionで戻り値を受ける場合 ・Subで頭にCallを付けない場合 じゃなかったっけ? 後、括弧で括らないと順序関係なく 個別に引数を設定することが 出来るんじゃなかったっけか? まぁ自分としては何であれ括弧を付けて Subの場合は頭にCall付けて関数やメソッドが 呼ばれていることを明示する 必要があると思うけど。 あまり引数が多い関数は引数そのものを 抱えるエンティティクラスを作って そのインスタンスを引数で渡してやれば いい気がするしその方が可読性高いよね。
178 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 23:50:30.47 ID:WJZoQhbE0.net] >>162-163 ありがとうございます、値渡しがどうしても上手く行かなかったので試してみます
179 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 10:20:45.70 ID:nhaEx8Ewa.net] 大きな声で言えないけど、おれoption explicit付けたこと無いしグローバルじゃない変数は宣言しないで使ってる。グローバルな変数大好き
180 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 10:24:31.34 ID:La1yJ3oH0.net] え?option explicit付けない人見たことない。。。
181 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 10:27:14.26 ID:nhaEx8Ewa.net] だって俺お前と会ったことねーもん
182 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 10:45:43.81 ID:/bT+ATEvp.net] まーたあわしろいくやの手下のRuby信者か
183 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 10:49:48.00 ID:1dhF/BUe0.net] ゆうてそういうことしないよって人はプログラマとかじゃないんやろ プログラマやってたら不安になると思うし
184 名前:デフォルトの名無しさん [2021/06/07(月) 11:02:15.80 ID:BLDePS2QF.net] >>160 VBAを使わない pythonで外からexcelを操作する pythonのコードはgithubで管理
185 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 11:36:42.90 ID:5JFCMcJv0.net] Ruby に option explicit は無いからな
186 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 11:53:27.33 ID:faCSe2qcM.net] >>178 普通にいるよ 流石にソフトウェア開発者にはいないと思うけどVBAは事務屋さんも作ったりするからそう言う人はそもそもOption Explicit自体を知らなかったりする 知ってて使わない>>177 みたいのは単なるアホ
187 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 12:02:42.50 ID:/bT+ATEvp.net] >>182 Pythonなんか使う意味が分からん
188 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 12:06:17.59 ID:nhaEx8Ewa.net] 俺みたいな事務屋さんは知ってても必要ないんだってば。事務屋さんだから>>184 みたいに大きな声は出さないけど でも流石にRubyの人と同一視するのはやめて。けっこう傷付くし悲しい
189 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 12:39:03.71 ID:/bT+ATEvp.net] 知らないで使わないのはただの無知 知ってて使わないのは悪質なバカ
190 名前:デフォルトの名無しさん [2021/06/07(月) 12:46:48.42 ID:8ILcpsz2M.net] VBAって宣言せずに使ったらローカルになるんだっけ? プロと違って適当にかくから強制ひっすだわ こういうところに書くのは省略しまくるけどな
191 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 13:32:24.67 ID:faCSe2qcM.net] >>160 > あと、コードを保管方法ってなんかないかな?使ったエクセル開いてコピーとかメモ帳とかいろいろやったけど不便でならない。 普通にエクスポートすればいいだけじゃねーの?
192 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 19:28:59.24 ID:9yldYH/70.net] >>73 すごい亀レスだが、dispatchEventでなんとかなったわ でもいつできなくなるかドキドキ ieは終わりの圧力に屈しそう
193 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 01:11:20.22 ID:gtN4dmk3H.net] >>186 存在を知ってるのと正しい使い方を知ってるのは別 入力ミスが見つけやすくなるという大きなメリットがあるんだから、使わないのは無知と言われても仕方がない
194 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 02:25:46.24 ID:1f6b7zm30.net] 普通さ、最初に覚えるだろoption explicitは? それらを参考書とかで勉強してこなかった人とかいるのかなと? まあ、どう運用しようがその人の勝手だろうけどさ。
195 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 04:42:23.25 ID:RLQzdArC0.net] option explicitは知ってるが いちいち書かんし設定もせん 宣言は常にやる、それだけ
196 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 05:09:06.45 ID:bCI8JHzDM.net] >>193 いちいち書く? まあその程度のオツムならたいしたコードは書いてないだろうから使わなくてもいいかもねw https://itsakura.com/wp-content/uploads/2017/07/excel-vba-explicit2.png
197 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 08:18:59.91 ID:GIt8+gr30.net] >>193 俺も宣言は他言語同様やるがOptionは気にしないな 下手するとそれがあるせいで変な場所で宣言してる例をよく見る
198 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 08:20:58.32 ID:wrp61arm0.net] Task オブジェクトってなんでWordだけなん?
199 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 09:07:28.17 ID:3w2dwJfs0.net] >>194 自動構文チェックONにしているんだ。 別にどっちがいいって訳じゃないけど俺はOFF派。 コード書いてる最中にどこかのコードコピーして持って来たいときカーソル当てると エラーのメッセージボックスが上がって元の位置に戻されるのが鬱陶しいのと 他の開発で使ってるVisual Studioが元々そんな感じだからそっちに合わせてる。 ただそうするとエラー部分が赤くなるだけでどんなエラーかは表示しないから一長一短。 OFFはパッと見でどんなエラーか分かる人向けでそれ以外の人にはお勧め出来ない。
200 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 09:12:57.77 ID:3w2dwJfs0.net] >>195 Option Explicitの設定してて変な場所で宣言って聞いたことないな。 そんな具合になったコード晒せる?
201 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 09:19:38.53 ID:rnKdyaoGM.net] >>195 > 下手するとそれがあるせいで変な場所で宣言してる例をよく見る 意味わからん、例示してくれ
202 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 09:24:20.65 ID:rnKdyaoGM.net] >>197 > 自動構文チェックONにしているんだ。 まあこれは人によるかな あんたも書いてるようにエラーになった時にいちいちダイアログが表示されて鬱陶しいとは俺も思う
203 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 09:56:53.56 ID:zTVPbGTxa.net] 変な場所って、プロシージャの真ん中あたりに宣言がポッと出てくるやつか? いちいち上に戻って書き足すのがクソダルい気持ちは分かる
204 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:01:13.33 ID:3w2dwJfs0.net] >>201 見たことないなぁ どんな操作をするとそうなるの? そもそも最初に設定しておけば必ずモジュール作ったときに一番上に出てくると思うけど
205 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:10:38.85 ID:zTVPbGTxa.net] 違う違う、そうじゃなくて、初心者がコード書く時にエラー吐かれる度にその場で直した結果として変なところで宣言してるやつってこと
206 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:32:12.38 ID:3w2dwJfs0.net] >>203 Option Explicitとは関係ない話? だったら本題と内容がズレるな。 >違う違う、そうじゃなくて、初心者がコード書く時にエラー吐かれる度にその場で直した結果として変なところで宣言してるやつってこと これは初心者というか.Net系やJavaとかやってる人に書かせてもそう書くときがある 関数内で定義したVBAのDimとかのスコープが関数単位で効くものでなくて If とか For とかのブロック単位で効くものと勘違いしているらしい。
207 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:36:39.71 ID:zPjYlIziM.net] >>203 使う直前に宣言するって言うのは別に変な流儀じゃないけどな むしろ先頭で宣言しろと言うのは老害の可能性もあるし
208 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:47:13.49 ID:3w2dwJfs0.net] >>205 それは可読性の問題 あくまで俺だったらだけど同一スコープの先頭に書くな。後で変数定義して既に使われてる変数書いてエラーになって「あ」ってなるの嫌だし 一々コードから何の型で宣言しているのか探しにいくのも面倒くさい。
209 名前:デフォルトの名無しさん [2021/06/08(火) 10:51:37.03 ID:zTVPbGTxa.net] >>204 いやいやズレてないよ、>>195 がそういう話をしてるんじゃないかって話だったでしょ ありがとう勉強になる…そうか俺老害側か…
210 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:03:04.11 ID:3w2dwJfs0.net] >>207 よく嫁 >俺も宣言は他言語同様やるがOptionは気にしないな >下手するとそれがあるせいで変な場所で宣言してる例をよく見る Optionがあるせいで変な場所に宣言してる例をよく見るって書いてあるだろ? そっちの話はOptionの話と関係ある? 後、宣言する場所に関しては老害とかないから安心していいぞ。何故ならもっと新しい言語のVB.NetやC#でも効くスコープの先頭に書くのが一般的だから。
211 名前:デフォルトの名無しさん [2021/06/08(火) 11:06:06.39 ID:zTVPbGTxa.net] >>208 >>203 option付けたら変数宣言しないとエラー出すじゃないですか
212 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:07:57.69 ID:3w2dwJfs0.net] >>209 Optionつけようがつけまいが 変数宣言するのは基本だと思うけど? してないの?
213 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:09:49.36 ID:GIt8+gr30.net] >>201 まさにそれ
214 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:10:37.61 ID:bCI8JHzDM.net] >>206 別にお前さんに強要するつもりはないから自分の好きな様に書いてくれ ただIDEの使い方位は覚えておいた方がいいんじゃないかな > 一々コードから何の型で宣言しているのか探しにいくのも面倒くさい。
215 名前:デフォルトの名無しさん [2021/06/08(火) 11:15:14.30 ID:zTVPbGTxa.net] >>210 俺とお前と>>195 がしてても、それが基本でも、>>195 が良く見るというコードを書く人たちが基本が身についているとは限らないじゃない だから>>203 でわざわざ初心者って言及したんですってば
216 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:16:08.53 ID:3w2dwJfs0.net] >>212 Visual Studio辺りであればカーソル合わせると 定義した型が表示されるから分かるが VBAの場合は一々「型の定義」でそこまで 飛ばないといけないし、何度か最寄りの型まで 調べると元の位置に戻ってくるのも 面倒だと思ってるんだけど認識違う? 違うんならそのIDEの使い方とやらを 提示して頂けると有り難いんだけどな
217 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:20:57.88 ID:Bz/vS+dRM.net] 変数の宣言って頭でまとめて宣言するより使う場所で宣言するのが今の主流だった気がするけどウチの会社だけなんかな
218 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:24:56.38 ID:3w2dwJfs0.net] >>213 よく分からないな 初心者だから変数定義をしていないといいつつ 変数定義しているところがポッと出てくるという。 変数定義してたりしてなかったりというのであれば もうそういう次元の話ではなくなってくる。
219 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:25:51.75 ID:RLQzdArC0.net] >>194 だから「設定」と書いてあるだろアホ
220 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:32:15.16 ID:3w2dwJfs0.net] >>215 状況がよく分からないけど 「使う場所で宣言する」というのは スコープ毎に纏めていないと言うことだろうか 少なくとも俺が今までやった言語では そんな流行りは見たことないなぁ というか見辛いもの
221 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:47:18.41 ID:eotEY1L4M.net] >>217 おじいちゃん、もうそのレベルの低い話は終わってるからw
222 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 12:12:36.32 ID:zTVPbGTxa.net] >>211 ごめん >>216 してないとは言ってないよ。option付けたら必ずさせられるじゃん。してたりしてなかったりにはなり得ない 初心者だから変数定義を最初に必ずするクセがついていないんじゃないかって話です vba不慣れな人が宣言してない変数を使おうとして、実行時にoptionどおりエラーを言い渡され、慌ててエラー箇所の直前に変数宣言をぶち込む。その結果コードの真ん中に変数宣言がポッと出てくるやつになるんじゃないかってこと
223 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 12:44:31.31 ID:3w2dwJfs0.net] >>220 言いたいことはやっと伝わった では話を戻そう。そのコードを見てどう思った? 変数宣言強制設定して変数宣言書き込まないとエラーが出るようにするのが悪いと思った? そんな奴がポッとそんなところに変数宣言を書き込んだ奴が悪いと思った? 前者というのであればここで話はもう終わり。 恐らくこれ以上話してもお互い得られるものは何もないと思う。 後者と言うのであれば、変数宣言強制した際に少なくとも変数が宣言されていないことは発覚する。これだけで恩恵があることは理解出来るかな? その辺にポッと書いてしまったことはそれ自体が問題であり、その人に促せばいいんじゃないかと思うけど?
224 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 12:53:13.82 ID:RLQzdArC0.net] >>219 自分の間違いが顕わになって、反論できないバカ
225 名前:デフォルトの名無しさん [2021/06/08(火) 12:59:24.76 ID:iJBocUpIM.net] くだらないタイプミスで時間を無駄にしたことはありませんか?
226 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 13:04:42.37 ID:5PCuzcGlM.net] 設定のことを含めた話ということすら読み取れてなかった7vXXが一番レベル低かったな
227 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 13:09:06.95 ID:3w2dwJfs0.net] >>223 ない・・・と言いたいところだけどどうやっても0にはならんわなw いつも思うのがOption ExplicitがあるんだからOption Strictも用意しといてくれればいいのにと。 変換に際して暗黙の変換をさせずにどれも明示的な変換を漏らさずさせられるようになれば テストする際も安心して走らせられるのにって思う。 もっとも、人によっては面倒くさいと思う人が出るんだろうなぁ・・・
228 名前:デフォルトの名無しさん [2021/06/08(火) 13:09:33.83 ID:iJBocUpIM.net] >>218 C#でvar使うなら型の確定する現地じゃないとだめじゃね?