X



Excel VBA 質問スレ Part63
レス数が1000を超えています。これ以上書き込みはできません。
0952デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/01(日) 14:45:17.26ID:qadFHjVDx
>>951
Letとのバッティングだろう
推測だが、VB6/VBAのコンパイラは、代入演算子と等価演算子がともに'='であることを前提とした仕様になっているんだと思う
プリミティブ型の値の代入はスタックの値のコピーに他ならないので、代入演算子を等価演算子と混同しても論理矛盾が起きない

オブジェクトの場合はそうはいかないので、オブジェクト変数として型宣言した変数へのインスタンス代入の際にはSetの識別子付与を強制するようにしてるんじゃなかろうか

VB.NETではSetが要らなくなってるからコンパイラの仕様だよなこれは
0953デフォルトの名無しさん (ワッチョイ 9279-luhV)
垢版 |
2019/12/01(日) 15:01:32.65ID:pJZuHPp00
参照カウント型GCの都合だよ
Setで左辺のオブジェクトの参照カウントが+1されて変数に束縛される
左辺がNothingだったら束縛していたオブジェクト参照カウントを-1する
変数がemptyやNothingだったら何もしない
見た目以上に重い代入処理
関数や手続きの戻りまで行ったら全てのローカル変数に対してSet 変数 = Nothing相当の処理をする
だから関数の最後でNothingの代入は不要
ただし
0955デフォルトの名無しさん (ワッチョイ 122f-Ql8R)
垢版 |
2019/12/01(日) 15:43:44.55ID:BdsW8ng60
>>951
Setが省略できないのはデフォルトプロパティとの絡み
SetもLetもないと、デフォルトプロパティへの代入なのかインスタンスそのものの代入なのか区別がつかないから
文法解釈の問題で、GCや参照カウンタの問題ではないよ

>>952
VB.Netではデフォルトプロパティという概念を変えて
一部条件以外でのデフォルトプロパティの省略を禁止した
コンパイラは文法を解釈してるわけで、言語仕様の問題

ちなみに=が等価演算子か比較演算子かの解釈に、値型か参照型の区別は関係ない
VB.Netがそうだろ
0958デフォルトの名無しさん (ワッチョイ 122f-Ql8R)
垢版 |
2019/12/01(日) 16:05:54.42ID:BdsW8ng60
>>942
ちょっとリンク先見てみたけど、微妙な説明してるなぁ
混乱する一番の原因は、
オブジェクトを返すプロパティには、そのオブジェクトの型と同じ名前を使う
っていう指針があるから

Dim r As Range
のRangeは型名(=オブジェクト名)

Set r = ActiveSheet.Range("A1")
のRangeは文法的にはWorksheetオブジェクトのRangeプロパティ
RangeプロパティはRange型のインスタンスを返す

ActiveSheetなんてオブジェクトはないが、これは
Set r = Application.ActiveSheet.Range("A1")
の省略形とみなされるので、ApplicationオブジェクトのActiveSheetプロパティだと解釈される
ActiveSheetプロパティが返しているものがWorksheetオブジェクト(のインスタンス)

Worksheet型じゃなくてSheet型だろとかいう突っ込みとか
Rangeのデフォルトプロパティだろとかいう突っ込みは勘弁な
0959デフォルトの名無しさん (ワッチョイ 9201-MhVQ)
垢版 |
2019/12/01(日) 18:07:13.10ID:Enyr5Fgf0
>>958
> 混乱する一番の原因は、
> オブジェクトを返すプロパティには、そのオブジェクトの型と同じ名前を使う
> っていう指針があるから
違うよ
オブジェクトなんて曖昧な用語を使うから混乱するの
型(クラス)と実体(インスタンス)をきちんと区別すればいいだけ
0962デフォルトの名無しさん (ワッチョイ 69f0-a1aH)
垢版 |
2019/12/01(日) 19:43:10.04ID:oxdJbHeB0
値型はNewしないで参照型はNewするというルールに従うと
別言語でStringは参照型なのに何でNewしなくていいのかと悩んだな
結局参照型でもNewしなくていい場合があるってスルーするのが一番だけど
0964デフォルトの名無しさん (ワッチョイ a9b3-nvwQ)
垢版 |
2019/12/01(日) 20:17:07.69ID:Ta8YhOMq0
え、プロパティの引数って絶対に()つけないといけないの?
そこら辺の文法が謎だわ
本でも説明されてないし
ネットで検索しまくってもプロパティの引数には()をつけろなんて書いてないし
どこでそんな知識仕入れてきたの?
0966デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/01(日) 20:35:21.31ID:Mv7XM2680
>>965
endとかだよ
0969デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/01(日) 21:14:55.98ID:Mv7XM2680
>>968
プロパティの引数に()いるの?に対してその答えはおかしい
0970デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/01(日) 21:23:50.92ID:qadFHjVDx
>>969
ひょっとしてまだメソッド/プロパティの引数指定の丸括弧記法の話をしていたのか?メゾット君
プロパティのアクセサの引数指定は丸括弧必須
戻り値を取得するための命令だから当たり前
0971デフォルトの名無しさん (ワッチョイ f668-3RYV)
垢版 |
2019/12/01(日) 21:51:43.86ID:lg6qJlYj0
>>966
いや、うん。そこじゃないんだ
普通に考えると「プロパティに引数がいるの?」なんだ
プロパティに引数は普通は不要。プロパティは「セルの内容」「列幅」など、取り出すだけのもの
プロパティてのは大体「設定]的な意味

vbaはかなり古く誕生した言語な割に大変長寿で、かなりおかしなことになっているってのはあるけども

