Excel VBA 質問スレ Part71

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f5f-nIK+)
垢版 |
2021/05/25(火) 12:48:01.06ID:mepUVc/i0
!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
2021/06/03(木) 22:14:51.09ID:D5fnCzXq0
自力でできることを質問した場合、解答がなくても困らんだろ
2021/06/03(木) 22:50:40.18ID:TUnqxA7B0
>>98
発注出来る開発部署があるなら、そっちに投げた方が楽なんじゃ?
2021/06/04(金) 01:48:20.45ID:JjzCcUaXH
朗報
やっぱりオブジェクトは残る

> MSHTML(Trident)エンジンに関しても、互換性維持のため
> すぐに削除されることはない。OS内部に「IE 11」由来の
> 機能は残る。「WebBrowser」コントロールを利用するアプリも
> 引き続き利用できる。

https://i.imgur.com/BWnVYki.png
2021/06/04(金) 01:56:50.63ID:/SvJ4cKr0
>>111
別部署とのお金のやり取りが発生するからメチャクチャ渋るぞ
2021/06/04(金) 02:06:55.76ID:ggq9OdP30
>>113
そんなん会社ごとによるし俺に言われても
115デフォルトの名無しさん (ワッチョイ 6ddb-9b/0)
垢版 |
2021/06/04(金) 12:36:18.19ID:tGFTJ4F20
最初は、動いていたのですが、
そのうち、毎回6行目でエラーが出るようになってしまいました。

例えば
D5セルに入力した3桁の数字をした時に

D7に百の位、E7に十の位、F7に一の位を表示させたいのです。
入力した結果を見て、再入力することもあるので
関数⇒値貼り付けはやりたくないのです。

できれば、どなたかご教授をお願いします。

ファイルのシートは1枚のみです。
【1 OSの種類   】 Windows10
【2 Excelのバージョン】 office365


Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
If (Target.Row >= 5 And Target.Row <= 161) And (Target.Row Mod 4 = 1) And (Target.Column = 4) Then
r = Target.Row
Cells(r + 2, 4) = Cells(r, 4) \ 100
Cells(r + 2, 5) = Cells(r, 4) \ 10 Mod 10 ← 実行時エラー1004
Cells(r + 2, 6) = Cells(r, 4) Mod 10
End If
End Sub
116デフォルトの名無しさん (ワッチョイ 6ddb-9b/0)
垢版 |
2021/06/04(金) 12:48:38.27ID:tGFTJ4F20
>>115
補足
最初、エラーが出たやつ
Cells(r + 2, 4) = Left(Cells(r, 4).Text, 1)
Cells(r + 2, 5) = Mid(Cells(r, 4).Text, 2, 1)
Cells(r + 2, 6) = Right(Cells(r, 4).Text, 1)


修正しても
Cells(r + 2, 4) = Cells(r, 4) \ 100
Cells(r + 2, 5) = Cells(r, 4) \ 10 Mod 10 ← 実行時エラー1004
Cells(r + 2, 6) = Cells(r, 4) Mod 10
117デフォルトの名無しさん (エムゾネ FFea-DLda)
垢版 |
2021/06/04(金) 12:49:56.32ID:UUHTR6cxF
>>115-116
そのうちまた動くようになるさ
2021/06/04(金) 12:50:19.85ID:4IT3M2Hh0
シートを保護したまま動かす前提で、何か色々修正したときに
E7のロックをうっかりONにしてしまったとか。
119デフォルトの名無しさん (ワッチョイ 6ddb-9b/0)
垢版 |
2021/06/04(金) 13:06:45.09ID:tGFTJ4F20
>>118

ありがとうございます。
どうやらそれらしいです。
頑張ってみます。
2021/06/04(金) 16:43:12.67ID:0sw3CVWxd
>>115

