Excel VBA 質問スレ Part48 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8e-Fc1g)
垢版 |
2017/05/16(火) 08:24:45.78ID:iIGA/64l0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489557874/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/06/11(日) 19:08:29.30ID:UNIZBcCUa
>>706
それ、デフォルトなの?
デフォルトって何なの?

って言いたいってこと?
2017/06/11(日) 19:12:53.44ID:UNIZBcCUa
まあ、実際には自分はSetに違和感全く感じないし、Variantで宣言することも殆ど無いし、デフォルトプロパティの省略も殆どしないんだけどね。
2017/06/11(日) 19:20:07.39ID:q49UmmFG0
>>706
> デフォルトプロパティは毎回明示するのか?
>>682 のケースだけね
実際にあるのかどうかは知らんけど w

> cells(1,1)
> だけならエラーを変えした方がいいな
そう言うオプションはあってもいいと思う
2017/06/11(日) 19:21:24.90ID:46pYjw9V0
>709
いやもう言語仕様を考える時って最初によっぽど不具合がなければそれでいいよねってこと
vbaは非常に変則液だけど、まぁエクセル・アクセルのためなら仕方ないんじゃないの
2017/06/11(日) 19:27:31.75ID:q49UmmFG0
>>708
> "必要"とか何が必要?
> という話になる。
はあ?
「区別する」必要がないって書いてあるだろ

>> Print 時点で判断すればいい
> も、何言ってるのか分かりにくい。
お前の理解力がないだけ
何度も書くけど理解できないなら >>648 見ろって書いてあるのになぜか見ずに文句だけは一人前 w
2017/06/11(日) 19:42:43.65ID:UNIZBcCUa
>>713
いや、だから
>「区別する」必要がない
が変なんだって。
代入時点で区別はついてるのになんで必要とかの話になるの?と受けとられるだろ。

> Print 時点で判断すればいい
も、誰が何を判断するんだ?と受け取られる。
2017/06/11(日) 19:42:52.34ID:P5Uv9Xu70
型を意識しようよ

型を意識するというのは型によって構文(式の形)を変えることじゃないよ。
式の形は同じでも型によって意味が違うとかコンパイルエラーになったりすると認識することだ。

デフォルトプロパティが適用されるべきかどうかは等式の左右の型を見れば基本わかる。
わからないような式は曖昧なんだからコンパイルエラーにすべきだ。
2017/06/11(日) 19:49:48.15ID:UNIZBcCUa
>>715
う〜ん。
むしろSet使ってクラスとリテラルを意識したいけどなあ。

あと、真ん中はやっぱりデフォルトプロパティの代入の方がしっくり来ると思うんだ。
だからこそ、あっさりデフォルトプロパティの代入を捨て去ると思えなかったから>>645書いたんだぜ。
2017/06/11(日) 20:02:29.23ID:46pYjw9V0
>>715
application内の型を意識しなくていいための、弱い動的型付けなんだよ
この設計思想は街ぃがってないと思う
2017/06/11(日) 20:12:03.18ID:q49UmmFG0
>>714
> 代入時点で区別はついてる
それはお前が勝手に言ってるだけの話だろ
俺は初めから必要ないって書いてるから
> なんで必要とかの話になるの?と受けとられるだろ。
なんて受けとるアホはいないと思うぞ、お前以外は w

>> Print 時点で判断すればいい
> も、誰が何を判断するんだ?と受け取られる。
マジでオブジェクト指向の勉強しなよ...
そんなのを疑問に思うなんて相当レベル低いから
2017/06/11(日) 20:17:12.06ID:46pYjw9V0
>>682
はだめかなぁ
徹底的に論破してほしいんだけどなぁ
2017/06/11(日) 20:19:33.09ID:P5Uv9Xu70
しかし冷静に考えると斬新かもな。
単一の文だけ見て解釈するんじゃなく、複数の文を見て意味を解釈するプログラミング言語。
2017/06/11(日) 20:25:38.17ID:UNIZBcCUa
>>718
>それはお前が勝手に言ってるだけの話だろ

俺が勝手に言ってるとかの話じゃなくて、代入時点で参照であると区別がついてるのが実態だろ。

