1 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:42:39.57 ID:K1uuwFLt.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part56 mevius.5ch.net/test/read.cgi/tech/1534976724/
487 名前:デフォルトの名無しさん [2018/09/30(日) 23:56:56.43 ID:aYXyCrkn.net] でた、vbaしかできない低学歴知恵遅れITドカタふがいきってる
488 名前:デフォルトの名無しさん [2018/10/01(月) 00:00:41.84 ID:zfKNS/F/.net] で、低学歴知恵遅れは どこにVLOOKUP使ったの? ん? いってみ?
489 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 06:39:47.60 ID:MCBRDKcK.net] >>468 本気で言ってるのか?
490 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 07:49:25.42 ID:u6gUPL8M.net] sortについての質問です レコードがあって、並び替えの基準列が例えば 0 4 1 0 5 となってたとします。これを 0 0 4 1 5 に並び替えたいのです。要は特定の値とそれ以外に分離させたいんです。 現状は行の下からループを回して、特定の値ではないならば行をカットして一番下に挿入するというコードなのですが遅いです。 なにかいい方法はないでしょうか
491 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 08:05:44.31 ID:K7Kh8NR/.net] >>470 すべて配列に突っ込んで、配列上で並べかえてから書き換え
492 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 08:06:55.02 ID:PpuAKpxM.net] >>470 =A1=0 の列を追加してソート
493 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 08:13:41.55 ID:IH0VbElQ.net] >>459 うーん VLOOKUP使えと言ってる人がいるけど VLOOKUPは複数行に同じデータが存在したとき 最初の一つ目を取得して来るんで キー項目が無いと厳しいんじゃね?
494 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 08:25:33.53 ID:iFb8zFFH.net] countifと組み合せればできるよ >>470 もそうだけど、このスレ見てるとすぐVBA使いたがる人ってちょっと頭が残念なだけなのかなと思っちゃうね
495 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 09:15:58.47 ID:oBEcQ0XA.net] そらVBAの質問スレやしな。エクセル標準機能でもいいならエクセル質問板いくやろ
496 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 10:03:52.20 ID:H4/VTF+j.net] 質問する方はね。 回答する方はVBAでやるべきかどうかと考えないのか。
497 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 10:46:30.51 ID:bOC85JQ9.net] >>472 その発想は無かった…… なるほどbooleanに変換してしまえばいいんですね。ありがとうございました。
498 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 11:36:11.29 ID:oBEcQ0XA.net] >>476 質問する方は関数で出来るのを承知でVBAの答えを求めていると考えてVBAでしか答えないというスタンスもある。別に関数や操作で出来ることを教えてあげる点については異論はない。そういう答え方をしたい人がそう伝えればいい
499 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 17:34:28.00 ID:x1tycYY6.net] マクロってむかし使ったとき選択セルを基準に動いてた気がしたんだけど 今のパソコンでは違う場所で使おうとしても記憶した場所でしか動かなくなったけど
500 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 17:40:54.99 ID:x1tycYY6.net] (選択セルでショートカットキーを押すとセルの中心にチェックボックスを作るようにしたいんだけど (長いプログラムは無しで)
501 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:04:58.48 ID:Rpti6CxP.net] 初心者だけど、仕事でどうしても必要で試行錯誤中なのだが… 例えばなんだけど @IEを起動して指摘のURLに飛ぶ→A管理者ユーザーでログイン→ Bユーザー情報検索のページに飛ぶ→Cプルダウンでユーザーの種別を選択→ Dユーザー名をフォームに転記→E検索ボタン押す→Fユーザーデータが表の形式で表示
502 名前:ウれ、ある行をラジオボタンがあるので選択→ G決定ボタン押す→Hページ内のリンクをクリック→Iページ内のリンクをクリック→ J表示された文字列をコピーしてエクセルに出力 なんてことできるの? 説明がわかりにくくて申し訳ない。 @からBまではできたんだが…Cからができるか不安だ。 どうにかBを応用して繋げていけばできるんじゃないかと思っているのだが、これをユーザー分取得するという繰り返しをするとなると、全くイメージ出来ない。 自分でもイメージ出来ていないのに聞くのも難だが、流石に実現不可能かな? [] [ここ壊れてます]
503 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:07:07.36 ID:cKKUS3dy.net] >>481 出来る出来ないの返答を求めているようなのでそれだけ答えると「出来る」
504 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:14:45.76 ID:+ysO9sf2.net] >>481 あえてvbaとieを使う理由はないけどまあ出来るよ
505 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:14:53.78 ID:DnKjEw0R.net] Aのフォームの操作ができてるならあとは全部Aの繰り返しだからもう少し頑張れ
506 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:24:39.53 ID:d7lQtBIe.net] >>482 >>484 ありがとうございます! 出来ると聞いて安心しました。頑張って作ってみます。
507 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:25:25.93 ID:d7lQtBIe.net] >>483 vbaとieに拘りはないですが、導入が簡単そうだったので…
508 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:26:16.86 ID:Zp0cocQA.net] 質問者じゃないけど2とか3とかはどうやってやるの
509 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:33:41.96 ID:d7lQtBIe.net] >>487 申し訳ない。Aは自動ログイン設定というか、IEの機能でidとpassをオートフィルしてくれる機能あるから、わざわざログイン情報を入力せずに、そのまま決定ボタンをクリックするようなコマンド?を記載したよ。 Bはその文字に埋め込まれたリンクを、htmlで探して指定した。 Aが苦労したな…javascript:loginとかいうので、どうやったら良いのかわからなかったけど、その頭にあるinputがページで何番目なのか数えて、4番目だったから4番目のinputをクリックしてね!って文を書いたら移動できた!
510 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:45:57.55 ID:MCBRDKcK.net] >>473 >>465 に答え書いてるよ >>480 vbaでフォームは置けない気がする ?の文字を置くなどで対処はできないか
511 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 19:47:37.81 ID:MCBRDKcK.net] >>481 相当しんどいと思う chromeの拡張機能を使ってみては? 「クローム 拡張機能 マクロ」で検索すると出てくる 後はjsごと覚えた方が良さそう
512 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 20:52:16.85 ID:lLn/Vvr8.net] RPA使えよ 仕事なら買ってもらえるだろ
513 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 21:35:57.95 ID:d7lQtBIe.net] >>491 robo-pat? あるがライセンス切れてて使えない…ライセンス到着待ちなんだ。 でツールが明日必要になってしまったから、仕方なくvbaで…と。
514 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 21:36:29.14 ID:d7lQtBIe.net] >>490 iMacrosってやつ?試しに使ってみようと思う!
515 名前:デフォルトの名無しさん [2018/10/01(月) 23:54:06.64 ID:zfKNS/F/.net] vlookupなんか どこにも見当たらない オツムだけじゃなくて目も悪いの?
516 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 02:04:29.98 ID:/QfTYNRi.net] >>481 Seleniumデザインパターン&ベストプラクティス、2015、オライリー この本は、Ruby で、Selenium WebDriver を使って、ウェブサイトを自動テストする本だけど、 まさにこういう事を、Rubyでプログラミングする どのページ(URL)へ飛んで、入力フォームに入力して認証して、 買う商品を選んで、カートに入れて、決済する まさに、Ruby・Selenium WebDriver が定番 簡単なものなら、iMacros, Selenium IDE で出来るかも
517 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 05:27:11.42 ID:uy7vLCLd.net] >>489 普通におけるけど。
518 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 06:36:08.43 ID:tR2WmwNe.net] >>495 rubyとselenium webdriverか。こちらも試してみます!ありがとうございます。
519 名前:495 mailto:sage [2018/10/02(火) 07:13:32.60 ID:/QfTYNRi.net] 結局、ウェブページの自動テストツールを数年やってきた人たちは、次の2つにたどり着く プログラマーは、Ruby で、Selenium WebDriver、 非プログラマーは、iMacros, Selenium IDE 漏れなんて、自分のPC 内の画像フォルダの画像でさえ、 Ruby・Selenium WebDriverでプログラミングして、ブラウザで見てる HTML のimg タグに、画像のパスを設定して、ブラウザに表示させている
520 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 07:17:00.46 ID:3rK24ppg.net] >>498 たどりつかねーよwww エロ本は画像ビューワ使ったほうがサクサク動いて良い
521 名前:デフォルトの名無しさん [2018/10/02(火) 07:21:20.23 ID:XHPfCFYq.net] またマッチポンプに引っかかってるのか? 頭悪すぎだろ
522 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 07:23:48.60 ID:3rK24ppg.net] いや、タダのボケだろ ちょっとおもしろかったわ
523 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 07:39:42.84 ID:N1aQvONc.net] 頭が悪いのを誤魔化そうとしても意味なくね?
524 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 07:42:08.16 ID:ahHfhE5m.net] >>480 https://jizilog.com/vba-checkboxop これをショートカットキーに割り付けるだけで行けそう
525 名前:495 mailto:sage [2018/10/02(火) 09:00:24.92 ID:/QfTYNRi.net] Seleniumデザインパターン&ベストプラクティス、2015、オライリー この本の著者がこう言ってる 最初は、ウェブページの自動テストを、Selenium IDE でやっていたけど、 大量の自動テストをこなすために、Ruby・Selenium WebDriver でプログラミングするようになった これは、誰もがたどる道
526 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 09:10:32.38 ID:fUFII8R1.net] 別にVBAでも簡単だけどな。 既にVBAでRPAもどきを作ってある。
527 名前:デフォルトの名無しさん [2018/10/02(火) 09:35:53.30 ID:IHboiu3Y.net] マッチポンプに掛かった間抜けがいるスレはここですか?
528 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 10:09:51.02 ID:IdpLKWF1.net] SikuliXおすすめ 適当なスクレイピングでよくてHTML解析する情熱が無くなった場合に使ってる
529 名前:デフォルトの名無しさん [2018/10/02(火) 12:19:33.62 ID:gUUCeKXU.net] >>498 > HTML のimg タグに、画像のパスを設定して、ブラウザに表示させている プロさんて20年前からタイムスリップして来たんかなw
530 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 12:33:06.04 ID:1IC/OUbd.net] Selenium全く必要ないっていう
531 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 17:44:52.64 ID:rk1+4NE+.net] >>505 技術的負債
532 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 18:18:59.44 ID:giBEQZ0B.net] どうせ誰にもメンテできないんだから問題ない 返済されることのない借金は負債ではない
533 名前:デフォルトの名無しさん [2018/10/02(火) 20:21:52.25 ID:vaQcb9tkC] 社内のデータ加工で困っています。 VBAじゃないかもしれないのですが、 賢い方々助けてください。 やりたいことや実際のデータは下記URLにUPしています。 よろしくお願いします!fast-uploader.com/file/7094034688478/
534 名前:デフォルトの名無しさん [2018/10/02(火) 20:25:57.36 ID:vaQcb9tkC] 512ですが… 用意できる環境に書いてある「Microsoft Office 2016」は「Excel」を意味しています。
535 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 18:53:37.03 ID:rk1+4NE+.net] 技術的負債はSIerに押し付ければいいのよ 事務員は保守性など気にせずクソでも動けばいいのでとにかく作る プログラマを企業間のパワー差を活かして発給で雇いこき使ってメンテさせる これがVBAerの正しいあり方だ
536 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 19:07:53.02 ID:qyY5wEk7.net] >>514 そうか まぁ頑張れよ さて、忘年会用に何かでビンゴのソフトでも作るか
537 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 19:32:27.30 ID:V/qNOCI+.net] バリアント型変数にrangeを代入すると処理時間短縮になるというが、今いち実感が
538 名前:湧かない。 INPUTのテキストファイルの中身次第で出力するセル範囲が変わるんだが、 想定される最大のセル範囲をrangeに代入するよりは、セルひとつひとつにアクセスして最小限の範囲で出力したほうが処理時間早いんじゃないか… [] [ここ壊れてます]
539 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 19:33:46.34 ID:JlZ/oy05.net] VBAでシステム組んでる企業は今はほとんどないのでは? 個人がちょっとしたマクロを書くぐらい
540 名前:デフォルトの名無しさん [2018/10/02(火) 19:48:52.17 ID:eaArETqj.net] ニートのプロさんは少しお口にチャックねw
541 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 19:56:57.36 ID:VwRcsjE4.net] >>459 です。 レスくれた方ありがとうございます。 >>465 さん、作成ありがとうございます。 ダウンロードしてみたのですが、私の自宅のPCだとなぜか文字化けして画面に表示されません・・。 明日、会社のPCでやってみるべきか・・。 どなたか親切な方がいたら、画面をコピーしてくれると助かります。
542 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 20:18:38.93 ID:JlZ/oy05.net] セキュリティ意識に欠けるね マクロが禁止されるわけだ
543 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 20:34:11.46 ID:t6BWNYue.net] >>516 出力に必要な行列の数だけ要素数を指定して適切なサイズの配列を使うようにすればいいじゃん 複数セル値の逐次更新は更新するセルの個数分だけプロパティ関数が実行されてイベント処理が走るので、同じセル数を更新する場合で比較すると配列による一括処理と比べて格段に重いよ
544 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 21:04:30.03 ID:GLlKH6rT.net] >>521 返答ありがとう。 INPUTのデータ次第で1行〜9999行目まで出力されるので、現状9999行までのセルを配列に格納している。 ちょいと処理時間を計測してみたんだが 出力件数によっては、 例えば200件程度だったときの場合、セルに都度アクセスしたほうが早かったのよね。 実行する度に、INPUTのデータ量次第で配列に格納する範囲が変えられると便利なのだが、それがわからないため9999行まで格納してるって感じかな
545 名前:デフォルトの名無しさん [2018/10/02(火) 21:09:51.81 ID:R8M7QKDK.net] fast-uploader.com/file/7094037561899/ バカが作ったのはまったく使い物にならないから オレのを使いなさい ダウソした 総合商品情報.xlsx を c:\tmp に入れればとりあえず動く 保存する場所やファイル名変えたならSQLに入ってるパス変更すれば とりあえず動く
546 名前:デフォルトの名無しさん [2018/10/02(火) 22:36:58.97 ID:ZVIK4UcY.net] PCから投稿したのが繁栄してないかもしれないので… ↓↓↓↓ 社内のデータ加工で困っています。 VBAじゃないかもしれないのですが、 賢い方々助けてください。 やりたいことや実際のデータは下記URLにUPしています。 よろしくお願いします! fast-uploader.com/file/7094034688478/ 用意できる環境に書いてある「Microsoft Office 2016」は「Excel」を意味しています。
547 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 22:50:57.49 ID:t6BWNYue.net] >>522 INPUTがどのような形でコードに渡されるか分からないが、例えばテキストデータを読み込んでいるなら、行数をeofになるまで数えて変数に代入して、その変数で配列要素数を指定すれば簡単だと思う
548 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 23:02:37.82 ID:uetVBQBr.net] >>522 3回以上セルにアクセスするなら確実に配列に取り込んだほうが早い。 体感出来ないのはコードが完全に最適化出来てないだけ。 あと数式の埋め込まれたセルがあったりするとあり得ないくらい遅くなる。 (ある程度はスイッチで解消できるけど) あとInputはめちゃくちゃ遅いよ。 バイナリモードで開いて一括読み込みがオススメ。 tetsucom.blogspot.com/2011/03/vba_9799.html このサイトでは数倍しか差がついてないけど、元データの行数が増えるほどInputと差が開く
549 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 23:48:15.72 ID:VE+AbZ0A.net] >>524 アップロードしたファイルに店
550 名前:シが含まれているんだが大丈夫か・・・ [] [ここ壊れてます]
551 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 23:53:53.97 ID:GLlKH6rT.net] 皆さん助言ありがとう。 処理のイメージとしては、1行ずつ読み込んで色々判定した後、1行ずつ出力していく感じです。 頂いた助言を試してみて、 事前にeofまでのループ処理で変数をカウントアップさせて、必要な行数を配列に格納させることはできました。 バイナリモードの件と合わせて、パフォーマンスの向上を目指しますm(_ _)m
552 名前:デフォルトの名無しさん mailto:sage [2018/10/02(火) 23:57:35.54 ID:VE+AbZ0A.net] >>528 Rangeオブジェクトへのアクセス回数を減らすよう意識すると、案外パフォーマンスが上がったりする。 あとオブジェクトの特定のプロパティ・メソッドがやたら遅かったりすることもあるから注意。
553 名前:デフォルトの名無しさん [2018/10/03(水) 00:52:56.81 ID:Ijm6Q0Hp.net] >>527 気がつきませんでしたが、ダミーデータなので大丈夫です
554 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 12:30:49.51 ID:Ju5BAQ2L.net] >>528 1行ずつ出力じゃあまり恩恵無いかもしれないけどまとまって出力すれば劇的な変化がある。 Dim i As Long Dim j As Long Dim varRng() As Variant Dim t As Single t = Timer For i = 1 To 50000 For j = 1 To 50 Cells( i, j ).Value = i + j Next j Next i Debug.Print Timer - t t = Timer Redim varRng( 1 To 50000, 1 To 50 ) As Variant For i = 1 To 50000 For j = 1 To 50 varRng( i, j )= i + j Next j Next i Range(A1:AX50000).Value = varRng Debug.Print Timer - t
555 名前:デフォルトの名無しさん [2018/10/03(水) 16:42:01.11 ID:uB4nYmn5.net] 実践的に練習用の課題を解いていけて、段階的にスキルアップできるサイトないですか?
556 名前:デフォルトの名無しさん [2018/10/03(水) 21:13:21.04 ID:4mO7hAaA.net] Range(1,1).Value = 1-1 これをやると、1月1日にExcelが日付と解釈して変換する。 これを防ぐにはどうしたらいいですか。 文字列として格納するために""で囲むという手があるがそれをやりたくない。 理由は値(1-1)に加工していじってるから。 ちなみに、1-1は番地のつもりです。
557 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 21:37:41.99 ID:B0/YTPvH.net] >>533 書式を明示的に文字列にしてからやってみたら? .NumberFormatLocal = "@"
558 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 21:58:23.71 ID:siQNEaWd.net] >>533 その式だと1-1で0が格納される訳だが? セルに文字列として格納させるなら532の方法か、先頭にシングルクォーテーションを付与
559 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 22:24:31.18 ID:IRo5OOwi.net] 1件だけなら 「Range(1, 1) = "'1-1"」でもいいかもしれんが、沢山あるようなら配列を使って一発代入するかな。
560 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 22:37:26.98 ID:cOBWyVpF.net] >>459 です。 >>523 さんありがとうございます。 文字化けしない環境で試してみたら、画面は見えました。 ですが、肝心のコードが見当たらない・・・orz シートに記載されてる情報を見る限り、恐らく>>523 さんのが一番私が求めているものに近いかな、と思いました。 >>523 さん、ダウンロードしてもコードが見えないので、 このスレにコードをコピーしてもらえないでしょうか?
561 名前:デフォルトの名無しさん [2018/10/03(水) 23:48:07.24 ID:FigU8Mbj.net] Cells(Rows.Count, 1).End(xlUp).Row これだとhiddenで隠れている行は無視されてしまいます あくまでも最後に入力されている行を取得したい場合はどうすればいい? もちろんhiddenを一時的に表示にする以外方法で 隠れていてもデータ行として扱う方法
562 名前:デフォルトの名無しさん [2018/10/03(水) 23:54:17.02 ID:7gIy/TEB.net] ↓ココに操作手順がおいた fast-uploader.com/file/7094133678468/ [SQLの編集]タフ
563 名前:゙に編集の仕方が載ってる(denpyouを例にしてるが、編集の仕方は他も同じ) ※ vbaじゃないからな、コードはない ※ ちなみにデータとデータの抽出結果を出力するブックは別でも問題ない 新規に自分で作成したい場合は >>437 ← コレ を参考にしなさい [] [ここ壊れてます]
564 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 00:51:18.54 ID:FEHQanR0.net] 半角先生口は悪いけど割と優しいからすき
565 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 00:55:39.43 ID:X6BA3+Oo.net] VBAの実行環境をDockerizeする方法を教えてください
566 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 07:43:14.54 ID:tsjyo4iv.net] >>538 used range使えば?最終行取得でググれ
567 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 09:11:12.18 ID:ZcbeCQ3S.net] UsedRangeはプロパティに変更が加えられたセルを全てカウントアップするから物凄く癖がある うっかり列範囲全体に書式設定なんかしてると最終行は1,048,576行目なんてことになるので注意
568 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 12:04:05.58 ID:x9VzQgv/.net] >>543 列に対しての書式設定ならそんな風にはならない。 貼り付けするとそうなる危険性はあるけど、今のエクセルは警告出るし、実行に時間かかるし、めちゃくちゃ重たくなるから、マクロ以前にブック修復すべき案件
569 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 13:15:55.34 ID:Vut2i4+m.net] Do loop関数でウェブ上の変数を取り込んでセルに表示したいんですが、セルA1に最新の変数を表示し、一つ過去のは真下セルに移動する これを繰り返して変数をA列に積み上げいくようにしたいんですが、どうすればよいでしょうか
570 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 13:37:33.14 ID:Vut2i4+m.net] 挿入でできました 失礼しました
571 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 14:40:06.72 ID:Vut2i4+m.net] Selenium Webdriverについて質問です。 @chromeを起動 Aあるwebサイトのユーザーページにログイン Bユーザーページ上で作業 という操作を自動化しようとしています。 @、Aは良いのですがBが複雑なため、その部分のコードで試行錯誤しております。 しかしコードを修正するたびに@から行っているため時間がかかっております。 @Aで起動したブラウザを利用して、Bから別のsubプロシージャにして、Bだけ実行して検証したいのですがどのようにすればよいのでしょうか。 下が@Aのコードです。 sub 1() Dim driver As New SeleniumWrapper.WebDriver driver.Start "chrome", "https://aaa.com/login?" driver.get ("/") driver.findElementByName("UserID").SendKeys ("yamada") driver.findElementByName("pass_word").SendKeys ("1234")
572 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 17:50:31.63 ID:ImPAYWBj.net] Private driver As SeleniumWrapper.WebDriver Sub Init() @ A End Sub Sub Work() driver.get(ユーザーページ) B End Sub 他のスクリプト言語に変えたほうが楽ですよ
573 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:15:13.64 ID:Vut2i4+m.net] >>548 ありがとうございます。 やってみたのですが、getメソッドでSystem.NullReferenceExceptionというエラーが出ます..... 他のスクリプト言語というとRubyということになるのでしょうか?
574 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:36:18.81 ID:/wVNZxwJ.net] >>549 driverを初期化してないからだと思うぞ。
575 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:46:00.60 ID:Vut2i4+m.net] >>550 大変申し訳ないのですが詳しく説明して頂けないでしょうか.... 勉強不足ですみません
576 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:13:03.15 ID:/wVNZxwJ.net] >>551 Private driver As SeleniumWrapper.WebDriver ←モジュール領域(各プロシージャの更に上位)でdriverを定義。ただし初期化していない。 Sub Init() ←Initプロシージャを実行する時にdriverを初期化し@・Aを実行する必要がある Set driver = New SeleniumWrapper.WebDriver ←ココ
577 名前: @ A End Sub Sub Work() ←Initプロシージャを実行してからWorkプロシージャを実行すると、色々(B)を実行してくれる driver.get(ユーザーページ) B End Sub 念のため言っとくと俺は>>548 じゃないがついでに解説しただけで、 >>547 が求めているものがこれで満たせるのかまでは関知しない。 [] [ここ壊れてます]
578 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:25:04.84 ID:USJCeaSx.net] 質問いいですか? VBAでコールバックを行うとき クラスが対象の場合はCallByNameで行う事が出来ますが 標準モジュールの場合、どうするんでしたっけ? 確かAPIを使った様な気がしたんですが どのAPIを使ってどうするのか 忘れてしまいました。
579 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:32:08.96 ID:apogHBJA.net] >>553 忘れたけど ariawase を見れば出てくるんじゃね
580 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 20:46:51.81 ID:Vut2i4+m.net] >>552 とても丁寧にありがとうございます。追加質問させてほしいです。 A: 今回「driver」はオブジェクト変数となるため、定義の際はnew演算子を使用する。またはsetで格納する必要がある。ということで良いのでしょうか? B: >>552 で「ただし初期化していない」とありますが、あるサイトで「vbaでは変数宣言したときに初期化が行われる」という記述を見ました。 これは、setで格納されてないから初期化すらされてない という意味でしょうか。 C: プロシージャが実行されるごとに初期化されればよいならば、private変数の定義をやめて、@〜A、BそれぞれでDim driver As New SeleniumWrapper.WebDriver と定義すればエラーは出ないと思ったのですが、 やはりBのgetメソッドのところで「System.NullReferenceException」エラーが出てしまいました。何故なのでしょうか・・・ 長文ですみません どうか宜しくお願いいたします。
581 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 22:18:56.04 ID:/wVNZxwJ.net] >>555 A: あってる B: だいたいあってる C: まずコードが動くことを確認してから弄れ。>>548 の意図が汲めないならすっぱり諦めて別の方法を考えろ。 流石にこれ以上は自分で調べろ。 追伸 B: とりあえず「値型は宣言と同時に初期化される、オブジェクト型はNewやSetをしてからでないと使えない」と思っとけ C: 要はWebDriverの「使い回し」がしたいという質問に答えたのが>>548 ・モジュールレベルで宣言すれば、各プロシージャ内から変数「driver」を通じて同じ実体(インスタンスという)にアクセスできる ・Initでモジュールレベル変数「driver」を初期化したりStartなどのメソッドを実行すれば、Workでdriverにアクセスした時にその続きのアレコレができる ・逆にInitで初期化やStartその他を実行したにもかかわらずWorkで新たな変数「driver」を宣言したらInitで行った処理が水泡に帰する ・またInit内で新たな変数「driver」を宣言し初期化等をした場合も、Init終了と同時に実体が消えて無くなる 仕事中なんであれこれ端折って書いたので間違ってる部分もあるかもしれんが、「インスタンス」とか「スコープ」とかでググって調べてみてくれ。
582 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 22:32:59.61 ID:Vut2i4+m.net] >>556 本当に丁寧にありがとうございます。 伝えるのを忘れていましたが、言われた通りにコードを記述しうまくいきました。それを踏まえてのCでした。 インスタンス、スコープで調べてみます。ありがとうございました。
583 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 12:52:55.81 ID:VkzGqctC.net] 「選択したセルの値を-1する」のに下記のようなプログラムを書いた。 Dim cell As Range For Each cell In Selection cell.Value = cell - 1 Next これはOK。 「セルの値がブランクまたは0のとき、ブランクにする」を追加して、 Dim cell As Range For Each cell In Selection If cell.Value <> 0 Then cell.Value = cell - 1 Else Next としたら「Nextに対応するForがありません」と怒られてしまいました。 どこがいけないのでしょうか?
584 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 12:58:15.96 ID:vSWfZutq.net] if文が閉じてないから
585 名前:デフォルトの名無しさん [2018/10/05(金) 16:28:56.84 ID:JjUc2WZB.net] >>558 お前の知能に障害がある
586 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 16:54:22.89 ID:9/5M8DWU.net] >>558 インデントが適当だからそういうミスに気がつかない
587 名前:デフォルトの名無しさん [2018/10/05(金) 17:24:22.25 ID:KMKJ670I.net] else nextとか書く馬鹿にインデントもなにもねーよ