Private Sub Worksheet_Change(ByVal Target As Range)
Dim n, n1, n2, n3 As Integer
If Target.AddressLocal = "$D$4" Then
If IsNumeric(Target.Value) Then
n = Target.Value
n1 = n \ 100
n2 = n \ 10 Mod 10
n3 = n Mod 10
Me.Range("D7").Value = n1
Me.Range("E7").Value = n2
Me.Range("F7").Value = n3
End If
End If
End Sub
もう見てないかもしれないけど、どうぞ。
2021/06/04(金) 17:55:39.07ID:Ca/vMZLe0
それだとn3 だけがintegerになるんじゃね
2021/06/04(金) 18:05:42.24ID:Bit4dpt50
>>120
n3以外Variantでいいの?
2021/06/05(土) 09:03:08.07ID:rlNy9EJ3M
基本が出来てない典型
2021/06/05(土) 09:19:02.29ID:6nlrivgRp
基本が出来ていなくても何となく動いてしまう
それがVBA
2021/06/05(土) 10:37:53.55ID:qQr0HMbe0
あの書き方でよしとするネット情報が多くておれも最初間違えてたわ
2021/06/05(土) 11:01:57.88ID:w++2yo+P0
VBAで、QueryTableを使ってUTF-8のCSVを読み込ませてるんですが、
この読み込みのマクロを使った後に、そのxlsmファイルを開いたままの状態で、何か別のCSVファイルを手動で開くと
中の2バイト文字がグチャグチャに文字化けされてしまいます
xlsmを閉じてからだと何の問題もないんですが、作業してるとちょっと不便なんですが原因は何なのでしょうか?
2021/06/05(土) 13:08:34.35ID:X22osQ9q0
これかな
https://www.ipentec.com/document/office-excel-open-utf-8-csv-file
2021/06/05(土) 13:18:33.33ID:+aLYn71C0
>>126
後段の「何か別のCSVファイルを手動で」は、
・別のbook(.xlsx)からPowerQueryでのcsv読込み?
・それともcsvファイルをダブルクリックで直接開き?

PowerQueryでのcsv読込みなら
エンコードを一度自動認識で読み込んでも
後からステップの「ソース」の設定(歯車または詳細エディター)で
固定することも出来るけど・・・
2021/06/05(土) 13:51:45.19ID:PrzcCeEoH
入力の手間や長くなるのが嫌なら
Dim n%, n1%, n2%, n3%
で全部Integerになる
2021/06/05(土) 14:28:09.00ID:w++2yo+P0
>>128
済みません、VBAでQueryTableを使ってUTF-8のCSVをシートに読み込んだ後、適当なShift-JISのCSVファイルをダブルクリックして直に開くと
開いたCSVの中の2バイト文字が文字化けしています
Excelで開いてるウィンドウを全部閉じてから、CSVを開き直すと文字化けしていません
2021/06/05(土) 15:56:52.45ID:Ko2adBFs0
マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる
2021/06/05(土) 16:25:26.38ID:eGJ4gYzF0
基礎って何ですか?
2021/06/05(土) 16:45:34.26ID:QYWEL8gWM
>>132
私もそう思いました
基礎って何ですか?
2021/06/05(土) 22:09:51.31ID:fW5GrJR10
例えばVBAの基礎と言えば
・モジュールの先頭にはOption Explisit書いて全ての型は明示的に記述すること。
・行、列を扱うときは使用範囲の最大値を考慮してIntegerでなくLong型で定義すること。
・モジュール、関数、変数の名称は一見して何を意味しているのか分かるようにつけること。
・モジュール、メソッド、関数には複数の役割を持たせて作らないこと。
・基本、ひとつの変数に複数の型のインスタンスを代入する場合、Object型を使わずにインターフェースを作成して代入すること。
・グローバル変数は使用せず、プロパティを使用すること。
・VBA上では四捨五入を求めるROUNDは銀行丸めなので必要に応じてWorksheetFunctionのROUNDを使うこと
小数点以下の計算を行う場合、DoubleやSingle型は浮動小数点数扱いでIEEE754準拠のため誤差が発生
することがあることを念頭においておくこと。