>「区別」する必要ない
>Print 時点で判断すればいい

を省略せずにきちんと書いてみなよ。
2017/06/11(日) 20:26:28.99ID:tRESVVuh0
俺の考えた最強の言語仕様の話はよそでやってくれ
2017/06/11(日) 21:00:46.39ID:q49UmmFG0
>>721
> 代入時点で参照であると区別がついてるのが実態だろ。
お前はまず「区別」の意味を調べてから出直してこい
A か B かの区別がつくと言う言い方はあるけど A と区別がつくとは言わん

> を省略せずにきちんと書いてみなよ。
>>648 で十分だろ
それで不十分と言うならほぼ同じこと書いてる >>691 も不十分と言うことだ w
2017/06/11(日) 21:12:26.64ID:VtUxFQZs0
いつまでくっだらねーーーーーーーー話を続けるつもり?別スレでも立ててそこでやれよ
2017/06/11(日) 21:17:53.56ID:P5Uv9Xu70
もはやどこが起点かわからない
2017/06/11(日) 21:31:09.13ID:P5Uv9Xu70
だれかQiitaにまとめてくれ
2017/06/11(日) 21:46:23.06ID:UNIZBcCUa
>>723
お前な、自分は省略してるのに俺の省略は認めないのか?

代入時点で参照であるとデフォルトプロパティとは区別がついてるのが実態だろ。

>>691は省略しても分かるだろ。
>>663は省略されてると分からんのだよ。
というより省略しなかった時に正しい日本語になるように思えないからやってみろと言ったんだよ。
728デフォルトの名無しさん (ワッチョイ e511-Z3xB)
垢版 |
2017/06/11(日) 21:54:15.52ID:7YVvLMef0
以下のエクセルファイルについてなんですが
https://kouseikyoku.mhlw.go.jp/tohoku/gyomu/gyomu/hoken_kikan/documents/zen_sitei_ika_h2905.zip


エクセルを開いたあと何もせず閉じようとすると
必ず保存するかどうかを聞かれてしまうのですが
なぜでしょうか?
また、そのまま「保存する」を選択すると
ファイルサイズが半分くらい減ってしまうのも気になります

些細なことで申し訳ありませんが
どなたか原因わかる方教えてください。
2017/06/11(日) 21:56:59.58ID:46pYjw9V0
>728
凄まじい個人情報でてる気もするけど、まぁいいか
・保存するかどうかを聞かれ
2010では聞かれない

揮発性関数とか混じってるのかもな

バージョンを教えてほしい
2017/06/11(日) 22:06:15.50ID:P5Uv9Xu70
>>728
保存するかどうかなんて聞かれないな
数式もないようだ
2017/06/11(日) 22:10:07.67ID:q49UmmFG0
>>727
> 代入時点で参照であるとデフォルトプロパティとは区別がついてるのが実態だろ。
だからそれはお前が勝手に言ってる話
そもそも区別がつくとか言ってるが勝手につく訳じゃなくて処理系が何らかの判断をしてるんだからそんな判断は「必要ない」って書く方が適切だろ

> >>663は省略されてると分からんのだよ。
話の流れ見てたらわかるし、わからん奴のためにアンカーまで書いてるだろ
何回ループするんだよ
2017/06/11(日) 22:46:10.07ID:KFvNUsfN0
>ファイルサイズが半分くらい減ってしまうのも気になります

減った状態が正しいファイルサイズなんじゃないの。
2017/06/11(日) 23:33:20.89ID:49bQJmPP0
なんか、何時何分何秒地球が何回回った時ですかあ?と同レベルのやりとりだな
2017/06/12(月) 00:17:03.07ID:y5ZQ52Yx0
>>731
やっぱり日本語の問題なんだ。
今をもってしても分かりにくい。

俺が「区別がつく」とか「区別がついてる」というのは「自動的に区別がついてしまっている」ということだ。
「区別がつく」自体に"自動的に"というニュアンスを含んでいる。
だから"勝手に"などという言葉は繋がらない。
"自動的に"というニュアンスを含んでいない場合、例えば意思をもって違いを定義する場合は「区別をつける」となるだろう。

