[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/09 14:54 / Filesize : 339 KB / Number-of Response : 1038
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part51



1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net]

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

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

※関連スレ
VBAなんでも質問スレ Part2
mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


382 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 18:16:29.95 ID:3k7CQU1Hd.net]
質問です。
シミュレータソフトをVBAを使って制御しています。順々にモデルを解析していき、逐次計算結果がエクセルに反映表示されるような動作をします。
ただそのとき、きちんと逐次結果が表示されていく場合と画面に全く結果が表示されずプログラムが終わった途端に一気に数値が表示される場合とがあります。
途中でも解析結果が分かるよう安定して逐次表示するようにしたいのですが解決策分かる方いたら教えてください。

なお画面更新はもちろんオンです。調べたところdo eventsというのでWindowsに制御を渡すやり方もあるようですが、途中の動作が割り込む可能性がありそれは避けたいです。

383 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:13:35.05 ID:jJUgyerEM.net]
自分も普段はほとんどコメント書かない。
適切な命名とコードの流れで処理は説明して、意図や補足説明にコメントを書くのが正しいと思ってる。
ただ、VBAではかなり細かく書いてる。理由は、VBAの時点でどうやっても読みづらいから。
勝手に行間調整するせいで
int n
WorkBook book
みたいな整列ができないし、Dim n As Integerって構文自体が無駄な単語多くて、数並んでいると読む気がなくなる。
スコープの区切りにEndを使うのも()よりコードに埋もれて見づらいしVBEの色設定は貧弱だし。
VBAに限ってはコメントで処理追った方が楽だって最近は思ってる。
早くエクセル操作に向いたもっとまともな言語出ないかな。

384 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:16:35.83 ID:wpv6YuQca.net]
そうか、ここもvba方式なんだった。
int__________a
WorkBook___book
みたいにタイプと変数名で表っぽく配置することね。

385 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:34:22.58 ID:tPe4A27O0.net]
>>374
VBAは宣言しないのがデフォなんだから、いちいちDimなんちゃらってやってたら、そりゃ不便だろ。

386 名前:デフォルトの名無しさん [2017/12/08(金) 20:15:19.13 ID:F+K0Jtko0.net]
>>376
そうではなくて、変数の宣言構文がシンプルではないところを言っていると思うよ。

387 名前:デフォルトの名無しさん [2017/12/08(金) 20:45:47.90 ID:kuqPkTCcd.net]
やれやれ、また長い関数を書いてしまった

388 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:25:45.78 ID:naguWC2La.net]
宣言しない奴のコードは読みたくないな。
宣言全部入れてから持って来いと言うかも。

389 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:27:01.02 ID:vu3Y0INla.net]
>>375
VBAに慣れてれば、そんなの違和感無いけどな。

390 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:39:08.64 ID:vu3Y0INla.net]
>>373
それじゃコメントのしようがない。
どんな風に制御しているのかとか、結果はそのシュミレータソフトから取ってきてるんだろうけど、そこから逐次結果が得られてるのかとかの詳細が分からんと何とも言えない。



391 名前:デフォルトの名無しさん [2017/12/09(土) 11:52:36.39 ID:oQ1pndO0d.net]
Debug.Print もApplication.Statusbar もちょっと処理が重くなってくると表示が止まって役に立たない

392 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 13:26:29.70 ID:Px3+LsGd0.net]
>>382
Debug.Printの次にDoEventsを書けばすぐに出力される

393 名前:デフォルトの名無しさん [2017/12/09(土) 20:32:20.11 ID:uW7BpcjHa.net]
コメント関連ありがとう。
もう、人には見せない用だけどくどいくらいコメント書きまくってるw

394 名前:デフォルトの名無しさん [2017/12/10(日) 08:18:11.50 ID:PzHPENwqa.net]
VBAの開発環境について
デバッグ作業してると2画面欲しくなるんだけど皆さんどうしてる?
vBEの画面と通常の画面をフルスクリーンで見たいし、VBEもコード書き込む画面のほかに現在の変数が分かる画面と実行結果が分かる画面が欲しいからノート1台でやってると画面グチャグチャ

395 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 08:41:31.53 ID:2VZ9i3vi0.net]
ノートはUPS付きのデスクトップとして使ってる
24インチのモニタに繋いで
無線キーボードとマウスで操作

