- 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)
- 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 データ 型」でググれば腐るほど情報が出てくるから、好きなページを読んで出直してきたらいいさ インスタンスもググってみたらいいよ
- 483 名前:名無し mailto:sage [2017/12/14(木) 12:34:50.44 ID:DWbie50BM.net]
- >>468
Workbookの実体とは開いて実行しているエクセルブックのことだよ。ブックはVBAが管理しているメモリ上のデータではないってこと。そこにアクセスする為の情報だけがWorkbook型変数には格納されている。 これ以上はググったほうがいいな。メゾットちゃんには言葉だけでは通じないみたいだし。
- 484 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:36:44.73 ID:bra/P7/Ad.net]
- どう考えてもこいつは型も文法も戻り値も
- 485 名前:理解できてないだけだろ []
- [ここ壊れてます]
- 486 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:45:31.15 ID:PlqHEg1vH.net]
- インスタンスはお湯かけて3分で完成するよ
(´・ω・`)b
- 487 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 13:37:10.14 ID:D0PQd/9/a.net]
- 体系だてた答えがほしいならオブジェクト指向あたりの本読んだ方がいいんじゃねえの
正確にはオブジェクト指向じゃないけどクラスとインスタンス(やそれにくっついてるメソッドやプロパティ)の関係を理解するにはそれがはや道だわ ここは教科書じゃないから
- 488 名前:デフォルトの名無しさん [2017/12/14(木) 14:17:01.84 ID:QIiUylbtp.net]
- なんでぱぱっと答えられねえの?頭悪いの?
|

|