一方、君の言う「判断する」というのは厳密に言えば「意思をもって判断する」ということだ。
「判断する」自体に"自動的ではない"というニュアンスを含んでいる。
君は処理系に対して擬人化を行っているから意思をもってではなく、自動的なニュアンスを含んでいるつもりだろうが、そうであるなら主語である"処理系"を省いてしまってはわかりにくくなるだろう。

これまでの経緯を無視した上で余計な補完をして

処理系が何らかの判断をしてるんだからそんな"俺の"判断は「必要ない」

としても日本語としておかしな文とはならないということは、「処理系が何らかの判断をしてるんだからそんな判断は必要ない」という文章はそれ単体では上記の受け取り方をされても仕方の無い文章だということだ。

今だに分からんのは>>663の判断するのは誰かって話。
処理系なら判断すれば"いい"などとはならないと思うし。
Print時点で決まっているんだから判断とかいう話にはならない筈だろ。
2017/06/12(月) 00:24:47.55ID:Ch/XnpW30
┐(´д`)┌ヤレヤレ
2017/06/12(月) 01:25:41.57ID:YlzHeDxH0
>>682
foo君久しぶりじゃんwww


つかお前らhgだからって不毛な争いしてんじゃねえ
よそでやれクズ共
2017/06/12(月) 01:28:29.93ID:YlzHeDxH0
>>728
ワッチョイ e511-
臭う
2017/06/12(月) 05:44:51.02ID:RhdpYx9V0
長文君はなぜか自分の日本語能力を疑わない w
2017/06/12(月) 08:46:55.31ID:ZaZcTWz8x
>>736
承認するよ
740デフォルトの名無しさん (ワッチョイ e511-yTT2)
垢版 |
2017/06/12(月) 19:32:27.05ID:5L3xq22d0
%%%MC+7,8%%%

}

000-"M","LES","TUV=0.13325&/0\7&%&",

001-"23","1","0","2","7.14",[\b%7/1444*%812%2.3%7&6111\end\\]{%3%12%\br
2017/06/12(月) 20:31:46.57ID:ysyGP+YI0
>>740
マジで?
742デフォルトの名無しさん (ワッチョイ eb4c-irun)
垢版 |
2017/06/13(火) 10:48:41.12ID:UX2HAupn0
マクロは記録をいじるぐらいの初心者です

AとBファイル開く
Aのマクロ作動ボタンを押す
BでAで作ったマクロが動き、データが整形される
Aファイルが閉じる

というのを作れるものなら作りたいけど、可能ですか?
Bファイルは毎日新しいのが来ます
出来るとしたら検索ワードが悪いらしく、見つけられないので
なんという動作なのか教えてください
2017/06/13(火) 11:35:01.49ID:P4se3SJtd
>>742
Aは自分の手元にあるブックでBは他所から届くのか。

「BでAで作ったマクロが動き、」の意味がよくわからない。
なんとなく簡単ぽいけど
2017/06/13(火) 11:35:40.67ID:mycfBP+w0
workbook.open
記録ではできない
745デフォルトの名無しさん (ワッチョイ eb4c-irun)
垢版 |
2017/06/13(火) 12:08:11.62ID:UX2HAupn0
>>743
Aは自分のパソコンに作ったもので、Bは毎日他所からきます。
Bを開いてそこからAで作ったマクロを動かすしかダメですか?

>>743
記録ではムリなので、見本となるのがあればいじれないかなと思って聞いてみました
2017/06/13(火) 12:14:45.05ID:rPkjB82P0
>>742
Aのブックにマクロを記述
 ファイル名が固定でないなら GetOpenFilenameでファイルを選択
 ごちゃごちゃなんか知らんけど開いたブックBに対して処理をする
 Aを閉じる(ついでにExcelそのものも終了させる)

だろ?
747デフォルトの名無しさん (ワッチョイ eb4c-irun)
垢版 |
2017/06/13(火) 12:31:59.08ID:UX2HAupn0
>>746
そうです

マクロのボタンの作り方とか調べても、同じファイル内で
動くものしか出てこないので、ボタン一押しで動かせないのかと
そういう話です
748デフォルトの名無しさん (アウアウウー Sa99-pGgJ)
垢版 |
2017/06/13(火) 12:32:20.96ID:5pkXRrDKa
星くん vbaでググって
第2章読めば似たようなことが書いてあるよ
2017/06/13(火) 13:52:35.48ID:TodKlzHt0
>>742
普通はアドインにする。
Aファイルは開く必要が無い。
アドインならExcel開いたらAファイルも開いてる。
ブックは非表示だから開いてるようには見えないけどメニューにボタンを追加すればマクロは動作する。
2017/06/13(火) 14:48:02.77ID:3KAtKhUpH
>>749
君の中では普通かもな
2017/06/13(火) 14:50:25.60ID:B6CxFrBV0
@@@EMO@@@
}
000-"E=0.133348213376128"
001-"4","1.6","2","3","13","3","81","47","0","1","2","85",
002-"813-1>>>1%$1.3Q!@!$%81.3!$%B,61.2,"13.2"21.7[[%$EMOLA\%/7#/OBLA[%!\2.3=0!&#%<<<Q,S,L,7P,%41%-%2]]%End\]{
752デフォルトの名無しさん (ワッチョイ eb4c-irun)
垢版 |
2017/06/13(火) 14:52:38.21ID:UX2HAupn0
アドインで出来きました
すごい

星君も読みつつあったのですが、とりあえず
アドインが上手くいったのでこれで進めます
相談に乗ってくださった方々、ありがとうございました
2017/06/13(火) 15:04:10.26ID:y6bvTk4c0
>>742
Sub foo()
Dim WB As Workbook

With Application.FileDialog(msoFileDialogFilePicker)
If .Show Then src = .SelectedItems(1)
End With

If IsEmpty(src) Then Exit Sub

Set WB = Workbooks.Open(src, 0, 1)

Process WB

If Not WB Is Nothing Then WB.Close: Set WB = Nothing
End Sub

Sub Process(WB As Workbook)
'行いたい処理
End Sub

fooをボタンに登録すれば好きなファイルを指定して開くことが出来る。
ファイルBの処理はProcess内に書く。
2017/06/13(火) 15:07:40.67ID:y6bvTk4c0
既に解決している悲しみ
2017/06/13(火) 15:25:46.39ID:mycfBP+w0
そして求められていない汎用性のために冗長なコード
756デフォルトの名無しさん (ワッチョイ a3b3-YGYj)
垢版 |
2017/06/13(火) 18:18:21.99ID:Te/HyupM0
事務職向けマクロなんだから冗長でも何でも良いと思うけどね。オブジェクト指向バカとか
業務妨害以外の何者でもないと思うしw
2017/06/13(火) 18:24:08.96ID:3KAtKhUpH
という思考停止
2017/06/13(火) 18:43:27.69ID:kYQNn7N60
上げでちょっと変わった質問する人と
foo君がセットで登場するのはたまたまだから
ほんとに偶然だから
2017/06/13(火) 18:47:56.47ID:3KAtKhUpH
>>758
お前がfoo君と呼んでるのは一人ではない
2017/06/13(火) 18:58:03.59ID:SvV5ll3TE
( ´_ゝ`)フーン
2017/06/13(火) 19:10:28.45ID:YXJzvR0D0
>>756
エクセルがモロにオブジェクトだから、自然とみんなオブジェクト指向バカになるんだな、これが