まだまだ沢山あるけど
人や会社の厳しさや緩さによって多少は変わるけど
こういった最初の内から押さえていないとマズいことだと思う。
2021/06/05(土) 22:10:33.71ID:X22osQ9q0
>>130
問題が起きないように使えばいいのでは?
2021/06/05(土) 22:37:56.35ID:NS39OhGXd
>>134

めんどくさいって思ったことないですか?
2021/06/05(土) 22:53:56.98ID:zpL5HDoS0
RowがLongなのはわかるけど、
ColumnはIntegerで足りね?
138デフォルトの名無しさん (ワッチョイ 355f-pu9w)
垢版 |
2021/06/05(土) 22:58:04.78ID:OxA9wcds0
WindowsAPIのmciSendString関数を使おうとサンプルコードを見ているのですが、
Callで呼び出さずにrc=と記述されたものばかり見受けられます。
rc=の意味を調べてもなかなか回答が見つからず…これって何なのでしょうか。
2021/06/05(土) 23:01:50.30ID:PrzcCeEoH
>>138
return code
2021/06/05(土) 23:05:55.78ID:+aLYn71C0
1つのbookにシート数44、1シートに1クエリーがあり、
「すべて更新」ボタンでやると部分的にクエリー更新に失敗することが多いため、
一覧表作ってシート名とクエリー名を変数にして
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の検索に失敗することがある (特にシート数が多い場合)
という理解でいいのかな?
141デフォルトの名無しさん (ワッチョイ 2d8e-Wt59)
垢版 |
2021/06/05(土) 23:06:05.26ID:HEfJq5i50
>>138
その程度の馬鹿頭でWindows APIなんか使うなよ
142デフォルトの名無しさん (ワッチョイ 355f-pu9w)
垢版 |
2021/06/05(土) 23:09:38.86ID:OxA9wcds0
>>139
ご回答ありがとうございます!
rcという変数に関数を格納する、というのがいまいち理解できません。
Callで関数を呼び出しても問題ないはずですよね?
2021/06/05(土) 23:22:29.75ID:fW5GrJR10
>>135
問題が起きにくくするようにのための決めごとだよ
もっとも、やってる仕事場のプログラマーが歩んできた経験則に大きく左右されたりもするから
そこは仕事場ごとのコーディング規約に基づいて組めばいいんじゃないかな。
それはプログラマーのお仕事としての基本になるかな。

>>136
面倒くさいよ。でも他の言語とは比較にならないくらい楽な方だよ。

>>137
またいつシートの行や列が増えないとも限らないじゃん。とある銀行系のところは行や列が増える以前からそんな想定をしてて最初からLong型を使うことがコーディング規約に記載されてたよ。
それにどうせInteger型はLong型を半分マスクしたものだからLong使って処理が遅くなったり容量余計食ったりすることないしね。
2021/06/05(土) 23:35:33.21ID:NS39OhGXd
>>142

乱暴だけどw Functionと一緒だよ。
145デフォルトの名無しさん (ワントンキン MM5a-Srd6)
垢版 |
2021/06/06(日) 00:10:56.51ID:AEt8vzaWM
いつものruby馬鹿の自演
146デフォルトの名無しさん (ワッチョイ 355f-pu9w)
垢版 |
2021/06/06(日) 01:19:16.01ID:X88mu3QB0
>>144
ありがとうございます!
2021/06/06(日) 02:19:15.47ID:rqYM4O//d
いつものあいつ
2021/06/06(日) 04:32:20.52ID:V1i0NaJEa
>>140
シート順を駄目な順に戻して再現するならそうかも
2021/06/06(日) 10:05:15.65ID:s0YManYn0
Ruby信者はあわしろいくやという人の手先らしい
こんなスレまでわざわざ荒らしに来るちょっと頭が残念な人
2021/06/06(日) 11:13:17.21ID:GvzTzrtAM
>>134
> こういった最初の内から押さえていないとマズいことだと思う。
うんうん、ドヤるなら綴りぐらいはまともに書けないとマズいわなw