396 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 09:29:22.82 ID:s+zBVK9X0.net]
モニタ2枚でやってるけど
ツールボックスのウィンドウとかフォームが画面の境界に表示されたりして
地味に対応していない感を醸し出してる。
フルHD以上なら1枚でもVBEを端っこによけておけば窮屈じゃないと思う。

それよりエディタの貧弱ぶりをどうにかしてほしい。
今時のIDEを触ると、VBEはふた昔前のオマケ機能なんだなと思い知る。

397 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 12:22:00.56 ID:w7IPLNC5r.net]
まあデバッグが必要になる様なマクロなんかこさえんなっで事だ

398 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 13:02:23.44 ID:rJurKCVR0.net]
デバグが不要なマクロって相当短くないと無理だろ

399 名前:デフォルトの名無しさん [2017/12/10(日) 19:23:33.18 ID:RKQe6ZfS0.net]
バグ発生に関与する要因としてコードの量のみを気にかけている
→ 初心者またはそれに準ずる低スキルのもち主

>>388を受けてバグが一切発生しない事を想定している
→ 0か100でしか物事を考えられないアスペ

デバッグをデバグと言っている
→ ガチのジジイか極端にセンスの悪い意識高い系

たった一言でここまでプロファイリング出来ました

400 名前:デフォルトの名無しさん [2017/12/10(日) 20:54:53.56 ID:DUp9AezHa.net]
え??コード書き書きしたら一度も動作チェックしないで実装するの?
すげー!
ほぼ途中で止まって黄色くなる身としては信じられない.
全ての動作の確認と変数の動作に変な所がないか見るの楽しい.
それに人が書いたコードで動作チェックするにもf8必要だし
ただ、F8連打も大変だから超ゆっくり動作する機能でもあればいいのに



401 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 21:56:00.33 ID:tyDER63C0.net]
虫見付けるたんびに「バッグだ!バッグだ!」言うんか 自分の発言に違和感無いんか

402 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:02:23.86 ID:UfhTQ4hV0.net]
プログラムがおかしい以上バグはバグだ
開発中に個人で見つけてるから影響が小さいというに過ぎないが
べつにいいじゃんバグでも

403 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:28:29.51 ID:rJurKCVR0.net]
リリース版を出すかどうかをデバグ作業と呼ぶかどうかの境界線にしてるって事なのかな?

バグまみれでリリースして、ネット経由でパッチを当てるのが当たり前になった事が原因で、
そういう感覚が生まれたって考えるとなかなか興味深い現象だな。

404 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:54:03.35 ID:5raOMeRU0.net]
お前、リアルで嫌われ者だろ

たった一文でここまでプロファイリング出来ました

405 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:42:33.59 ID:05lOR9eq0.net]
質問です。(スレチかもだけど、他よりここの人たちのほうがLevel高そうなので)
Excel2013 @Win10 64bit Core i7 Mem8GB

ここ数日でAutoFilterのパフォーマンスが急に悪くなったと感じています。
テーブルは2000行*50列程度。
症状としてはフィルタリング済みのシートをSelectする際にタイムラグが発生します。
最初原因が分からなかったのですが、設計を少しずつ切り落としていった結果、
フィルタ範囲に入力規則が設定されていたのが原因でした。
その内容はIMEOffのみ。
フィルタがかかってない場合は瞬時にシート切替できるのに、フィルタリングされていると
切替に数秒待たされます。
フィルタ列が増えるとラグが倍増します。
また、列要素の先頭行付近の要素でフィルタされている場合の方が影響が大きいです。

2〜3日前までこのようなことはなかったのに、、何かExcel環境自体がかわったのかと
思いくまなく調べるのですが、原因が掴めません。
(つづく)

406 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:43:42.33 ID:05lOR9eq0.net]
>>396
(つづき)
マクロやシート上の把握できていない設計要素の影響を除外するために新規xlsxファイル
で試しました。
前提:評価ブック以外のブックは開かない。
シート1:2000行*50列の表を作成、A-Zの1文字をランダムに埋め、AutoFilter設置。
    書式設定、条件付き書式等は一切行わない。
    入力規則は評価条件とする。(IME制御なしの場合とIME-Offの場合)
    フィルタ実施時は、2列絞り込む。
シート2:空シート

評価用Macro(シート1)
Option Explicit
Dim st As Single, ed As Single