>>760
そこはfoonじゃないかな?かな?
762デフォルトの名無しさん (ワッチョイ a3b3-YGYj)
垢版 |
2017/06/13(火) 19:18:04.89ID:Te/HyupM0
>>761
ははは、オブジェ馬鹿降臨w
2017/06/13(火) 20:06:15.93ID:YXJzvR0D0
>>762
LISP、Haskell、Schemeは本当に使いこなせなかった
君の指摘は正しいよ
2017/06/14(水) 16:29:22.88ID:Gr+r/r4M0
初心者です

1 処理A
2 処理B
3 処理C
  :
  :

こういう流れのVBAで、処理Aと処理Bそれぞれからスタートさせたいときは、どうやるのが一般的ですか。

sub A
 処理 A
sub B
 処理 B
end sub
end sub

これではだめですよね。
2017/06/14(水) 16:40:22.05ID:M/IwJ83O0
>>764
いまいち何やりたいのか分からないけど、処理 Aを飛ばしたい場合とそうでない場合があるって事なら

Sub Foo(b As Boolean)
If b Then 処理 A
処理 B
処理 C
...
End Sub
2017/06/14(水) 17:02:48.98ID:bVPmX3VEa
処理というのがどのレベルなのか分からない。

Sub A()
処理A
B
End Sub