> ・モジュールの先頭にはOption Explisit
2021/06/06(日) 11:44:13.88ID:kiIZdW9jp
まーたあわしろいくやか
2021/06/06(日) 13:08:52.04ID:JiG+HYt80
基礎ってなんですか?って質問している時点で恐ろしいわ。。。
基本を知らずにExcelを操作している社員がいる職場のシートは難解なんだろうなきっと。。。
2021/06/06(日) 13:48:07.37ID:g5KkmiV+a
>マクロだけじゃない、Excel全体は基礎ができてないとすぐ壁にぶち当たる

と言われたらまず基礎がどのぐらいか定義してもらわないと
何言ってるか分からないからだ
2021/06/06(日) 14:25:18.18ID:+MyNHKVga
グローバル変数は許せよ
2021/06/06(日) 15:13:22.89ID:WJZoQhbE0
その変数の問題だと思うんですが、subの中からFunctionをコールして、String型変数を引数で渡しても
Functionの中でその変数が空っぽになります。どうして文字列が渡せないんでしょうか
Function aaa(ByVal hoge As String) As Long を Call aaa(hoge) と書くとaaa内でhogeが空っぽです
Public hoge とかしてみても駄目でした
2021/06/06(日) 15:52:47.68ID:1YH+vaIj0
それ自分を呼び出してるだけじゃね
2021/06/06(日) 16:34:01.92ID:vQVSsWXH0
また
2021/06/06(日) 17:16:44.69ID:PdUE2wOEH
>>155
まずはモジュールの先頭にOption Explisitって書いてみ
2021/06/06(日) 17:31:48.02ID:efAmahNiM
値渡しするならCall aaa((hoge))が望ましい
っていうか返り値があるFunctionってCallで呼び出す?返り値と同じ型の変数に代入とか演算に使ったりしない?
2021/06/06(日) 18:21:18.04ID:pNkKMnVc0
VBAだけではないと思うんだけど、コードって使い回すじゃん?切った貼ったの繰り返しで完成後汚えなぁと思うことない?
あと、コードを保管方法ってなんかないかな?使ったエクセル開いてコピーとかメモ帳とかいろいろやったけど不便でならない。
2021/06/06(日) 18:26:33.85ID:WJZoQhbE0
FunctionとSubの違いもよく分かってなかったんですが、Functionの返り値を変数で受けようとした所
そもそも渡したい文字列がFunctionに渡せなくて困ってました
単に、自作の関数を呼び出す時に引数を渡してやればいいだろと思ってたんですが、それが出来ないので
VBAはその辺が厳密なんですかね……?
2021/06/06(日) 18:32:25.23ID:efAmahNiM
例えばFunctionで返り値をString型が欲しい場合求める場合
Public Function aaa(ByVal hoge)As String
ってString型を指定してやってFunction内でaaa = 【返したい文字列】ってやる必要があるのは分かる?
2021/06/06(日) 18:35:37.03ID:efAmahNiM
Functionを呼ぶ側は
bbb = aaa((hoge))
ってやるんよ
参照渡し(ByRef)の場合は変数をダイレクトに書いて良いけど、値渡し(ByVal)の場合は変数を括弧でくくってやらんと上手く渡せない場合がある。
2021/06/06(日) 19:11:37.69ID:s0YManYn0
>>160
コピーして切った貼ったして使うことを使い回しとは言わない
どっちにしろ使い回したい部分をモジュールや関数単位に纏めてそれを呼び出せ。
それが使い回しというものだ。
2021/06/06(日) 19:27:28.02ID:HeHF5+P0d
場合って何よ 具体的に書きなよ
2021/06/06(日) 19:56:36.98ID:efAmahNiM
>>165
参照渡しと値渡しを同時に行う際、値渡しの変数に括弧をつけておらず、尚且つ変数のみである場合、参照渡しとして認識されるが呼び先では値渡し指定なので不一致であるとエラーを吐いて停止する(但し変数に対して演算を行っていた場合は値渡しとして認識される)から値渡しする時は括弧つける癖をつけろ。その方が可読性もあがる。
って言えば満足か?
2021/06/06(日) 20:01:57.50ID:PdUE2wOEH
>>164
言うか言わないかは個人の認識の問題
2021/06/06(日) 20:28:43.00ID:s0YManYn0
>>166
うん?
それ何か違う気がする
演算した後値渡しでエラーになると言うことは、そもそも渡す引数の呼び出す側の値が呼び出される関数の引数の型で許容されるものでは無かったってことじゃないの?