>>958に集約されている
0972デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/01(日) 22:00:59.47ID:qadFHjVDx
>>971
クラス側で保持するプロパティという概念自体には引数という観念が成立しないのはその通り
でもこの人が言ってるのは多分プロパティの受け渡しに使うアクセサの引数のことだと思う
0973デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/01(日) 22:13:02.79ID:Mv7XM2680
>>971
設定に引数がなんで必要ないの??
0974デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/01(日) 22:16:58.66ID:Mv7XM2680
アクセサ VBA

はい、なんもヒットしません
初心者に解説する場合、専門用語を使うってどうなの?
0976デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/01(日) 22:28:21.62ID:Mv7XM2680
プロパティに引数もてるとか持てないとかはっきりしろよ…
0977デフォルトの名無しさん (ワッチョイ f668-3RYV)
垢版 |
2019/12/01(日) 22:29:04.82ID:lg6qJlYj0
>>972
おう、これは本気で行くしか無いぞ
>>973
そうじゃなくて、逆なんだ。vbaにはわざわざ引数が用意されている

プロパティの場合、引数じゃなく代入で済ませる方が自然なんだ

cells(1,1),value = "これを設定する"
A1に"これを設定する"という文字列が入る
この場合、プロパティに引数は使われていない。プロパティに直接代入している

本来ならこう書くべきだ
cells(1,1),value.setter("これを設定する")

この辺りはずっとsetter/getterを用意しようぜって流れが主流になった
0980デフォルトの名無しさん (ワッチョイ b1f1-uW/g)
垢版 |
2019/12/01(日) 23:25:29.33ID:19U1wNi50
>>979
「汗臭」で検索してないか?
0982デフォルトの名無しさん (ワッチョイ b1f1-uW/g)
垢版 |
2019/12/01(日) 23:46:59.48ID:19U1wNi50
>>981
なんだとこのツルッパゲ!
0984デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/02(月) 06:20:27.87ID:jajTU6Llx
このあたりの話は自分でクラスを作ったことがなければ分からないと思う
ともあれ、質問者の意図は引数付きのプロパティ式で丸括弧を省略できるかどうかという話なんだろうから、出来ないという結論で締めて終わり
要するにRange("A1")をRange "A1" とは書けない
これだとRangeという名前のSubプロジージャに引数"A1"を与えるという全くデタラメな構文になる
0986デフォルトの名無しさん (ワッチョイ b1f1-uW/g)
垢版 |
2019/12/02(月) 12:07:45.41ID:b+6W/5Or0
Tsuruppage("A1")
0987デフォルトの名無しさん (スッップ Sdb2-iiDQ)
垢版 |
2019/12/02(月) 12:58:25.24ID:bEJSdplkd
初心者にとって感覚的に分かりやすいのは戻りを使う場合はカッコを使う。
戻りを使わない場合はカッコを使わない。
Call文だけ例外でカッコを使う。

で良いんじゃね?
0988デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/02(月) 20:27:37.88ID:HFZWrDUD0
>>987
end(xlup)
戻り値ってなんだ?
0991デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/02(月) 21:03:22.49ID:HFZWrDUD0
>>990
ENDの()のどこが戻り値なのかきいてんだよ…
ガイジかよ
0993デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/02(月) 21:52:36.19ID:HFZWrDUD0
Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlInsideHorizontal

わかりやすくな
プログラム初心者でもわかるように解説しろ
ボーダーには()でラインスタイルには=
どちらもプロパティなはず
なんで?
どれがなにの戻り値なの?ってのを
主語がなかったりテキトーなカタカナでごまかしてるのおおすぎ
0996デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/02(月) 22:13:40.36ID:4BXx3P/Mx
LineStyleプロパティは引数の指定を要求されないプロパティだから()による引数指定は要らない

かつ、Linestyleプロパティは値の読み取りの他に値の設定も可能なプロパティなので、代入演算子の = でxlLineStyle列挙体の定数を設定することにより、罫線の書式を設定できる

プロパティだから()が必要なんだとか=が必要なんだとかっていう単純な捉え方は理解の妨げになるからやめた方がよい

引数による要素の指定を要求/許容しているのか、値の読み取りだけでなく値の設定も出来るのかといった個々のプロパティの仕様の違いにより、式の書き方が変わるだけ
0997デフォルトの名無しさん (ワッチョイ f668-3RYV)
垢版 |
2019/12/02(月) 22:16:41.89ID:gEmwbuWH0
ってかこの一連の問題、すげー難しいよ
初心者を自覚してるならあまり深く考えないほうが良いと思う
得るものは少ない、ぱっと書き方だけ覚えてどんどん次へ進んだほうがいいような
0998デフォルトの名無しさん (アークセー Sx79-CWam)
垢版 |
2019/12/02(月) 22:17:27.68ID:4BXx3P/Mx
WorksheetオブジェクトのCellsプロパティなどは引数なしでも引数ありでも使用できるし、=で値も設定できる
()の要不要とか=を用いた代入の可否なんてプロパティの仕様によるとしか
1000デフォルトの名無しさん (ワッチョイ a901-SL5O)
垢版 |
2019/12/02(月) 22:20:29.46ID:HFZWrDUD0
>>996
引数の要求をされないプロパティ??
linestyleだけではエラーになるのでは?
レンジのラインスタイルです!だけは意味不明でしょ

値の設定?読み取り?
設定 罫線を引く?
読み取り ???
つまりどういうこと?

定数を設定??
bordersの引数も定数では?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 2時間 45分 30秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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