'処理B(Bプロシージャ自体が処理B)
Sub B()
'処理Bの内容
End Sub

とする場合もあれば、
全部の処理をそれぞれ別のプロシージャとして作り、メインとなるプロシージャでそれぞれをよび出す場合もある。
この場合はAからよび出すメインプロシージャやBからよび出すメインプロシージャを作ることになる。
2017/06/14(水) 18:56:34.83ID:e2eXjlywM
>>764
1 処理A
2 処理B
3 処理C
  :
  :
のパターンと
1 処理B
2 処理C
  :
  :
のパターンがあるってこと?
それなら >>765 みたいにするか
Sub ABC_()
 処理A
 Call BC_
End Sub
Sub BC_
 処理B
 処理C
  :
  :
End Sub
ってやるとか
2017/06/14(水) 22:27:07.82ID:Gr+r/r4M0
ありがとうございました

自分なりに考えたのは、どこかのセルにフラグを置いといて、
処理中に分岐させるというものでした

767さんがわかりやすいですが、>>765のやり方を勉強してみます
769デフォルトの名無しさん (ワッチョイ ba52-2WTa)
垢版 |
2017/06/16(金) 11:40:46.40ID:uw1+X6cJ0
拡張For文とも言われる
For Each (オブジェクト変数) in (そのオブジェクトのコレクション)
の構文で、ときどきその(オブジェクト変数)の処理によってFor Each文でまわすコレクションのオブジェクトの順番や数が変わってしまい困っています。

例えば
For Each iCell in Activesheet.UsedRange
である条件のiCellのときにその直下に新しい行を追加したり
For Each iFile in TargetFolder.Files
でiFileのファイル名を変えようとした場合に(FileSystemObjectを使ってる)
発生しました。

こんなときは処理結果が意図したものと違ってぐちゃぐちゃになって困っています。
最初にFor Eachの行をマクロが通過したときに処理すべきオブジェクトは固定されないんですか?
2017/06/16(金) 12:07:15.60ID:Qtgdul+t0
For Eachで列挙される順番は、実装依存で保障はされてないはずだけど
普通は同じコレクションに対しては同じ順で帰ってくるよ

For Eachで列挙中にそのコレクションに対して変更した場合は、その列挙はどうなるか分からん
なので要素を増減させるような処理はFor Eachの中でやっちゃ駄目
2017/06/16(金) 12:11:25.66ID:BvP/dFhV0
ループ処理中に処理対象を変更したら当然おかしくなると思うが…
772デフォルトの名無しさん (ワッチョイ ba52-2WTa)
垢版 |
2017/06/16(金) 12:30:40.42ID:uw1+X6cJ0
>>770-771
そんなことはアホなオレでもわかっとりますわ。

その上でそれを回避するような定番な方法や定石的手順の方法を知りたいのですが。
2017/06/16(金) 12:33:46.29ID:pJSV/jBP0
>>772
ループ内で対象を記録しておいて後で書き換えるとか
一時保管場所を作って蓄積してから元の場所へ戻すとか
774デフォルトの名無しさん (ワッチョイ ba52-2WTa)
垢版 |
2017/06/16(金) 12:39:06.98ID:uw1+X6cJ0
>>773
しかしそれでも記憶させておくものは参照のメモリアドレスには変わりないと思うから
対処によってこの参照先が変わってしまい同じような意図しないぐちゃぐちゃな結果になったりしませんかね?

あとわからないのがFileSystemObjectでファイル名を変えただけで対象が変わってしまうのが不思議。
これは別に要素の増減でもなんでもないのに。
2017/06/16(金) 13:09:33.45ID:pJSV/jBP0
>>774
しませんかね? と質問する前に自分でテスト環境作ってやってみるべき。
2017/06/16(金) 13:14:04.57ID:Qtgdul+t0
>>772
>その上でそれを回避するような定番な方法や定石的手順の方法を知りたいのですが。
For Eachを使わない
単純に減るだけならFor Nextで逆順に回すのが定番