例えば呼ぶ側でVariant型を定義した変数に“1”という文字列を入れていて、それを受ける呼び出される側の引数が
Integer型に宣言されていた場合は型違いでエラーになるけど、呼び出し前にその変数に対して+1したものを代入すればその時点で暗黙の変化によりVariantの
内部型はIntegerになるから型が合ってエラーにはならない。という状況で、
括弧の話とはあまり関係ない気がするんだけど認識違う?
2021/06/06(日) 20:30:46.16ID:s0YManYn0
暗黙の変化ってなんだよ暗黙の変換ね
2021/06/06(日) 20:42:48.07ID:aS7dMAuf0
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)ってやったりすると通るんだがおま環だった?
2021/06/06(日) 20:47:53.29ID:1YH+vaIj0
なにエラー?
2021/06/06(日) 21:00:41.59ID:qWOh0TID0
>>148
やってみた。
やっぱエラーで止まった。

sheet番号がぐちゃぐちゃでもちゃんと動作するような、
クエリーを変数にした記述の仕方があるかもしれないけど、
少なくとも >>140 のやり方では、どうもオートメーションエラーになるみたい。
2021/06/06(日) 21:34:20.79ID:s0YManYn0
>>170
コピーして実行してみたけど
まず“b”のダブルクォーテーションが全角なのと、Functionを閉じているところがEnd Subになっている。
コンパイルした時点でエラーで弾かれたよ。

そこを修正したらエラーが出なくなった。
2021/06/06(日) 22:08:04.98ID:vQVSsWXH0
>>170
ファイル壊れてんじゃね
2021/06/06(日) 22:13:12.19ID:s0YManYn0
関数やメソッドに括弧が必要なのは確か
・Functionで戻り値を受ける場合
・Subで頭にCallを付けない場合
じゃなかったっけ?
後、括弧で括らないと順序関係なく
個別に引数を設定することが
出来るんじゃなかったっけか?

まぁ自分としては何であれ括弧を付けて
Subの場合は頭にCall付けて関数やメソッドが
呼ばれていることを明示する
必要があると思うけど。