Private Sub Worksheet_Deactivate()
st = Timer
End Sub
Private Sub Worksheet_Activate()
ed = Timer: Debug.Print ed - st
End Sub
(つづく)

407 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:44:00.59 ID:05lOR9eq0.net]
>>396
(つづき)

評価方法:
1)フィルタ設置のシート1を表示
2)Ctrlキーを押しながら、PgDn→PgUpを連続して押下。
3)Immediateウィンドウで計測時間を確認。
上記を5回程度実施

条件と結果:
Case IME制御なし+フィルタなし ▼平均時間:約70msec
Case IME制御なし+フィルタ-On ▼平均時間:約70msec

Case IME-Off+フィルタなし ▼平均時間:約70msec
Case IME-Off+フィルタ-On ▼平均時間:約7000msec

ちなみに1列フィルタリングした場合は、約1400msec程度でした。

対症療法としては「入力規則使うな」となりそうですが、2〜3日前までは上記
現象は発生していなかったので、、原因療法が知りたいです。

どなたか上記現象分かるかたいらっしゃいませんか?

408 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:47:36.15 ID:VPQqZskd0.net]
>>398
思い当たるのは、FCUでIMEの挙動がおかしくなったという報告多数な件

409 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 03:47:36.99 ID:/hRyHJmR0.net]
>>399
Version1703なのでまだFallは当たってないようです。

410 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 11:20:26.75 ID:TIu41blJ0.net]
ホントMSはアップデートなのかウイルスなのか分からんことするよな・・・



411 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 13:06:28.39 ID:NoGJiqM0H.net]
>>401
ちなみに職場の環境
 Excel2010 @Win7
 Excel2013 @Win8
では再現しませんでした。
やっぱりなんらかのUpdateが当たったのか、それとも自分でなんかやらかしてるのか、、、

412 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 13:32:28.01 ID:pEROMoD00.net]
午前中にメッセージが出てアプデするか? とか聞きゃあがったから「あいよ」ってんで気軽に再起動した
90%ぐらい完了した後で Cannot だってやんの しょーもないから電源落として午後

413 名前:再起動したら
また「アプデするか?」 って もうね、アホかと
[]
[ここ壊れてます]

414 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 01:03:48.16 ID:vtwEo9S/0.net]
Windows
押しつけがましいアップデートメッセージが出て
いいえしまくってたんだけど
ちょっと目を離して風呂入ってたら勝手に合意したことにしてOSインストールされてた

そんな俺が客先で作らされてるのは顧客が一日黙ってたら契約に合意したことになるシステム

415 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 04:17:56.67 ID:VGkGFTOK0.net]
質問です。
LastCellって簡単に取得できるのにHomePositionってこれといった決定打がないんですかね?
SendKeys以外で簡単に安定して取得する方法ってありますか?
できればSelectしなくてよい方法で。

416 名前:デフォルトの名無しさん [2017/12/12(火) 11:56:45.28 ID:R9+tEHmjd.net]
ADODB.Streamで大きめのテキストファイルを読むときLoadFromFileが重いので、Openの引数でファイル指定してから
ReadTextするようにしたいんですがうまくいきません。
パスをそのまま書いても、"file://C:temp/data.txt"のような書き方をしてもことごとくOpenのところで落ちてしまいます。
どう書けばいいんでしょうか?
ちなみに先頭100行を試し読みするときとかに使いたいです。

417 名前:名無し mailto:sage [2017/12/12(火) 12:18:28.61 ID:KlMiw57eM.net]
>>406
それならコード貼ったほうが早い
使い方云々が知りたいだけならググればいいし

418 名前:デフォルトの名無しさん [2017/12/12(火) 12:50:26.86 ID:R9+tEHmjd.net]
>>407
スマホなのでちょっと待ってて

419 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 11:40:21.94 ID:5F7kXiJk0.net]
名前を付けて保存する際
最近使った“アイテム”が
今週〜,先週〜,しばらく前,という順番で使用履歴の各ファイル名が表示されます。

これを表示させない設定を教えてください。
よろしくお願いいたします。


スペック

OS=Win10
Excel2016
Officeバージョン=1710

420 名前:デフォルトの名無しさん mailto:407 [2017/12/13(水) 14:40:49.78 ID:5F7kXiJk0.net]
↑すいません、質問するべき板を間違えました。ここはVBAでしたね。
他で聞いてみます。