あとはループ用に別の列挙(コピー)を用意するか

>>774
FSOがどんな管理になってるかしらんが、名前の変更ってことは
古い名前の削除+新しい名前の追加 だと考えれば不思議はない
2017/06/16(金) 13:24:05.09ID:LikhkzB3a
そもそもActivesheet.UsedRangeなんだからシートに処理加えたら要素の数が変わるのは当たり前だろ
一回変数に入れたら困るわけ?
多分fsoのfilesも変数に入れたら固定されるんじゃねえの
2017/06/16(金) 15:36:15.71ID:OvmXQ03X0
ユーザーフォームのボタンをクリックしたとき、ある条件を満たせばボタンの背景色を変えてます。
CommandButton1.BackColor = "&HFF00FF"

ボタンの色を元に(ボタンのデフォルトの色に)戻すのに↓だとエラー(型が一致しません)。どうすればいいんでしょうか?
CommandButton1.BackColor = "&H8000000F&"
2017/06/16(金) 16:08:49.37ID:0rZ836RR0
>>778
Debug.Print Typename("&HFF00FF")
Debug.Print Typename("&H8000000F&")

なんで""で括ってるの?
2017/06/16(金) 16:34:33.26ID:OvmXQ03X0
>>779
""は不要でしたか。たぶんどこかのサイトにそのような記述があったんだと思います。
↓でエラーなく色変わりますが""なくてもよかったのか。
CommandButton1.BackColor = "&HFF00FF"

debug.printの結果はstringでした。そりゃそうか。
2017/06/16(金) 16:41:13.41ID:OvmXQ03X0
>>779
あ、書くの忘れてました。
↓これの""を取ったらエラー出ず色がもとに戻りました。ありがとうございました。
CommandButton1.BackColor = "&H8000000F&"
2017/06/16(金) 17:59:38.04ID:LikhkzB3a
>>778
&H〜&は16進数だったかな
2017/06/16(金) 21:04:08.81ID:8NWwObqWM
>>774
VBAのforeachは扱いづらいよね。
for each file in folder.files なんかは一度別の配列なりcollectionなりに入れちゃった方がindexが動かないから無難。
range.deleteやrange.insertは一度のループで処理しようとせずに、別にループを回すか、index降順でループするのが無難。
2017/06/16(金) 21:12:24.56ID:QcYuYCTF0
for eachとcells()は相性が悪い
cells().deleteを絡めると参照が変な位置に飛ぶ(気がする)。理由はわからん
deleteを絡めるならfor next step-1にしたほうがいい
2017/06/16(金) 21:13:11.64ID:OvmXQ03X0
>>778です。何度もすいません。
>>778の質問はダブルクオーテーションマークを削除して解決しましたが、
なぜ、CommandButton1.BackColor = "&HFF00FF"、はエラーが出ずにボタン背景色が変更され、
CommandButton1.BackColor = "&H8000000F&"、これだとエラーが出るのか教えて頂けないでしょうか?
786デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 21:14:43.63ID:82cvwDvY0
>>785
エラーが出る方は桁数が多いからじゃね?
2017/06/16(金) 21:15:01.98ID:OvmXQ03X0
>>785
ちなみに、VBAはマクロの記録したものをネットで検索してちょっといじくる程度の初心者レベルです
2017/06/16(金) 21:20:26.65ID:QcYuYCTF0
>>774
VBA独特のnewの特殊な仕様や、
setする度に生成される謎参照
vbaのforeach中に要素数を増減させるのはやめた方がいい
俺も絶対にしない。単純に間違うし、なんで間違うかもわからんから