あまり引数が多い関数は引数そのものを
抱えるエンティティクラスを作って
そのインスタンスを引数で渡してやれば
いい気がするしその方が可読性高いよね。
2021/06/06(日) 23:50:30.47ID:WJZoQhbE0
>>162-163
ありがとうございます、値渡しがどうしても上手く行かなかったので試してみます
2021/06/07(月) 10:20:45.70ID:nhaEx8Ewa
大きな声で言えないけど、おれoption explicit付けたこと無いしグローバルじゃない変数は宣言しないで使ってる。グローバルな変数大好き
2021/06/07(月) 10:24:31.34ID:La1yJ3oH0
え?option explicit付けない人見たことない。。。
2021/06/07(月) 10:27:14.26ID:nhaEx8Ewa
だって俺お前と会ったことねーもん
2021/06/07(月) 10:45:43.81ID:/bT+ATEvp
まーたあわしろいくやの手下のRuby信者か
2021/06/07(月) 10:49:48.00ID:1dhF/BUe0
ゆうてそういうことしないよって人はプログラマとかじゃないんやろ
プログラマやってたら不安になると思うし
182デフォルトの名無しさん (エムゾネ FFea-ywzN)
垢版 |
2021/06/07(月) 11:02:15.80ID:BLDePS2QF
>>160
VBAを使わない
pythonで外からexcelを操作する
pythonのコードはgithubで管理
2021/06/07(月) 11:36:42.90ID:5JFCMcJv0
Ruby に option explicit は無いからな
2021/06/07(月) 11:53:27.33ID:faCSe2qcM
>>178
普通にいるよ
流石にソフトウェア開発者にはいないと思うけどVBAは事務屋さんも作ったりするからそう言う人はそもそもOption Explicit自体を知らなかったりする
知ってて使わない>>177みたいのは単なるアホ
2021/06/07(月) 12:02:42.50ID:/bT+ATEvp
>>182
Pythonなんか使う意味が分からん
2021/06/07(月) 12:06:17.59ID:nhaEx8Ewa
俺みたいな事務屋さんは知ってても必要ないんだってば。事務屋さんだから>>184みたいに大きな声は出さないけど
でも流石にRubyの人と同一視するのはやめて。けっこう傷付くし悲しい
2021/06/07(月) 12:39:03.71ID:/bT+ATEvp
知らないで使わないのはただの無知
知ってて使わないのは悪質なバカ
188デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/07(月) 12:46:48.42ID:8ILcpsz2M
VBAって宣言せずに使ったらローカルになるんだっけ?
プロと違って適当にかくから強制ひっすだわ
こういうところに書くのは省略しまくるけどな
2021/06/07(月) 13:32:24.67ID:faCSe2qcM
>>160
> あと、コードを保管方法ってなんかないかな?使ったエクセル開いてコピーとかメモ帳とかいろいろやったけど不便でならない。
普通にエクスポートすればいいだけじゃねーの?
2021/06/07(月) 19:28:59.24ID:9yldYH/70
>>73 すごい亀レスだが、dispatchEventでなんとかなったわ でもいつできなくなるかドキドキ ieは終わりの圧力に屈しそう
2021/06/08(火) 01:11:20.22ID:gtN4dmk3H
>>186
存在を知ってるのと正しい使い方を知ってるのは別
入力ミスが見つけやすくなるという大きなメリットがあるんだから、使わないのは無知と言われても仕方がない
2021/06/08(火) 02:25:46.24ID:1f6b7zm30
普通さ、最初に覚えるだろoption explicitは?
それらを参考書とかで勉強してこなかった人とかいるのかなと?
まあ、どう運用しようがその人の勝手だろうけどさ。
2021/06/08(火) 04:42:23.25ID:RLQzdArC0
option explicitは知ってるが
いちいち書かんし設定もせん
宣言は常にやる、それだけ
2021/06/08(火) 05:09:06.45ID:bCI8JHzDM
>>193
いちいち書く?
まあその程度のオツムならたいしたコードは書いてないだろうから使わなくてもいいかもねw
https://itsakura.com/wp-content/uploads/2017/07/excel-vba-explicit2.png
2021/06/08(火) 08:18:59.91ID:GIt8+gr30
>>193
俺も宣言は他言語同様やるがOptionは気にしないな
下手するとそれがあるせいで変な場所で宣言してる例をよく見る
2021/06/08(火) 08:20:58.32ID:wrp61arm0
Task オブジェクトってなんでWordだけなん?
2021/06/08(火) 09:07:28.17ID:3w2dwJfs0
>>194
自動構文チェックONにしているんだ。
別にどっちがいいって訳じゃないけど俺はOFF派。
コード書いてる最中にどこかのコードコピーして持って来たいときカーソル当てると
エラーのメッセージボックスが上がって元の位置に戻されるのが鬱陶しいのと
他の開発で使ってるVisual Studioが元々そんな感じだからそっちに合わせてる。