421 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 22:03:05.49 ID:lbNGI0B20.net]
チョイ前に変数の宣言が話題になってたから俺も一ネタ言いたい

「redim で変数の宣言が出来る仕様はやめて欲しい」

変数名を間違えた時にエラーで気付けるように普段から変数の宣言を強制してるんだけど、
redim で配列を変更する時に変数名を間違えても
新たな別の変数扱いされてエラーにならないから気付かないことがある

配列変数でも宣言は dim 、要素変更は redim っていう風にしといてくれたらと願ってやまない

422 名前:デフォルトの名無しさん [2017/12/13(水) 23:22:51.89 ID:b+I23nON0.net]
Application.GetOpenFilename でファイルのパスを求められることが分かった

Application.GetOpenFilename
Workbooks.Open.Filename:=Application.GetOpenFilename
ってできないことが意味がわらない



あと
Workbooks(Application.GetOpenFilename)ってやるとパス付のでエラーになってしまうこともわかった

Workbookオブジェクトに適当な変数を宣言して iとする
i = Application.GetOpenFilename
i.worksheet()ってできない意味がわからない

i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
i.worksheets()

これならできる意味がわからない
()で戻り値をくくるのはわかる
でもこの場合の戻り値はパス付戻り値であるから Applcation.GetOpen....
はいらないのでは?パス付戻り値ならば
i = Application.GetOpenFilename
でもできるのでは?WorkBookオブジェクト変数だから

誰か答えられる?

423 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 23:34:03.63 ID:fRI8/I3E0.net]
そういう言語仕様なので

424 名前:デフォルトの名無しさん [2017/12/13(水) 23:49:56.82 ID:b+I23nON0.net]
わりと真面目に答えてくれ

オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない

なんのためのオブジェクト変数なんだ

Workbooks.Open(filename:= ApplicationGetOpenFilename)
これもパス付のファイル名なのになんで格納できるんだ?

425 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:01:33.96 ID:iqnmwrCv0.net]
まず型というものを理解してください
つぎに、プロパティというものを理解してください
つぎに、オブジェクトにはデフォルトプロパティというものがあるのを理解してください
あと名前付き引数に対する理解も必要ですね
VBAではSetでの代入とLet(を省略した)代入では意味が違うので、それもちゃんと区別してください

いちいち全部ここで解説はせんが
このぐらい理解すればたぶん答えはわかるだろ

426 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:13:48.84 ID:iqnmwrCv0.net]
まじめに答えといてやるけど
>オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない
たぶんお前がやってるのは、そのオブジェクト変数のデフォルトプロパティに代入しようとした
で、そのオブジェクトがそれを受け入れないからエラーがでたんだろうな

>Workbooks.Open(filename:= ApplicationGetOpenFilename)
>これもパス付のファイル名なのになんで格納できるんだ?
格納の意味が分からん
ApplicationGetOpenFilename(の結果)をたんにOpenの(filename)引数として渡してるだけ
ApplicationGetOpenFilenameの結果がOpenのfilename引数として適当だからエラーが出なかっただけ

427 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:14:33.99 ID:FrwGQASIx.net]
パス付戻り値っていう表現が凄い
Application.GetOpenFilenameの戻り値は、パス文字列か、パス文字列の配列か、ダイアログがキャンセルされたときに返されるFalseかのいずれかしかない
パス付って、何にパスがくっついてると理解してるんだろう
パスが戻り値そのものだろう

428 名前:デフォルトの名無しさん [2017/12/14(木) 00:18:35.88 ID:oVDd8Fug0.net]
>>416
意味がわからん
初心者相手に専門用語で勝った気になるなよ

429 名前:デフォルトの名無しさん [2017/12/14(木) 00:21:23.88 ID:oVDd8Fug0.net]
>>417
パスってのは
¥C:のことだろ?
openメゾットの戻り値も¥C:ついてるのに
WBオブジェクト変数に格納できる意味がわからない
専門用語でこたえるな わかりやすく答えろ
外人相手に口喧嘩して勝ち誇ってるやつと同じだわ

430 名前:デフォルトの名無しさん [2017/12/14(木) 00:23:38.19 ID:oVDd8Fug0.net]
workbookのオブジェクト変数のデフォルトプロパティってなんだよ
そこを答えろ
答えろって言わないと答え出て来ねえのかよ