Sub foo()
Set a = Cells(1, 1)
Set b = Cells(1, 1)
Debug.Print (a Is b) 'falseになる。参照しているアドレスも違う
End Sub
2017/06/16(金) 21:20:57.72ID:OvmXQ03X0
>>786
"&H8000000F&"の方が文字数が多い(桁数が多い)というのはわかりますが、それでなぜエラーが出るのでしょうか?
2017/06/16(金) 21:22:35.82ID:nh1Jx8jt0
>>785
CommandButton1.BackColor = "&H8000000F"
でどう?
2017/06/16(金) 21:24:07.49ID:QcYuYCTF0
>>789
コンソールで以下を叩いてみれ
? &H8000000F
792デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 21:25:32.82ID:82cvwDvY0
>>789
色の取りうる範囲を超えた値だからかな
2017/06/16(金) 21:29:07.51ID:8NWwObqWM
>>785
colorはlong型なので、右辺はlong型にキャストされている。
そんで、右辺=2147483663は、そもそもlong型の上限を超えているのでエラーになる。
まあその前に、色は256の3乗=16777216パターンなので、そこではねられてるかもしれない。
2017/06/16(金) 21:37:27.08ID:Wj1oysWPa
Debug.Print Typename(&H8000000F&)
Debug.Print Typename(Val("&H8000000F&"))

Longに見える文字列でも自動型変換では以前の型は考慮されないと思う。
795デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 21:43:40.45ID:82cvwDvY0
>>794
typename(clng("&H8000000F"))
なんじゃね
2017/06/16(金) 21:49:00.55ID:Wj1oysWPa
>>795
それじゃLongになっちまうだろ。
"&H8000000F&"が型変換でどう解釈されたかを調べてるんだぞ。

わざわざ最後に&付けてLong指定してるのにどうしてDoubleになるのかと言えば&付いててもStringなんだから&は考慮されないと予想。
2017/06/16(金) 21:49:23.66ID:YneIl6smM
確認したら、
clng("&800000F") => -2147483633
でキャストは通るね。間違い書いてすんません。
798デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 21:51:25.40ID:82cvwDvY0
そもそもエラーって何のエラーかわかってないんだが
何エラー?
2017/06/16(金) 21:52:52.22ID:Wj1oysWPa
>>798
Long型のプロパティにDouble型の値を代入しようとしたエラー
800デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 21:55:42.55ID:82cvwDvY0
>>799
エラーメッセージにそう出るの?
エラーメッセージを解釈した結果?
2017/06/16(金) 21:57:25.30ID:YneIl6smM
.backcolorプロパティ内で範囲外エラーを返しているのかと思ったけど違うのかな?
2017/06/16(金) 21:58:00.70ID:Wj1oysWPa
>>800
解釈した結果
そのために>>794書いたつもり。
2017/06/16(金) 22:02:09.58ID:Wj1oysWPa
>>801
""取ったらエラー出てないし、エラーも型が一致していないってことだから。
まあ、同じことでしょ。
804デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/16(金) 22:02:42.94ID:82cvwDvY0
>>802
それだと本当はDouble型かLong型かわからなくね?
暗黙の型変換でlong型になってるかもしれない

colorプロパティはlong型みたいだし
2017/06/16(金) 22:25:40.96ID:Wj1oysWPa
>>804
Val("&H8000000F&")はDoubleだけど、
"&H8000000F&"を暗黙の型変換した場合はLongかも知れないということ?
だったらエラーは出ないんじゃね?
2017/06/17(土) 03:41:22.96ID:5p5fyGrH0
暗黙の変換やClng関数は、型指定文字があるとエラーになる
それだけ
ちなみにValは、型指定文字を無視する

試したけど
暗黙の変換でLongに収まらないときはオーバーフロー
型指定文字が入ってるときは型が一致しません
エラーの種類違うし
2017/06/17(土) 05:35:44.93ID:sBDEiRXs0
>>792 >>801
&H8000000F は RGB値ではなくシステム カラーだと思うのだけど?

システム カラー定数
https://msdn.microsoft.com/ja-jp/library/office/gg264801.aspx
808デフォルトの名無しさん (ワッチョイ ba91-XHCC)
垢版 |
2017/06/17(土) 05:54:42.06ID:Zt5CuQ5d0
>>807
"で囲ってない時はシステムカラー定数と認識されるけど
"で囲ってる時は型変換されてlong値になって値の範囲が不正になるのかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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