ただそうするとエラー部分が赤くなるだけでどんなエラーかは表示しないから一長一短。
OFFはパッと見でどんなエラーか分かる人向けでそれ以外の人にはお勧め出来ない。
2021/06/08(火) 09:12:57.77ID:3w2dwJfs0
>>195
Option Explicitの設定してて変な場所で宣言って聞いたことないな。
そんな具合になったコード晒せる?
2021/06/08(火) 09:19:38.53ID:rnKdyaoGM
>>195
> 下手するとそれがあるせいで変な場所で宣言してる例をよく見る
意味わからん、例示してくれ
2021/06/08(火) 09:24:20.65ID:rnKdyaoGM
>>197
> 自動構文チェックONにしているんだ。
まあこれは人によるかな
あんたも書いてるようにエラーになった時にいちいちダイアログが表示されて鬱陶しいとは俺も思う
2021/06/08(火) 09:56:53.56ID:zTVPbGTxa
変な場所って、プロシージャの真ん中あたりに宣言がポッと出てくるやつか?
いちいち上に戻って書き足すのがクソダルい気持ちは分かる
2021/06/08(火) 10:01:13.33ID:3w2dwJfs0
>>201
見たことないなぁ
どんな操作をするとそうなるの?
そもそも最初に設定しておけば必ずモジュール作ったときに一番上に出てくると思うけど
2021/06/08(火) 10:10:38.85ID:zTVPbGTxa
違う違う、そうじゃなくて、初心者がコード書く時にエラー吐かれる度にその場で直した結果として変なところで宣言してるやつってこと
2021/06/08(火) 10:32:12.38ID:3w2dwJfs0
>>203
Option Explicitとは関係ない話?
だったら本題と内容がズレるな。

>違う違う、そうじゃなくて、初心者がコード書く時にエラー吐かれる度にその場で直した結果として変なところで宣言してるやつってこと

これは初心者というか.Net系やJavaとかやってる人に書かせてもそう書くときがある
関数内で定義したVBAのDimとかのスコープが関数単位で効くものでなくて
If とか For とかのブロック単位で効くものと勘違いしているらしい。
2021/06/08(火) 10:36:39.71ID:zPjYlIziM
>>203
使う直前に宣言するって言うのは別に変な流儀じゃないけどな
むしろ先頭で宣言しろと言うのは老害の可能性もあるし
2021/06/08(火) 10:47:13.49ID:3w2dwJfs0
>>205
それは可読性の問題
あくまで俺だったらだけど同一スコープの先頭に書くな。後で変数定義して既に使われてる変数書いてエラーになって「あ」ってなるの嫌だし
一々コードから何の型で宣言しているのか探しにいくのも面倒くさい。
207デフォルトの名無しさん (アウアウウー Sa11-Wnv+)
垢版 |
2021/06/08(火) 10:51:37.03ID:zTVPbGTxa
>>204
いやいやズレてないよ、>>195がそういう話をしてるんじゃないかって話だったでしょ
ありがとう勉強になる…そうか俺老害側か…
2021/06/08(火) 11:03:04.11ID:3w2dwJfs0
>>207
よく嫁
>俺も宣言は他言語同様やるがOptionは気にしないな
>下手するとそれがあるせいで変な場所で宣言してる例をよく見る

Optionがあるせいで変な場所に宣言してる例をよく見るって書いてあるだろ?
そっちの話はOptionの話と関係ある?

後、宣言する場所に関しては老害とかないから安心していいぞ。何故ならもっと新しい言語のVB.NetやC#でも効くスコープの先頭に書くのが一般的だから。
209デフォルトの名無しさん (アウアウウー Sa11-Wnv+)
垢版 |
2021/06/08(火) 11:06:06.39ID:zTVPbGTxa
>>208 >>203
option付けたら変数宣言しないとエラー出すじゃないですか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。