431 名前:デフォルトの名無しさん [2017/12/14(木) 00:24:22.55 ID:oVDd8Fug0.net]
ちなみにおれはVBA初めて3時間
ここまでの疑問が出るだけすごいと思うけど

432 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:24:26.11 ID:0XKK4N9O0.net]
>>412
>Workbooks.Open.Filename:=Application.GetOpenFilename
>ってできないことが意味がわ「か」らない

Workbooks.Open Filename:=Application.GetOpenFilename

なら動くんだが、それではダメ?(open と filename の間は半角スペース)

何故かと言えば言語の仕様として
引数はピリオドで繋ぐものではないからとしか言いようがない
(workbooks はオブジェクト、open はメソッド、filename:=~ はその引数)

>i = Application.GetOpenFilename
>i.worksheet「s」()ってできない意味がわからない

変数i が workbook型だとして、Application.GetOpenFilename の戻り値はworkbook型ではない。
戻り値はvariant型なんだけど、キャンセル時に false になるだけで、ファイルが選択されていれば文字列が返される
複数ファイルが選択されてても文字列が配列で帰るだけ
それに、i がworkbook型変数なので set を付けないとダメ
i が variant型変数 なら文字列か false が帰るだけでヤッパリ workbook としての挙動はしない

i.worksheet「s」() っていうのも、worksheetオブジェクトは
既に開いているブックのシートしか指定出来ないから、i がブックとしてオープンしてなきゃ当然ダメ

>i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
>i.worksheets()
>これならできる意味がわからない

set i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
じゃないと動かないよ
理由は前述のとおり

433 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:32:01.43 ID:FrwGQASIx.net]
>>419
Openメソッドの戻り値はパスではなく、Workbookオブジェクトそのものだ

開いているブックの集まりであるWorkbooksコレクションオブジェクトに、引数Filenameで指定したブックを追加して、戻り値としてそのブックそのものを返す処理だ


何か根本的に勘違いしてるだろ君

434 名前:デフォルトの名無しさん [2017/12/14(木) 00:33:36.37 ID:oVDd8Fug0.net]
>>422
お前がまだわかりやすいな

ただし
おれはすでに開いているファイルじゃないと操作できないとかは全部知っている
オブジェクト型変数の前にsetステートメントを置くことも知っている

つまり
Application.GetOpenfilename = ファイルを開いた時は文字列が返される
workbook型に返せないのか?
答えはパス付きの文字列で帰って来るためにノーだ
これも知ってる

Workbooks.Open filename:=Application.GetOpenfilename

これも知っている
しかし結果としては
ファイルを選択で開いたパス付き文字列を開く
という命令なはず

同じパス付き文字列なのにworkbook型に格納できないのが意味がわからない

435 名前:デフォルトの名無しさん [2017/12/14(木) 00:35:42.03 ID:oVDd8Fug0.net]
>>423
ん?なんで?
msgboxで表示されてもパス付きになるよ?

436 名前:デフォルトの名無しさん [2017/12/14(木) 00:41:28.15 ID:oVDd8Fug0.net]
またも意味不明な現象が起きた

拡張子を指定しなかったのに開いた
拡張子を指定したらなぜかエラーが出た
なんでだ?


https://i.imgur.com/lqUNtRU.jpg

437 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:42:52.81 ID:FrwGQASIx.net]
>>420
オブジェクトには、特にプロパティ名を指定しないでアクセスする場合に、優先的に参照されるプロパティが決められていて、それをデフォルトプロパティと呼ぶ
オブジェクト型に合わないデータを代入してしまう構文になっているときでも、データの型がデフォルトプロパティの型に適合していればVBAはデフォルトプロパティへの代入として解釈して処理を受け付ける

438 名前:デフォルトの名無しさん [2017/12/14(木) 00:44:33.92 ID:oVDd8Fug0.net]
>>423

Workbooks.Open(filename:= ApplicationGetOpenFilename)
→\C:〜〜〜〜という文字列が返される

ApplicationGetOpenFilename
→これも同じ

なぜ前者はWorkbook変数に格納できて
後者はできないんだ?

439 名前:デフォルトの名無しさん [2017/12/14(木) 00:45:53.39 ID:oVDd8Fug0.net]
>>427
そんなもん知ってるわ
Rangeやcellsのvalueみたいなもんだろ?

Workbookオブジェクトのデフォルトプロパティはなんだ?

440 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:48:20.20 ID:0XKK4N9O0.net]
>>424
悪いけど>>412 の書き方じゃ分かってるようには見えない
set を付けてない時点でこの人は分かってないんだなと判断されても仕方ない

そして
>Application.GetOpenfilename = ファイルを開いた時は文字列が返される
も間違い
Application.GetOpenfilename は、
あくまでもファイルのパス情報を文字列(或いは false)で返すだけで
実際にブックを開けることはしない
だから正確に書くと
Application.GetOpenfilename = ファイルを「選択した」時は文字列が返される
というべきで、そのブックを開くためにworkbooks.open を用いる必要がある



441 名前:デフォルトの名無しさん [2017/12/14(木) 00:51:58.64 ID:oVDd8Fug0.net]
>>430
set

オブジェクト変数を代入するとこに扱うステートメント

442 名前:デフォルトの名無しさん [2017/12/14(木) 00:53:08.36 ID:oVDd8Fug0.net]
>>430
ファイルを開いたっていうのは
選択したって意味なんだが

オブジェクトとOPENメゾットで初めて開く

こんなの知っている

443 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:53:19.64 ID:0XKK4N9O0.net]
>>430でもまだ不正確だった
より正確に言うと

Application.GetOpenfilename =
「開きたい(あるいは移動、コピー、改名、削除など何らかの操作をしたい)」ファイルを「選択した」時は文字列が返される

ですね

444 名前:デフォルトの名無しさん [2017/12/14(木) 00:55:08.87 ID:oVDd8Fug0.net]
>>433
んなもんしってるわ
キャンセル押されたらフェイルス
ファイルを選択したらパス文字列

445 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:56:13.50 ID:0XKK4N9O0.net]
>>432
いや、それが分かってるなら何を問題にしてるのかがよく分からない
それと「メゾット」じゃなくて「メソッド」ね

446 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:56:39.81 ID:pIjJ7/MG0.net]
真面目に答えるんじゃなくて
わりと真面目に答えるように

447 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:58:18.78 ID:FrwGQASIx.net]
>>420
ちなみにworkbookオブジェクトのデフォルトプロパティは存在しない
存在しないから当然、workbook型に合わないデータは代入できない

448 名前:デフォルトの名無しさん [2017/12/14(木) 01:00:54.08 ID:oVDd8Fug0.net]
>>437
じゃあなんで
workbook.openのパス文字列は入るんですかねえ

449 名前: []
[ここ壊れてます]

450 名前:デフォルトの名無しさん [2017/12/14(木) 01:01:13.61 ID:oVDd8Fug0.net]
ここまで答えなしだが
誰もわからないのか?



451 名前:デフォルトの名無しさん [2017/12/14(木) 01:01:34.43 ID:oVDd8Fug0.net]
おれの質問ってVBAの穴をついた?

452 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:04:09.93 ID:0XKK4N9O0.net]
質問の意味がわからないんですよね
何が疑問なのか、独自表現を用いずに、
set やなんかも省略せずに正しく動作するコードと
動作しない理由が知りたい動かないコードを書いてみてもらえます?

453 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:05:31.95 ID:FrwGQASIx.net]
>>428
workbooksは、workbookクラスではない
別のオブジェクトのクラスだ

それから、さっきも書いたが、Openメソッドの戻り値は引数で指定されたパスを持つWorkbookオブジェクトなのであって、Openメソッドによってパス自体が戻ってくる訳ではない
パスを返してくるApplicationクラスのGetOpenFilenameメソッドとは全く働きが違う
プロパティやクラスや引数の名前で何となくbookとかfileとか付けばパス付のWorkbookオブジェクトが返ってくるものと混同してるようだが、きちんと区別しないといけない

454 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:13:20.35 ID:FrwGQASIx.net]
>>438
Openメソッドが要求する名前付き引数Filenameに、GetOpenFilenameで取得したパスを設定して、その結果新しく開いたWorkbookオブジェクトが返っているからだよ
このFilenameはApplication.GetOpenFilenameメソッドの戻り値ではあるけど、Workbooks.Openメソッドの戻り値ではない
Worksheets.Item(Index:=ActiveSheet.Name)みたいな処理と一緒だと言えば少しは分かるか?

455 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:13:59.17 ID:FrwGQASIx.net]
>>440
突いてない
典型的な初心者の質問

456 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:17:18.86 ID:LaUulqGP0.net]
典型ではないな
低次元な初心者の質問

457 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:22:45.67 ID:FrwGQASIx.net]
たぶんこの質問者は、コレクションを知らないタイプだな、
それから、式に含まれるプロパティ名やメソッド名をオブジェクトのクラス名と同一視しているタイプだろう

458 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:34:07.25 ID:n2gI2QxJ0.net]
たぶんハイパーリンクでパスが表現される事が多いところから、
パスが文字列とは異なるデータ型を持つ何かだと勘違いしてるだけじゃないの?

459 名前:デフォルトの名無しさん [2017/12/14(木) 07:32:56.86 ID:oVDd8Fug0.net]
>>443
workbooks.open filename:=Application.GetOpenfilename

この場合はworkbooksオブジェクトに選択したパス文字列が格納されるのか?
だからworkbook型に格納できるのか?

460 名前:デフォルトの名無しさん [2017/12/14(木) 07:37:06.65 ID:oVDd8Fug0.net]
>>446
ん?
workbooks
worksheets
rows

これはコレクションだろ?
コレクションはオブジェクトの最上位

プロパティはオブジェクトの何?
メゾットはオブジェクトに命令

違うか?



461 名前:デフォルトの名無しさん [2017/12/14(木) 07:40:17.60 ID:oVDd8Fug0.net]
マジでわかりやすい答えがない

462 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 08:30:04.65 ID:mohvOYX1x.net]
>>448
君の言う「格納」は、コレクションへのオブジェクトインスタンスの追加、プロパティ値の設定、変数への代入、引数の受け渡し等がごちゃごちゃになっていると思う
まず、Workbooksコレクションに、データの代入はできない
WorkbooksコレクションはWorkbookオブジェクトの集まりを要素に持つコレクションオブジェクトだから

それから、Workbooks.Open Filename:=Application.GetOpenFilenameという構文は、Workbook型の変数に値を代入しているわけではない
Filenameという名前付きで定義されたOpenメソッドの文字列型の第一引数に値を渡していて、その結果としてOpenメソッドがWorkbookオブジェクトを返しているわけで、オブジェクト型変数への代入ではない

463 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 08:45:33.01 ID:YV9D93CW0.net]
>>449
コレクションは最上位じゃない
一番上にあるのはオブジェクト

464 名前:デフォルトの名無しさん [2017/12/14(木) 08:46:43.07 ID:QIiUylbtp.net]
>>451
いやそんなのしってるんだけど

dim i string
dim wb workbook

application.Getopen filename:=で目的のファイルを開く
そしたら「¥:目的のワークブック.xlsx」が文字列として帰って来る
workbooks.open filename:=目的のファイル
これで初めて目的のファイルが開く

ここで本題
どちらも目的のファイルのバス名が返ってきているのに
set wb = application.GetOpen filename
だとエラーで
set wb = workbooks.open (filename :=目的のワークブック.xlsx)

これならwbオブジェクト型変数に代入される意味がわからない
これをはっきり答えろ
わかりやすくな

465 名前:デフォルトの名無しさん [2017/12/14(木) 08:47:18.91 ID:QIiUylbtp.net]
>>452
一番上

最上

日本語やり直したほうがいい

466 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:00:03.55 ID:n2gI2QxJ0.net]
>>453
Set wb = Application.GetOpenFilename

は、String型をWorkbook型のポインタへ代入しようとしてエラー吐いてる。

Set wb = Workbooks.Open(Application.GetOpenFilename)
Set wb = Workbooks.Open("目的のワークブック.xlsx")

は、OpenメソッドにString型変数を渡しているから機能する。

467 名前:デフォルトの名無しさん [2017/12/14(木) 09:02:02.66 ID:QIiUylbtp.net]
>>455
workbook型のポインタってなに?
これがわかればすっきり

468 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:02:04.79 ID:CHPwg0pDx.net]
>>449
コレクションはオブジェクトの最上位、という発想がそもそも間違い
コレクションは子要素に追加されているデータやオブジェクトへのアクセス等を提供する、子要素からは独立したオブジェクトだ

更に、WorkbooksコレクションオブジェクトはWorkbookオブジェクトのみを要素に持つようにあらかじめ最適化された規定のコレクションオブジェクト

469 名前:デフォルトの名無しさん [2017/12/14(木) 09:05:19.87 ID:QIiUylbtp.net]
>>455
WB型変数に文字列代入は不可
メゾットの戻り値の代入は可能ってこと?

なんで?

470 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:05:51.56 ID:YV9D93CW0.net]
>>454
日本語だけ知ってても言語仕様を正確に説明する難しいんだよ

コンピューター業界では「上位」などの言葉には特別な意味を持たせる場合もあるし、
とくに相手がド素人だと、言葉の意味から説明するのも面倒だから、あえて上位という単語は避けた上で
なんとなく通じてくれそうな「上」って言い方をしたんだよ

お前の態度が気に入らないからワッチョイ Spc7はNGするわ
人に何か質問する時は最後までていねいな言葉を使え



471 名前:デフォルトの名無しさん [2017/12/14(木) 09:07:28.47 ID:QIiUylbtp.net]
>>459
うんこーwwwwwwwwwwうんこーwwwwwwwwww

472 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:08:52.24 ID:CHPwg0pDx.net]
>>453
そもそもApplication.GetOpenFilenameはブックを開いてブックへの参照を返すメソッドじゃなくて、ユーザーにダイアログ画面上で選択させたファイルのパスを返すメソッドなんだが
メソッド名で混乱してるだろ君

473 名前:デフォルトの名無しさん [2017/12/14(木) 09:11:20.55 ID:QIiUylbtp.net]
>>461
いやしってるけど

キャンセルが押されたらフェイルスだし
選択したらパス名が返って来る

何回言えば気がすむんだよ

474 名前:デフォルトの名無しさん [2017/12/14(木) 09:12:47.30 ID:QIiUylbtp.net]
Openメゾットはただブックを開くだけだろ?
ただし 引数を戻り値として得られる
つまり 開いたファイル名がOpenメゾット内にある

違うかい?いい線いってる?

475 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:13:02.91 ID:n2gI2QxJ0.net]
>>458
なんでも何もデータ型が一致するかどうかが問題であって、メソッドの戻り値の型は一致するってだけ。

たぶんJavaScriptから始めたせいで認識がおかしくなってるんだろうけど、
普通はデータ型が異なる変数同士の代入は出来ない。

476 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:14:18.68 ID:CHPwg0pDx.net]
この質問者みたいな人が言語仕様について思い込みや勘違いをしたまま共用マクロを組んだりすると、会社にとって迷惑なだけなんだよな
作ったマクロを他人と共有しないことを祈るのみ

477 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:20:19.35 ID:CHPwg0pDx.net]
>>462
それ俺がきのう説明したことだよねw
オブジェクト型変数にGetOpenFilenameから返った文字列型データやデータ配列を設定しようとしてるのがおかしいんだがw
データ型とか一回学んだ方が良いと思うよ

それから蛇足だけど、フェールスじゃなくて、フォルス、フォールス、ファルスの何れかの表記にしないと、Falseのことだと理解してもらえないことが多いと思うよ

478 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:25:08.03 ID:CHPwg0pDx.net]
>>463
引数の文字列は戻り値にならない
Openの戻り値はWorkbookオブジェクトの実体だ
Workbookオブジェクトの実体とパス文字列はイコールじゃない

それから、メゾットじゃなくてメソッドな
あんまり特徴的な言葉づかいしてるとメゾット君と
フェールス君とか呼ばれたりするかもしれないから気を付けなよ

479 名前:デフォルトの名無しさん [2017/12/14(木) 09:30:34.82 ID:QIiUylbtp.net]
>>467
実体でなに?どころどころで補足質問しねえといけねえのかよ

480 名前:デフォルトの名無しさん [2017/12/14(木) 09:31:25.92 ID:QIiUylbtp.net]
>>464
変数同士?
workbook型あとは何?
これも補足質問



481 名前:デフォルトの名無しさん [2017/12/14(木) 09:32:51.20 ID:QIiUylbtp.net]
>>466
データ型の参考ページは?
猿でもわかるやつ

482 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:17:27.13 ID:7XekaZVWx.net]
>>470
その言い方は猿に対して失礼だぞメゾット君

WordやPowerPointのVBAと違ってExcelは「Excel VBA データ 型」でググれば腐るほど情報が出てくるから、好きなページを読んで出直してきたらいいさ
インスタンスもググってみたらいいよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<339KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef