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


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

Excel VBA 質問スレ Part74



1 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:40:59.22 ID:jnlr9GaR0.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part73
https://mevius.5ch.net/test/read.cgi/tech/1631485799/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

449 名前:デフォルトの名無しさん [2022/01/18(火) 15:40:58.30 ID:CJu6lFHP0.net]
>>445
聞いたことはないけど、合ってもおかしくないと思う
OSや別アプリと並行処理させ、並行処理が終わってないままvbaだけ処理すすめる・・・ことで落ちていると思う
DoEventsで解決するはずなんだけど、DoEvents自体も挙動がどこかおかしい。

多分だけど、
applicaion.calcurate=false
とか高速化入れてない?あれを設定しなければ落ちなくなる可能性があると思う

450 名前:デフォルトの名無しさん [2022/01/18(火) 18:06:02.41 ID:2NZPk0PK0.net]
フォーカスがなくなって裏で動いているのに気づかなかったってだけじゃね

451 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 02:44:48.77 ID:J6vWAZC60.net]
>>94
自己レスだけど検証してる動画があった
https://youtu.be/FSS94HnW3Dk

452 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 08:14:43.10 ID:SKsqr1XrM.net]
>>448
見たけど画面描画してるからその分遅くなってることを考慮してない、やり直し、と言いたい。
まあそれでも結論は変わらんと思うが。

というか、たぶん結論有りきで動いてるよなこの人。

453 名前:94 mailto:sage [2022/01/19(水) 12:40:48.58 ID:U3XJgxPOM.net]
>>449
画面更新止めるコマンドもあるので別に気にはしてないですが、エクセルの関数が実数になるまでそれなりに、時間かかりますよね

まぁ、でもAの方法(外部リンク参照)で作り変えて行こうかと思います。

454 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 16:06:12.24 ID:wLv0/dLh0.net]
取得したデータをどう使いたいのかにもよるけど
参照するExcelブックの数が増減する場合はVBA使って特定のフォルダにぶち込まれたExcelブックを全部取得するようにすると楽
個人で使う分にはこれでいいが、仕事などで自分以外の社員が触る機会がある場合は、周りのスキルを考えてVBAを使わず数式で参照させて済ますのも良いと思う
だが、環境にもよるが、外部参照を含む数式を書いたExcelブックを開いたまま参照先のExcelブックを開くと参照エラー(#REF!)になる場合があるので注意

455 名前:デフォルトの名無しさん [2022/01/19(水) 16:34:49.01 ID:x+9vZ6k00.net]
MSGBOXが表示された時、必ず最前面にする方法ってありますか?
alt+tabでタスクを切り替えないとMSGBOXが表示されない事があります
処理が止まっているのか進んでるのか分からなくて、困ってしまう

456 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 17:15:49.65 ID:O8ktC4tSM.net]
>>452
VBAのMsgBoxでは不可能
Win32APIのMessageBoxAをTopMost=Trueに設定して呼び出すしかない
VBAからMessageBoxAを呼び出す方法はぐぐればすぐ出てくる

457 名前:デフォルトの名無しさん [2022/01/19(水) 17:21:36.62 ID:ZRK6Alb6M.net]
そんなフラグ効果あんのか?



458 名前:デフォルトの名無しさん [2022/01/19(水) 17:56:37.68 ID:x+9vZ6k00.net]
>>453
ありがとうございます、そういう方法があったのですね。
処理完了のメッセージボックス、そちらにしていきます。助かりました。

459 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:35:22.31 ID:DmIv8IzU0.net]
いちおうMsgBoxでシステムモーダルの指定があるにはあるんだけどな
期待通りに動かんことが多い

いちアプリケーションがシステム全体にかかわる動作をするなって風潮だからな

460 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:45:15.60 ID:F2K8Y8lc0.net]
>>451
他ブックへの参照はgotoより使いたくないかも

461 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 19:04:03.23 ID:DmIv8IzU0.net]
>>457
複数のブックで構成されてるような資料だとまあなくはないかと

しかしリンクとコピーが比較対象になるのが理解できん
速度とかで選択するようなものじゃないだろ

462 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 19:59:02.99 ID:wLv0/dLh0.net]
>>457
わかるけど、それはプログラミングの知識がある人が職場に当たり前にいるという前提の話
まったくVBAを知らない社員に一から教え込むよりまし
ていうか個人的には、Excelブックを100個も参照させるようなのが仕事上の事情なら、まずはその運用を見直した方がいいと思うけど

463 名前:94 mailto:sage [2022/01/19(水) 20:45:45.55 ID:U3XJgxPOM.net]
他ブックの参照がなぜ駄目なのかさっぱりわからないです。。教えて下さい。

参照後の処理の内容になにか前提条件があるのですか?
自分の前提は、Excelブックを参照、みんな同じExcelバージョン、同じフォーマットを使うです

464 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 20:58:42.62 ID:B4PAoBE9M.net]
リンク切れで機能しないゴミとなったブックをお目にかかったことがないなら幸せなことだな

465 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:01:47.23 ID:K9C4LDWb0.net]
エクセルは詳しくないけど、「存在しない可能性すらある
グローバル変数」ってこと?

ちょっと学んで、「どこからでもセルの書き換え効くの?
グローバル変数地獄じゃない?」と思ったけど、もっと
大規模に起こり得るってこと?

466 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:31:45.36 ID:wLv0/dLh0.net]
>>460
フォルダ名(参照・被参照のExcelブックが別々のフォルダにある場合)、ファイル名、シート名、(使用しているなら)テーブル名、あとセルの配置
どれか一つでも変えるとリンク切れになるので、できればあまり使いたくない
ただ、先にも書いたけど状況次第ではやむを得ないこともあるし、もしそのあたりのリスクを払拭できるなら選択肢としてはあるかなと思って書いたけど、
もし、そういうことをそれほど把握する必要がない程度に重要性が高くなく、かつパフォーマンス(速度)重視の話なのであれば、あまり気にしなくていい

でも、これが仕事で何度も使用するような類のものの話だとすれば、パフォーマンスを考える前に運用をよく考えた方がいい
例えば、ファイル数(100個)や参照セル数(ブック1つにつき60セル)が固定で、シートやブックなんかはパス付で保護かけて構造を弄れないようにして、できたらファイル名なんかもアクセス権を設定して変更できないようにするか、ファイルを扱う人に絶対変えないようにしっかり申し送りするとか
もしくは構造を弄られたとしてもすぐ元どおりにできるぐらいのシンプルな作り、あるいは壊されてもすぐ復元できるようにしておくとか
どんな状況なのかは分からないけど、何を優先すべきなのかをよく整理した方がいい、という話になると思う

467 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:43:22.55 ID:zGHKrub60.net]
>>460
親からひ孫世代まで参照が繋がってるファイル群なんてものが存在した



468 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:52:36.39 ID:TxiQul+S0.net]
>>464
参照繫ぐくらいなら、ファイルパスもセルに記入して上書きさせるように実装するわ。それくらいリンクは嫌だわ。

469 名前:94 mailto:sage [2022/01/19(水) 23:01:56.42 ID:J6vWAZC60.net]
なるほど。理解出来ました。
ありがとうございます。

運用的には
VBAでファイル名算出する
シート名が違っていたり、フォーマットズレしていたら検出したいチェックツールにしたいので問題なさそうです。
参照エラーがでたら壊した人のところに殴り込みに行くシステムですね。

470 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 00:15:58.14 ID:gV+Fwxtn0.net]
まあ、まともに作ったファイルサーバなら
shadow copy くらいは残ってるだろうがね。

471 名前:デフォルトの名無しさん [2022/01/20(木) 06:56:43.44 ID:AmtKyR6La.net]
無理して変な機能追加するから
後で見返した時にワケわからなくなる

472 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 08:28:58.94 ID:mCK9tQrM0.net]
>>468
それはみんなそう
なので少しでもわかりやすいように書いておくことが必要
慣れてないうちはコメント付けまくるのもありだと思う
これは何の変数かとか、大きく何をしているか、この行は何をしているか書いとけばリファクタリングするのにも楽になる

473 名前:デフォルトの名無しさん [2022/01/20(木) 08:52:11.33 ID:aoz8cIff0.net]
>>466
毎日カチコミになるのが目に見えているゾ

474 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:39:15.12 ID:+AoyW20h0.net]
どうしても100個のファイルに分けなければならないのか
一つのブックに100シート突っ込むことはできないのか
とか考えたりはするかも

475 名前:デフォルトの名無しさん [2022/01/20(木) 12:41:49.38 ID:NS2MNDvFr.net]
ファイルコピーか、シートのコピーで
バックアップ取っておくとかは考えるかも。

476 名前:デフォルトの名無しさん [2022/01/20(木) 12:47:52.34 ID:aoz8cIff0.net]
取引先一件につき、ファイル一つ
それをマクロで集計

最初30個ぐらいだったファイルが、
会社が成長して、100ファイルになったことはあったな
フォーマットやファイルは全て自分で管理してたから問題なかったけど、
今も大丈夫かなぁ
あれ手で計算するのは大変すぎ

477 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:46:34.45 ID:BPf7HX0l0.net]
1ファイル45個のクエリーを含む同様のファイルが
13地点×6ヶ年分=78個あって、
これをシーケンシャルに1つずつ、For Nextで更新するよう組んだ。

最初の2ヶ月目くらいまでは7時間くらいで更新出来てたが、
3ヶ月目以降は毎回どこかの、
 Set tblQ = ThisWorkbook.Worksheets(ws).ListObjects(q)
と、ワークシート名とクエリー名を変数に代入するところでコケる・・・

その都度、コードを削除していったん保存、
再度貼り付けてデバッグし続行させる
沼にはまった。



478 名前:デフォルトの名無しさん [2022/01/20(木) 13:49:08.24 ID:aoz8cIff0.net]
>>474
そういう時は、ファイル保存を挟むと良い
エクセルは立ち上げっぱなしだと、どんどんテンポラリファイルが巨大化する
保存すると、それが一旦整理される

479 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:57:12.27 ID:BPf7HX0l0.net]
>>475
アドバイス、ありがとう。

一応、開く78個のファイルは1個ずつ保存して閉じているけど、
大元のVBAを持つbookをその都度保存せよ
ということかしら?

そういや、プロジェクトエクスプローラーに
既に処理が終わって閉じたbookのファイル名が残って
どんどん増えて行ったような・・・

こっちは1ファイル処理後ごとに上書き保存とかの処理は入れてなかった。

480 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:57:52.65 ID:HwD0Q83s0.net]
なんで全部Excelでやろうとするかね ボリューム見て将来鑑みて、どっかの時点で「これはパンクする」
ってぇ判断をしなかったツケだろ 経費抑制? むしろ無駄な経費が膨大に掛かってるのには目を瞑るんだ へー

481 名前:デフォルトの名無しさん [2022/01/20(木) 14:17:24.56 ID:gV+Fwxtn0.net]
>>474
変数は毎処理ごとに開放してる?

482 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:28:11.68 ID:mCK9tQrM0.net]
>>477
本人はやれる中で頑張ってるんだと思う、きっと
でも確かにそれはAccessのほうがってことはあるよね
VBAできる人なら覚えるのも簡単だと思うし

483 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:32:45.01 ID:bfB7zVPYM.net]
kintoneとかでいいでしょ

484 名前:デフォルトの名無しさん [2022/01/20(木) 14:40:11.29 ID:aoz8cIff0.net]
>>476
>一応、開く78個のファイルは1個ずつ保存して閉じているけど、
もし、
set foo = workbook.open~~~)
みたいにしてたら、最後に
set foo = nothing
を挟まないと、ずっとメモリ残り続けることになると思う。>478さんの指摘がこれ

>大元のVBAを持つbookをその都度保存せよ
これはかなりオススメ。
コードの内容がわかって無くても、エクセルファイルを保存すると大体うまくいく
※保存時に色々とうまくやってくれてるっぽい

>>477
それ言い出すと全企業が大企業並の設備を整える必要がある
ある程度拡張性を備えた上で、「5年後は別システムに移行しているだろう」のような判断ができればいいね
基本、要素(営業や取引先)がドカドカ増えないなあ、システムは特に移行しなくていいと思う。
多少使いにくくても、ノウハウが切り捨てられる方が惜しい

485 名前:デフォルトの名無しさん [2022/01/20(木) 14:41:43.21 ID:aoz8cIff0.net]
>>480
使ってから言えよ
あれ柔軟性が全くない

柔軟性の必要がない、タピオカ屋さん、ワッフル屋さんなんかにはドンピシャだろうね

486 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:41:48.98 ID:BPf7HX0l0.net]
>>478
してなくて、ぼんやり「まずはこのあたりをやらなきゃアカンのかなぁ・・・」とは思って

487 名前:た。
次に更新する月初めまでにやりまする。

大元のbookで、
"For i To k" より後の、
"Next i" までに使った変数全てについて
 Set 変数名 = Nothing
を "Next i" の直前に入れる感じで?
[]
[ここ壊れてます]



488 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:48:42.80 ID:bfB7zVPYM.net]
>>482
本当にその柔軟性必要?勝手にそう思い込んでるだけじゃない?
方眼紙に自由自在にレイアウトできなくても情報は伝わるんだぞ

489 名前:デフォルトの名無しさん [2022/01/20(木) 14:49:07.12 ID:gV+Fwxtn0.net]
一つのプロシージャで全処理するより

Class とか、Function 使う方が良いかもね。

490 名前:デフォルトの名無しさん [2022/01/20(木) 15:07:43.50 ID:aoz8cIff0.net]
>>484
必要
もちろん100社で100通りじゃない。100社で10通りぐらい。今後も増えるだろう
この柔軟性は、エクセルだとかなり受け入れやすい

>>485
正直、なるだけ1プロシージャは維持したほうが良いと思う
エクセルVBAは他の言語と違って、あまりにファイルへの依存性が強すぎる

491 名前:デフォルトの名無しさん [2022/01/20(木) 15:16:04.35 ID:gV+Fwxtn0.net]
ふーん。

オレなら処理毎にFunction プロシージャに引数で渡してあげて
ループ処理終わったら、変数開放するけどな。

変に長ったらしいのより、そっちの方が解読性がよくなる。

492 名前:デフォルトの名無しさん [2022/01/20(木) 15:19:27.67 ID:n5KSDES60.net]
>>481
お前みたいな奴がメンテできないシステムを作り出すのだぞ

493 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:20:13.56 ID:gV+Fwxtn0.net]
まあ、オレはAccess VBA専門なので
Excel VBA は遠い記憶ですが…

シンプル・イズ・ベスト。

494 名前:デフォルトの名無しさん [2022/01/20(木) 15:20:30.61 ID:/dOetE+CM.net]
バカがやると引数地獄かグローバル地獄になんだよ

495 名前:デフォルトの名無しさん [2022/01/20(木) 15:21:57.99 ID:aoz8cIff0.net]
>>488
言いたい事は分かるんだけど、エクセルはOSの依存が妙に強くて
OSの機能借りないとキツイ部分が多々ある
未だにMSGBOXがどうしようもなかった

496 名前:デフォルトの名無しさん [2022/01/20(木) 15:22:53.50 ID:aoz8cIff0.net]
>>490
なるほどw

497 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:24:46.85 ID:gV+Fwxtn0.net]
>>490

初心者はね。

最近は設計工程ばかりで、コーディングもしてないから
下流ビギナーの思考はわからんけど。



498 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:38:37.39 ID:gV+Fwxtn0.net]
確かにグローバル変数は使わない方が良い。

ホーム・プロシージャからFunction へ飛ばして
処理させてあげて
戻り値を次のFunctionへ…

って感じで作ると、テスト工程の時に楽になる。

デッカいシステムを組むとそっちの方が絶対楽だし
改修の時も、解読に困らないからね。

499 名前:デフォルトの名無しさん [2022/01/20(木) 15:56:22.20 ID:n5KSDES60.net]
>>491
いや、お前の能力が足りないだけだぞ

500 名前:デフォルトの名無しさん [2022/01/20(木) 16:21:54.83 ID:aoz8cIff0.net]
エクセルの場合は、エクセルという超グローバルオブジェクトがある
それをメインに据えれば良いと思うけどな

501 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:01:00.66 ID:ovHTHlPT0.net]
ホント、マクロは組む人によってその人のカラーや癖が出るとは言ったもんだね。

502 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:03:05.54 ID:GNfzU0ds0.net]
変数を日本語というか漢字とか使うのって邪道?
行とか列とかそのまま漢字文字で使ってるんだけど

503 名前:デフォルトの名無しさん [2022/01/20(木) 17:03:18.69 ID:aoz8cIff0.net]
>>497
んなもんプログラムならどれも一緒
エクセルは一段回上のファイルがあって、目に付きやすいだけ

504 名前:デフォルトの名無しさん [2022/01/20(木) 17:06:10.63 ID:aoz8cIff0.net]
>>498
2buyte文字ね
全然良い、というかむしろそっちの方が読みやすい
気をつけるのは、海外の漢字や絵文字
上でも出てたけど、半角ポンドなどエラーが起こりやすい文字がある

505 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:34:30.16 ID:BPf7HX0l0.net]
>>498
漢字をマクロ内で使って、
この5〜6年くらいの間で知ってるだけで少なくとも2回、
MSのupdateで動かなくなってた記憶があるので
それに対処出来ればOKかと。

Rangeで引っ張る定義名とかsheet名は
特殊な記号は避けて漢字使っちゃってる。

506 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:50:55.00 ID:HwD0Q83s0.net]
日本語(漢字)でもいいんだ へー   っていうレベルのが真似して安易に使い出したらカオス
他人事だから後は野となれ山となれ  っていう発想としか思えない
日本語OSが出来てからやれよ とは思う  米語OS使わざるを得ないなら粛々と従ってろや と
 ま、だからってローマ字に換えて30文字ぐらいのモジュールが40ヶぐらい並んでるのを見た時には一時間ぐらい気絶したけど
getsumatsukoushinn() nenjikoushintokuisakibetuhinmokubetsu()   あのさ、、、 これにOK出したの誰よ?

507 名前:デフォルトの名無しさん [2022/01/20(木) 17:51:21.68 ID:aoz8cIff0.net]
そういや何年か前、accessVBAだっけ?2byte文字あると全部エラーになるみたいなのあったな



508 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:02:49.63 ID:mCK9tQrM0.net]
>>502
ワロス

509 名前:デフォルトの名無しさん [2022/01/20(木) 18:26:03.22 ID:aoz8cIff0.net]
>>502
こういうの見るとoption explicit必須何やなって思わされる

510 名前:デフォルトの名無しさん [2022/01/20(木) 18:30:19.80 ID:NS2MNDvFr.net]
開発現場のローカルルールは
2バイト文字禁止が普通だけどね。

色んな環境で使うことを想定したら
日本語とかありえん。

コーディングの時は日本語だけど、
最終的に全置換で英語表記に変える。

511 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:06:44.42 ID:KxaVQnjRM.net]
> 色んな環境で使うことを想定したら
Excel VBA でそんなことを気にしないといけない状況って相当珍しいだろw

512 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:09:21.62 ID:WDmMC3D+M.net]
俺が前に行ってた派遣先ではC#で漢字の変数名や関数名とか自由に使ってたわ
業界ではそれなりに知られた老舗のソフトメーカーなんだけど
まあ、そういう職場もあるってことで

513 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:34:21.90 ID:NL1fx3HA0.net]
日本語以外での展開を考えてるならまあ2バイト文字禁止で良いんじゃね
日本語環境で開発してる段階で漢字禁止とかあんまり見ないけどな

ただ、メソッド名に日本語は過去にえらいことになった例があるからなぁ...

514 名前:デフォルトの名無しさん [2022/01/20(木) 23:42:09.41 ID:n5KSDES60.net]
ID:aoz8cIff0

いつもの馬鹿でしたとさ

515 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 02:47:14.61 ID:XETJK2Tn0.net]
派遣てなになに?
VBA技術者の派遣とかあるんだ?

516 名前:デフォルトの名無しさん [2022/01/21(金) 03:05:10.67 ID:iDAtgXvmr.net]
派遣業(ピンハネ屋)を禁止にすれば
日本人の給料は上がります。

517 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 05:15:31.24 ID:XETJK2Tn0.net]
派遣て確か専門職だからめちゃめちゃ稼げると聞いたけど、どうなの??
那須は出ないとは聞いたけど時給はめっちゃ高いと聞いたものでして。



518 名前:デフォルトの名無しさん [2022/01/21(金) 07:53:02.69 ID:U4E8wi5/0.net]
>>513
1500-2000円ぐらいだったかな。ただもう募集自体がほとんどない。
ほぼ全てローカル環境での作業のため、リモートも出来ない

>>512
下がる

519 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:07:59.20 ID:XETJK2Tn0.net]
へえ、1500から2000円ねそうなんだ。
自分田舎住みだからその時給はかなり水準高いわ。
こっちなんてどんだけExcelの技術あっても良くて時給1200円前後。
マクロ書ける人材は貴重だからもっと給料上げるべきだと思う。

520 名前:デフォルトの名無しさん [2022/01/21(金) 08:29:03.61 ID:U4E8wi5/0.net]
企業常駐型だから、基本かなり居づらいし
VBAでゴリゴリの開発や保守なんて絶対にやらんほうがいいわ

521 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:45:23.59 ID:XETJK2Tn0.net]
あ、常駐型SEを思い出した。
給料はもっと貰うべき。

522 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:51:43.72 ID:k97g2FVL0.net]
適正が有るだけで大した労力使わないのに給料は高いんだよ
楽だよな

523 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 09:29:31.93 ID:KSflUQH80.net]
ExcelでEnumChildWindowsを使って他アプリの子ウィンドを取得するプログラムをテストしています。
と言っても知識がないのでネットからソースをコピーしてテストしているレベルです。
EnumChildWindowsの引数でコールバック関数をしているのですが、コールバック関数を実行した時に順調に
実行される時とEnumChildWindowsを実行した途端Excelが終了する時があります。
何かよくあるミスとかあれば教えてください。
APIの宣言、コールバック関数は標準モジュール、その他はシートモジュールに書いています。
プログラムを張り付けて良いか分からないので張り付けていませんが良いならご指示ください。
よろしくお願いします。

524 名前:デフォルトの名無しさん [2022/01/21(金) 09:44:43.07 ID:U4E8wi5/0.net]
>>519
コードは貼ってくれ

525 名前:519 mailto:sage [2022/01/21(金) 11:25:52.95 ID:KSflUQH80.net]
519です。
長すぎると怒られるのでいくつかに分けます。
よろしくお願いします。

Sheet1モジュール

'///GetWindowの定数///
Const GW_HWNDFIRST = 0 '基準となるWindowと同じ種類のうち最前面のWindow
Const GW_HWNDLAST = 1 '基準となるWindowと同じ種類のうち最背面のWindow
Const GW_HWNDNEXT = 2 '基準となるWindowの次のWindow
Const GW_HWNDPREV = 3 '基準となるWindowの前のWindow
Const GW_OWNER = 4  '基準となるWindowのオーナーWindow
Const GW_CHILD = 5    '基準となるWindowの子WindowのうちトップレベルのWindow
Dim myHwnd As LongPtr  '検索ボタンのハンドルを記憶

Sub Test1()
'アプリhogeの検索ボタンを探す
Dim Ret As LongPtr
Dim hwnd As LongPtr

hwnd = FindWindow(vbNullString, "hoge") 'トップウィンド
hwnd = FindWindowEx(hwnd, 0, vbNullString, "hoge_1")'検索ボタンが所属している子ウィンド

Ret = EnumChildWindows(hwnd, AddressOf EnumChildProc, 0)
myHwnd = GetWindow(myHwnd, GW_HWNDPREV)
End Sub

526 名前:519 mailto:sage [2022/01/21(金) 11:29:13.91 ID:KSflUQH80.net]
標準モジュール

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As LongPtr, ByVal hwndChildAfter As LongPtr, ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function EnumChildWindows Lib "user32" (ByVal hwnd As LongPtr, ByVal callBackProc As LongPtr, ByRef lParam As LongPtr) As LongPtr
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As LongPtr
Declare PtrSafe Function GetWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal wCmd As LongPtr) As LongPtr

527 名前:519 mailto:sage [2022/01/21(金) 11:35:16.64 ID:KSflUQH80.net]
標準モジュールの続きです。

Public Function EnumChildProc(ByVal hwnd As Long) As Long
Dim Ret As LongPtr
Dim Leng As LongPtr
Dim Name As String * 255



528 名前:519 mailto:sage [2022/01/21(金) 11:39:21.83 ID:KSflUQH80.net]
書込みができないようで中途半端なところで切れてしまいすみません。
残り数行なのですがもう少し後で投稿します。
よろしくお願いします。

529 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 12:02:38.78 ID:Pj4yIAd6M.net]
>>524
長くなる時はコードをシェアできるサービス使って
https://collabedit.com/3dgh5

530 名前:デフォルトの名無しさん [2022/01/21(金) 12:24:55.64 ID:R2BsGPNsa.net]
標準モジュールからユーザーフォームを呼び出して、そこで入力された値を持ってきて処理したいです

試しにシンプルにこんな感じでやっても駄目なんですが、どうすればいいでしょうか?


標準モジュール
Option Explicit
Public ret As Boolean
Sub test()
Dim ret As Boolean: ret = False
UserForm1.Show
MsgBox ret
End Sub

ユーザーフォーム
Private Sub CommandButton1.Click()
Dim ret As Boolean
ret = True
Unload Me
End Sub


これでtestを実行すると、メッセージボックスにFalseが表示されます
ユーザーフォームが出てきてボタンをクリックしたら、Trueをメッセージボックスに表示するようにしたいです

531 名前:519 mailto:sage [2022/01/21(金) 12:37:47.66 ID:KSflUQH80.net]
>>525
指示してもらったことろへ貼り付けました。
よろしくお願いします。

532 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 12:39:51.71 ID:aZlF8gD40.net]
>>526
標準モジュール
Option Explicit
Public ret As Boolean
Sub test()
  ret = False
  UserForm1.Show
  MsgBox ret
End Sub

ユーザーフォーム
Private Sub CommandButton1.Click()
  ret = True
End Sub

533 名前:デフォルトの名無しさん [2022/01/21(金) 12:47:38.25 ID:R2BsGPNsa.net]
>>528
Dimを抜くと、変数が定義されていませんと出てしまうんです
Option Explicitを入れなければ通りますが、やはりTrueは返ってこないでFalseになります

534 名前:デフォルトの名無しさん [2022/01/21(金) 14:13:07.69 ID:U4E8wi5/0.net]
>>519
多分引数が間違っている。ノートパッドを起動して以下を試して、
返り値の違いを確かめてみて。
修正前は0が返ってるけど、修正後はポインタか参照が返ってるはず

hwnd = FindWindow(vbNullString, "hoge") 'トップウィンド

hwnd = FindWindow("notepad", vbNullString) 'トップウィンド

後は、検索ボックスがどうこう書いてるけど、そういうプログラムを持ってないから検証できないわ

535 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 14:50:07.67 ID:RFcu/rPfd.net]
>>526>>529
ユーザーフォーム側で「Dim ret As Boolean」を宣言するとスコープの近い変数に格納されてしまうから不要
自分も同じようなコードをかいたがなくても正しくretにTrueが入る
(「CommandButton1.Click」は構文エラーになると思うが「CommandButton1_Click」だよね)
変数がどうとかいわれるならそもそも変数がpublicでないか参照している変数名がまちがってるとかないか?

536 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 14:57:28.11 ID:aZlF8gD40.net]
>>529
528は、ちゃんと動作確認してから貼ったんだけど
コード書く場所間違ってない?
https://i.imgur.com/76hGtGx.png

537 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 15:01:17.70 ID:RFcu/rPfd.net]
>>532
細かくてすまんが
CommandButton1_Clickの代入先って最初大文字にしても勝手に小文字にならない?



538 名前:デフォルトの名無しさん [2022/01/21(金) 15:11:34.91 ID:R2BsGPNsa.net]
>>531
何回も確認してるんですが、間違ってないんですよね・・・
CommandButton1.Clickも、>>526で間違えただけです
>>528で書いていただいたものをそっくりそのまま書いてるんですが、retにTrueが入ってくれないです
環境はエクセル2010のwin7です

539 名前:デフォルトの名無しさん [2022/01/21(金) 15:17:23.81 ID:R2BsGPNsa.net]
>>532
新しい標準モジュールにtestだけ書いたらできました
何かが干渉してるってことなんでしょうか

540 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 15:22:29.45 ID:RFcu/rPfd.net]
自分はWin10(20H2)+Excel2013とWin10(21H1)+Office365(サブスクリプション版)の2つで試したけど
どちらもTrueになるね

ちなみに「ret = True」のretをマウスクリックして右クリックのメニューに出てくる「定義」を選択するとどこにジャンプする?
自分はpublic変数にとぶんだが

541 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 15:24:18.40 ID:aZlF8gD40.net]
>>534
まさかイベントプロシージャの宣言部を自分で入力かコピペしてない?
フォームデザイナーでコマンドボタンをダブルクリックすると空のプロシージャが自動生成されるんだよ

あと、試したのはWin10 Excel2021 64bitだけど、この部分の仕様はずっと変わってないはず

>>533
悪いけど指摘の意味がよくわからん
スクショの通り、これでちゃんと動いてるんで
さらに細かいことを言うとCommandButton1_ClickじゃなくてCommandButton1.Clickね

542 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 15:30:59.33 ID:aZlF8gD40.net]
>>529
Dimを外すとエラーが出るってことは、どこかで今回の件とは関係ない別の何かをタイプミスしてる
Option Explicitをコメントアウトした状態でステップ実行するとローカルウィンドウに使用中の変数の一覧が出るから、よーく見直せ

543 名前:デフォルトの名無しさん [2022/01/21(金) 15:46:49.49 ID:R2BsGPNsa.net]
>>537
フォームデザイナー使ってます

>>536
Publicに飛びます

544 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 16:13:39.82 ID:RFcu/rPfd.net]
>>537
コントロールとイベントの接続文字はアンダーバーじゃない?
ピリオドで構文エラーになるけどならない場合もあるの?

>>539の作ってるサンプルは>>528通りなの?
自分のサンプルはこんな感じで作ったけど
1.新規ブック作成
2.開発メニューからエディター起動
3.プロジェクトツリーで新規フォーム作成
3.1.コマンドボタン追加
3.2.コマンドボタンダブルクリック
3.3.CommandButton1_Clickに「ret = True」を記述
結果ユーザーフォーム内のコードは下記の状態になる
Option Explicit
Private Sub CommandButton1_Click()
ret = True
End Sub
4.標準モジュール作成
4.1.下記のコードを貼り付け
Option Explicit
Public ret As Boolean
Sub test()
ret = False
UserForm1.Show
MsgBox ret
End Sub
5.test内をクリックしてF5押下で実行

545 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 16:23:57.05 ID:IxcxpS5S0.net]
ユーザーフォーム閉じるまでメッセージボックスまで行かないわけか
いつもモードレスだから気づかんかった

546 名前:デフォルトの名無しさん [2022/01/21(金) 16:24:33.06 ID:R2BsGPNsa.net]
>>540
新規ブックで一からやったらできました
組み込みたい既存のブックでやろうとしたところ、Public retに入らない感じでしたが、新しい標準モジュールを作ってやったらできました
なので、最初に書いた先の標準モジュールが原因っぽいんですが、それが何か分からない状態です
上手く動いたコードをそのまま一番上に持ってきているんですが、エラーは出ずに実行されるもPublic retにTrueが入らずにFalseになります

547 名前:デフォルトの名無しさん [2022/01/21(金) 16:40:12.64 ID:1Ed+zt1pM.net]
理屈もわからずあちこちからコピペコピペとやってる奴によくある
そろそろ消えろや



548 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 16:45:47.13 ID:uPLc80ynd.net]
ファイルもみてないからなんともいえないけどボタンに紐づけたイベントは正しく実行されるの?
ret = Trueの行でF9おすとブレークポイント設定されるからそこで止まるかたしかめたら?
それで止まったなら1行ステップ進めてretに何が入ってるか確認したほうがいいよ
モノづくりするときは1つずつつぶしていくのが大事よ

549 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 19:18:17.67 ID:vzv4Kcp20.net]
標準モジュールじゃなくてThisWorkbookに書いてる予感

550 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 19:27:54.79 ID:7hLshO/z0.net]
インターネットのブラウザ IEとかedgeとかで任意のページを開いてそこから日付とか番号とか特定の決まった箇所にある文字や数字をWordの特定の場所にコピー、挿入する方法はありますか?
できればボタンひとつでできるようになりたいです

551 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 19:45:58.42 ID:uPLc80ynd.net]
あります。
「vba スクレイピング」「vba word 操作」でぐぐればいくらでもサンプル出てくると思うから好きなのえらぼう

552 名前:デフォルトの名無しさん [2022/01/21(金) 22:29:10.29 ID:NFZs9l3R0.net]
>>546
Ruby馬鹿だろ

553 名前:デフォルトの名無しさん [2022/01/21(金) 22:34:52.59 ID:nlcE6d040.net]
整然としてねえコーディングだな。

頭の中身が現れてるわ。

554 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 22:37:38.53 ID:nlcE6d040.net]
>>546

VBSか、JavaScript の方が
早いかもしれん。

555 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 00:26:58.95 ID:XmCgkfSL0.net]
コピペプログラマー

556 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 00:35:52.61 ID:9zfa7ona0.net]
>>547
vbaでのスクレイピングは懲りた
標準だとIEしか使えないんだもん

557 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 01:04:10.75 ID:NynwR7VqM.net]
>>552
どの言語でも外部ライブラリは必要



558 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 08:00:34.93 ID:HGIIomOF0.net]
他社製のweb受注システムから社内の生産管理システムに流し込むときにやったな
CSVダウンロードくらい用意しろってんだ

559 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 08:21:46.11 ID:R1iyPI8Z0.net]
>>550
同意
どうせ深くWeb系を扱うのであればJavascriptは必須になってくるから勉強するに越したことはないと思うよ。
VBSもVBAの知識があれば何とかなる・・・多分。
IISの知識があればそれでクラシックASPの出来上がりですよ。
本格的にやるならASP.NetだけどObject指向の概念が分かっていないとVBAからだとVB.Netでも少し敷居が高いかも。

どうせWeb版のEXCELとか弄るときはJavascriptだし、今の内に慣れておいた方がいいと思う。

560 名前:デフォルトの名無しさん [2022/01/22(土) 08:34:08.56 ID:DLYfLGcJ0.net]
>>554
同じく
csvDL自体がないってのはさすがに見たことないけど、
DLに項目が不足してる時はスクレイピングで抜いてるな

561 名前:デフォルトの名無しさん [2022/01/22(土) 08:36:01.91 ID:DLYfLGcJ0.net]
chromeの拡張機能でスクレイピングするのが最も安心安全
サーバーからすれば一番ユーザーに近い
IEは対応してないどころかもうすぐなくなる。

そういやvbaのブラウザはどうなるんだろ?

562 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:08:57.53 ID:r24PNXTk0.net]
for i= 1 to 100 step 1
#If conEnv = 1 Then
 ans = d1 * d2
#Else
 ans = d1 / d2
#End If
Next i

こんな感じに条件付きコンパイルをしてる場合、
ループ毎にIF判定してるんですか?

563 名前:デフォルトの名無しさん [2022/01/22(土) 10:56:45.31 ID:DLYfLGcJ0.net]
>>558
しない
条件つきコンパイルってのは、実行前にコードを書き換えるようなものと思って良い。実行後は消えて無くなると思って良い。
>>558は、以下と同等に解釈される

Sub foo()
For i = 1 To 100 Step 1
conEnv = 1
ans = d1 + d2
Next i
End Sub

ちなみにこれも上記と同じ。 ans = d1 * d2 は実行されない
for i= 1 to 100 step 1
conEnv = 1
#If conEnv = 1 Then
 ans = d1 * d2
#Else
 ans = d1 / d2
#End If
Next i

分岐させたいならこう
for i= 1 to 100 step 1
#conEnv = 1
#If conEnv = 1 Then
 ans = d1 * d2
#Else
 ans = d1 / d2
#End If
Next i

564 名前:デフォルトの名無しさん [2022/01/22(土) 11:00:33.05 ID:DLYfLGcJ0.net]
あと、下手に条件つきコンパイルは本当にやめたほうがいい。絶対にややこしくなる
唯一使える最適な場面は、コンパイル時にエラーが起こる可能性がある箇所。
パッと思いつくのは、バージョン違いへの対応程度

テスト環境の切り替え〜という人もいるけど、関数でどうこうするのと変わらん

565 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:09:48.37 ID:r24PNXTk0.net]
>>559
ありがとうございます
質問の後で気付いてやってみたステップ実行でも
ループ毎にIF判定やってませんでした

566 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:12:56.15 ID:Zx7T2GTSM.net]
>>557
フォームに貼り付けるブラウザコントロールが標準で入ってるから、これは簡単には廃止できない
アプリは消えてもオブジェクトは残り続ける

567 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:58:31.26 ID:2RwNzJk50.net]
.netだとWebView2が使えて便利なんだけど実装されないかな
ついでにコントロールのスクロールをマウスでできるようにして欲しい



568 名前:デフォルトの名無しさん [2022/01/22(土) 13:04:36.26 ID:6LO0uF920.net]
ID:DLYfLGcJ0

こいついつもの馬鹿か

569 名前:デフォルトの名無しさん [2022/01/22(土) 13:13:07.59 ID:DLYfLGcJ0.net]
笑w

570 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:50:16.42 ID:RiKtYPqw0.net]
頭痛が痛い

571 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:51:56.45 ID:NrxysVpy0.net]
バファリン飲め

572 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 22:48:31.49 ID:XmCgkfSL0.net]
頼んでもないのに長々と知識披露してくる人ってなんなんだろうね?

573 名前:デフォルトの名無しさん [2022/01/22(土) 23:15:30.08 ID:DLYfLGcJ0.net]
知識の共有だろ
俺は好きだから長文どんどん書いていいぞ
歴史的経緯とかがあると尚グッド

574 名前:デフォルトの名無しさん [2022/01/23(日) 00:04:39.53 ID:MiYFwUbv0.net]
>>569
馬鹿が嘘を書くなよ

575 名前:デフォルトの名無しさん [2022/01/23(日) 00:35:00.90 ID:HSIItn8m0.net]
めっちゃ怒ってて草w

576 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 00:38:42.06 ID:sfiZCcaw0.net]
>>569
TK80から語り出すがいいのか?

577 名前:デフォルトの名無しさん [2022/01/23(日) 00:41:37.63 ID:HSIItn8m0.net]
>>572
そこまで遡るとさすがにエクセル関係なくなるような
俺はいいけど、他の人には迷惑だと思うぞ



578 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 13:50:31.72 ID:SdYMRJnE0.net]
今時5chの専門版に張り付いてる異常者なんて現実じゃ誰にも相手にされない教えたがりおじさんぐらいしか居ないんだから
その辺弁えてもっと敬意持って質問しろよ

579 名前:デフォルトの名無しさん [2022/01/23(日) 18:52:30.22 ID:HSIItn8m0.net]
条件付きコンパイルで、OSのバージョン違い以外の使い方ってありますか?

580 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:43:03.21 ID:2ddsSarEM.net]
>>575
Excelのバージョン違い
独自にデバッグモードなどを設定している場合

逆に、OSのバージョンによって作り分けるケースってそんなにないと思うなあ

581 名前:デフォルトの名無しさん [2022/01/23(日) 23:04:13.46 ID:HSIItn8m0.net]
ようやっと終わる

米Microsoftは1月19日(現地時間)、「Excel 4.0」(XLM)マクロを予定通りデフォルト無効化したと発表した。「Excel 4.0」マクロの利用を制限するオプションは昨年7
https://news.yahoo.co.jp/articles/8e4dd5e97b3b094d0d98e692b48e65864848136c

582 名前:デフォルトの名無しさん [2022/01/24(月) 10:20:53.44 ID:7Kajjflda.net]
>>575
好きに使えばいいと思う

583 名前:デフォルトの名無しさん [2022/01/24(月) 10:34:32.16 ID:0XRM59Ri0.net]
ClassモジュールとFunction と
多次元配列を使いまくると
優秀に見られるよ。

584 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 11:54:29.81 ID:5FJvHF790.net]
引き継いだ人が困るわ

585 名前:デフォルトの名無しさん [2022/01/24(月) 12:20:26.60 ID:0SZZxpxwa.net]
コメント残せ

586 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 13:00:01.29 ID:5FJvHF790.net]
コメント残したけど、後任の者がそもそもマクロの知識がないパターンがあったよ
その内に部署でマクロ禁止令が入ったよ

587 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 13:33:12.64 ID:iw4K3rH6d.net]
程度にもよるけどVBAのマクロ程度で禁止とかかなしいね



588 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 17:18:50.82 ID:j9lgzOiA0.net]
Webやhtmlのメールも危険だから禁止かな

589 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 17:21:37.60 ID:WNHxRwF80.net]
普通の事務員にメンテできるようなもの残せと言われればそうするしかない

590 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 17:27:47.92 ID:xAZorvxa0.net]
1セルの中に長大な式を書くようにならないかそれ。

591 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 18:12:53.56 ID:JIfRBOPe0.net]
パソコンの苦手な人材が来てもいいように、みんな紙と電卓でやればいいんじゃない?

592 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 19:32:09.39 ID:QSZRM/el0.net]
パソコン苦手な人にエクセル触らせんなよ

593 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 20:07:49.12 ID:JR1WCq5+d.net]
メインモジュールには処理の流れだけ書いて後はCall Function Classから引っ張れって言う風潮があるのがイマイチ理解出来ない。あと出来るだけ変数に入れて処理しろって言う風潮も。

人に引き継ぐ時に初見で見たこともない変数名や関数名を解読させたりいちいち流れをぶった斬ってあちこちプロシージャ間を行ったり来たりさせるのが本当に可読性を上げることに繋がんのか?

594 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 20:23:59.31 ID:E1L8nOD4M.net]
規模の大きなプログラミングをするなら重要
でもVBAで規模の大きなプログラミングをする時点で間違っているのでそんなことはしなくていい

595 名前:デフォルトの名無しさん [2022/01/24(月) 20:25:55.48 ID:iJSI2wDaM.net]
は?
変数なんか使わずに Range("A1") を直接使ってるよ
分かりやすいからね

596 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 20:47:26.58 ID:xAZorvxa0.net]
>>589
「グローバル変数」とか「構造化プログラミング」とか「オブジェクト指向」とかググってみればいいかも。

「関数型プログラミング」までは行かなくてもいいと思うけどw

597 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 21:02:33.82 ID:JIfRBOPe0.net]
そりゃ読む人による
知識と経験がある人にとってはセオリー通りに書かれてる方が読みやすい



598 名前:Mickey [2022/01/24(月) 21:25:54.13 ID:HmIH0Tmsr.net]
Excel は使う人によっては、ただの表計算ソフトでしかないし、

優秀なプログラマーが、VBAを駆使すれば、大規模なデータベースのフロントエンドや
ActiveDirectory等、インフラ管理のツールにもなる。

Windows環境でなら、Excelがあれば、ほぼできない事は無いかと。
Accessなら、なおさらのこと。

599 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 21:31:57.98 ID:w+KnMuAHM.net]
>>592
VBA でオブジェクト指向は要らんやろ

600 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 21:32:13.51 ID:9LuFH7rJ0.net]
シート参照難しいんですが…

フルパス必要な時とそうでないときのかき分けがさっぱりです

601 名前:デフォルトの名無しさん [2022/01/24(月) 21:33:33.84 ID:HmIH0Tmsr.net]
弘法筆を選ばず と言うが、
無能なプログラマに限って
プログラミング言語にこだわったり
たかが、Excelマグロだろ?w
などと見下す。

もっとも安価に、いろんなシステムを組める
至極優秀なツールだよ。Excelは。


まあ、俺なら開発環境なんて、
メモ帳だけで十分だけどね。

602 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 21:34:37.02 ID:hdMr3QU+0.net]
わかんなかったら覚えろよ勉強しろよ 努力無しで成果が出るとでも思ってんのか?
工場の現場で加工機のプログラムわかんないから手動で加工していいか?ってダダこねてるのと一緒だぞ
だいたいこんくらいでいいか なんてぇ精度で製品造るつもりか?1/1000精度求められる加工で?
それを認める上司も上司だ 一歩でも前に進む気概が無いから他の国に後れを取るってぇことにはよ気付け

603 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 21:36:18.43 ID:HmIH0Tmsr.net]
>>595

ん?
VBA自体がオブジェクト指向言語だけどね。

まぁ、ここのあたりは、不毛な宗教論争になるので
ここまでとするが。

604 名前:デフォルトの名無しさん [2022/01/24(月) 21:39:41.61 ID:0uV4r5KA0.net]
workbookという巨大なオブジェクトがあるじゃろ

605 名前:デフォルトの名無しさん [2022/01/24(月) 21:43:12.08 ID:HmIH0Tmsr.net]
WorkBook、正直邪魔だよね。

少人数の給料計算くらいなら良いけど

大量のデータ管理には重くて使えないし。

606 名前:デフォルトの名無しさん [2022/01/24(月) 21:51:17.38 ID:aObfNlgq0.net]
>>601
馬鹿にはわからん使い方があるのだろ

607 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 22:27:03.42 ID:0XRM59Ri0.net]
そういえば初心者の頃は、配列とか定数変数の代わりに
WorkBook を使ったりしてたな。
これはデメリットだらけ。



608 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 22:46:11.44 ID:5FJvHF790.net]
マクロ禁止になった理由はいろいろあるけど、一番は属人化になるからという理由でしたわ。
関数も長々とした入れ子はダメというローカルルールできた。

609 名前:デフォルトの名無しさん [2022/01/24(月) 22:53:36.30 ID:0XRM59Ri0.net]
職場を無能だけで構成しようとすれば
そうせざるを得ない

そこが欧米企業と旧日本型企業との違い

610 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 22:58:12.91 ID:0XRM59Ri0.net]
セルに五重くらいのIF,OR文の関数を入れて
悦に浸ってるオッサン居たけど
アホにしか見えんかったわ

611 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 23:00:41.29 ID:5FJvHF790.net]
あと、上席が言うには「うちはVBAを書くのが仕事じゃないんだから、そればっかにとらわれて本来の業務を疎かにしないでくれ」と。

612 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 23:09:57.20 ID:0XRM59Ri0.net]
出たw
大多数の日本企業の実態がソレ。

業務効率化という
意識が30年遅れてます、とね…

VBAは隠れてやった方がええよ。

613 名前:デフォルトの名無しさん mailto:  [2022/01/24(月) 23:10:32.49 ID:0XRM59Ri0.net]
アテクシなんざ
手作業で、一日かかる作業
(大量のドキュメント作成)を
マクロで1時間で終わらせて
残りの時間はVBAで遊んでましたぜ。

Word VBAも出来ると素敵だよ。

614 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 23:32:47.93 ID:j9lgzOiA0.net]
>>589
自己流だけどメインルーチンはあらすじ、グローバル変数は登場人物みたいな感じで使ってるわ
フォームやシートに書くコードはイベントハンドラくらいで、ちょっとでも長ければ似た名前のモジュール(Form1bみたいな)の中に
コントロールごとに分類して関数なりなんなりを作ってそれを呼んでる

複数のフォームで使い回せるものは複数のフォーム名が入ったモジュールを作って入れてる
プロシージャ名はフォーム名_コントロール名(略せれば略)_処理名で統一してる

グローバル変数もPbという名前の専用のモジュールに突っ込んでる
登場人物一覧みたいな感じで参照ができる

多分これでだいぶ解りやすくなると思うんだが……
VBAもxmlコメントが使えれば解りやすいんだけどな

615 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 23:42:30.31 ID:veuEuZMi0.net]
VBAなんて自分の作業効率化するときだけにしとき
他人に使わせて良い事無い

616 名前:デフォルトの名無しさん [2022/01/24(月) 23:43:46.42 ID:0uV4r5KA0.net]
>>607
最初の一回だけ構築すれば、後は全自動・ミスなしの瞬殺なのにねぇ

617 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 23:52:36.12 ID:aJKkYLDpd.net]
>>607の上席が、小手先の作業効率改善オナニーばっかりやってないで業務そのものを見直せという意味で言ってるんだとしたら極めて正しいと思うけどね
VBAで簡単に自動化できる業務なんてそもそもほとんどが無意味なんだよ



618 名前:デフォルトの名無しさん [2022/01/24(月) 23:56:01.84 ID:0uV4r5KA0.net]
それが出来れば苦労せんわw
末端から少しずつ見直していく事で、大きな改善ができるようになる
いきなり改善しようとすると、大体無理が出る、というか出た。

619 名前:デフォルトの名無しさん [2022/01/25(火) 00:50:53.14 ID:Y5KLOHGW0.net]
excel VBAは手段であって目的ではない

620 名前:デフォルトの名無しさん [2022/01/25(火) 01:30:31.84 ID:mNb42c/J0.net]
日本の場合、会社組織そのものが、非効率の根源なんだけどね。

上層部は社内での自分の立場を確立するために、イエスマンで固める伝統が根付いてて
下から変えるのは、ほぼ不可能。

その意味から言って、コロナ禍は日本にとって救いの神だった。

コロナ禍がなかったら、マズゴミの情報鎖国で、あと10年以上、変わらずに
気がついた時にはASEAN諸国にまで、IT技術と経済で抜かれてただろう。

おそロシア

621 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 02:03:41.94 ID:mNb42c/J0.net]
>>613

まさに典型的な、俗人的業務の思考。

個人の力量に関係なく、最高パフォーマンスで会社がまわるのを考えるのが
企業としての真の効率化。

いまだに営業職がメインの日本型企業は特に糞。

GAFAM等、欧米のトップ企業に、そんなカビ臭い会社が無いのを見れば明らか。

622 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 04:51:07.51 ID:jYjAr1e40.net]
>>604
>関数も長々とした入れ子はダメというローカルルールできた。

それはちょっと残念かも
呼び出す関数の役割が明確化されていれば
どんなに入れ子が多くなっていても
一度内容を理解してしまえば
そんなに読み込むの苦労しないと思うし
場合によっては途中から奥まで
読まなくても解るようになるのに。

デコレーターパターンみたいのを
使いたい場合はどうするの?

623 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 06:27:16.77 ID:T29wyfYtM.net]
>>599
> VBA自体がオブジェクト指向言語だけどね。
VBAのオブジェクト指向はあまりにも中途半端
Workbook や Worksheet 等のオブジェクトを扱えるけどオブジェクト指向の知識はほとんど要らん
Let と Set の違いがわかれば充分

624 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 06:40:37.19 ID:nnTBaJb2M.net]
>>604
嫌がらせに100万行 x 1.6万列目のセルに途中の計算式入れて50万行目 x 8万列目辺りからoffset関数で参照だな

625 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 07:26:11.67 ID:jYjAr1e40.net]
>>619
まぁMicrosoftが元々中途半端で終わらせるのが好きだからしょうがない。
旧VB6とVB.Netに切り替わったときもそうだった。

とは言ってもObject指向知ってるのと知らないのではロジック作成するときの視野の広がりが変わってくる。

何かのロジック組むときにどういう方法で組むのがモアベターか、取れる手段が増えてくるよ。

626 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 07:56:08.67 ID:ZGZoh/tR0.net]
>>618
途中計算用のシートを作れば良いのでは

627 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 08:05:53.28 ID:vd4sNBPHM.net]
>>621
取れる手段増えてもVBAで使えなきゃ意味ないだろ
てか余計ストレス溜まるわ



628 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 08:50:51.46 ID:j/cJSCFFd.net]
>>607の例は結局どんなことして出した結果なのかを証明できなければ使えないってことも含まれてるんでしょ
そういう場所では非効率でも電卓なりつかえってことさ

629 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 09:32:01.78 ID:vxmGrPnAM.net]
上席から見たら本来業務を疎かにしてVBAで遊んでるように見えてるんだろ
そりゃマクロ禁止にするわな

630 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 10:18:32.74 ID:1FWjey8wr.net]
>>619

worksheet や workbook も確かにオブジェクトだけど
オブジェクト指向のオブジェクトとは意味が異なるよ。

オブジェクト指向言語であるか否かは、C言語と、
C++やJavaの違いなので。

631 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 10:26:48.56 ID:1FWjey8wr.net]
本当にVBAプログラミングがやりたいのなら
仕事を変えるしか無いわな。

いまだに80年代のようなやり方を変えずに
やるのを良しとする老害が、上席に居るような
会社に、残念ながら未来はない。

632 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 10:46:46.71 ID:qTksV7dH0.net]
製造業の事務員にVBA使える人一人欲しいんだけど事務で求人しても碌なの来ないんだよなぁ

633 名前:デフォルトの名無しさん [2022/01/25(火) 10:53:10.17 ID:bToP/k2z0.net]
>>628
ここで募集してみては?
リモートでやってくれる人がいるかもしれない

634 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 10:58:19.04 ID:CplOG10X0.net]
同志達の職場もいろいろ大変だね書き込み見ていると。うちだけじゃないのね。
長い計算式はバグがあった時に困るから作業列を使えとお達しがありましたよ。
うちの女の子達は複雑なのはあまり直せないから。
マクロはやはり過去に作った人が退職して誰も直せないから禁止になったみたい。

635 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 11:00:59.60 ID:CplOG10X0.net]
>>620
その手があった!
じゃなくてそれやるのやめてけろー泣

636 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 11:06:46.89 ID:j/cJSCFFd.net]
VBA使いたいから仕事辞める人なんていないでしょ
>>628
ここにいるぐらいなら自分でやればいいのでは

637 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 11:15:20.00 ID:a/XPvOPlM.net]
俺を雇ってくれ
必要な能力はVBAだけでええんか?その業種に固有の知識が必要だとアウトかもしんないけど



638 名前:デフォルトの名無しさん [2022/01/25(火) 11:21:08.63 ID:bToP/k2z0.net]
>>630
基本的には作業列が良い
ただその作業列も、右に言ったり左にいったり、ではなく、
左の数字を右に流していく、最後は一番右に書く、
のように統一していないと、やっぱり読みづらくなる

639 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 11:59:13.06 ID:NVa7IPQ3M.net]
>>626
> worksheet や workbook も確かにオブジェクトだけど
> オブジェクト指向のオブジェクトとは意味が異なるよ。
どこが違うというのか?

> オブジェクト指向言語であるか否かは、C言語と、C++やJavaの違いなので。
意味不明

640 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 11:59:36.95 ID:HS+/VKuh0.net]
その業種独特とか固有とかそこらじゅうに転がってるぞ それを読み解くチカラ無くしてVBAだけ 等とは笑止千万
だいたいが、VBAどころかExcelすら無関係でも彼らはそれをこなしてる 先ずはそこがボーダー
そこを起点に、それが効率化できるか改善できるか、でようやくVBAの出番
改善や効率化が不要なら出番すら無い むしろ出しゃばるな 今のままでいい  それを見極めるのが上司上長の役目

あと無意味に改行する奴

641 名前:デフォルトの名無しさん [2022/01/25(火) 11:59:54.76 ID:7EThQbwZM.net]
オブジェクティブCは?

642 名前:デフォルトの名無しさん [2022/01/25(火) 12:15:21.94 ID:zQXNzX5la.net]
>>628
自分ができないのにできる人が来ないとか言うなよ

643 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 12:31:10.86 ID:zFwMgogDd.net]
「オブジェクト構造」と「オブジェクト指向プログラミング」を混同していませんか

644 名前:デフォルトの名無しさん [2022/01/25(火) 12:42:30.48 ID:Y5KLOHGW0.net]
自分の要求を完璧に実行してくれる天才に
金を払わないでもやってくれる人ってなかなかいないんだよね

645 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 13:18:00.17 ID:j/cJSCFFd.net]
事務員に+αでVBA知識なんだから月給なんて20万程度での募集なんでしょ
やめとき

646 名前:デフォルトの名無しさん [2022/01/25(火) 14:06:19.97 ID:WI95qNC1M.net]
テスト

647 名前:デフォルトの名無しさん [2022/01/25(火) 14:10:24.68 ID:WI95qNC1M.net]
>>628
詳細をお伺いしたいので、よろしければ一度ご連絡下さい
vba_20220125@yahoo.co.jp



648 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 14:50:40.66 ID:CplOG10X0.net]
余程VBAが好きならその仕事を受けるのはアリだと思いますが、それでも知らない会社のシステム組むのは恐いですな。
何かあった時の各種トラブル対応を完璧にできる人じゃないとキツイのでは?

649 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 14:52:58.84 ID:CplOG10X0.net]
>>634
なるほど。同志の言うとおり
作業セルも作り方が人によりけりなので統一すべきですね。

650 名前:デフォルトの名無しさん [2022/01/25(火) 15:04:52.93 ID:bToP/k2z0.net]
大介って光2コンボ好きなのか

651 名前:デフォルトの名無しさん [2022/01/25(火) 16:23:40.81 ID:KtMUUOjX0.net]
右から来たものを左へ受け流す

652 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 19:20:32.27 ID:mNb42c/J0.net]
Excel VBAで、Windowsサーバの管理とか
OracleとかのDB連携システムを構築できれば
月収40〜50万は余裕でもらえるけどね。

一般職よりIT技術者になった方が
年収は一気に上がるのに。

653 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 19:43:09.58 ID:bToP/k2z0.net]
>>648
それはさすがにMSSQLサーバー必須
vbaはほとんど使わない

構築だけならアホみたいに余裕

654 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:00:58.11 ID:mNb42c/J0.net]
ん?意味わかってないね…(汗

Excel のフォームをフロントエンドにして
データベース検索できるようにするんだよ。

Excelでボタン押すと、入出力フォームが出てきて
データベースへの読み書きを簡単にできるってやつ。

VBA上級者なら簡単に作れる。

655 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:05:26.58 ID:mNb42c/J0.net]
あとは、 Excelフォームから、WindowsサーバにAPIでアクセスして
ハードウェアのリソース管理とか、AD管理できるようにするとか。

サーバーの監視部隊が定期的に手作業でやってる管理業務を自動化する。

AD とは、Active Directory のことね。

656 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:09:23.34 ID:mNb42c/J0.net]
>>649
SQL Serverじゃなくても、VBAから
OracleでもMySQLでも連携可能だよ。

657 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:16:10.91 ID:ZGZoh/tR0.net]
>>651
フロントエンドにExcelを選定する時点で怪しすぎるわ



658 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:18:03.17 ID:ncFbLrOnM.net]
VBAでイキってて草

659 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:19:27.46 ID:mNb42c/J0.net]
もちろん、DBの深い知識とか、Windowsサーバを
管理できる知識がないとできないけどね。

どちらもSQLの読み書きは必須。

660 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:19:40.81 ID:CplOG10X0.net]
酷い言い方する人は、VBAはプログラミングではないと言いきる人いますからね

661 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:21:51.60 ID:Y5KLOHGW0.net]
吾輩は猫であるとかいう人もいるからな

662 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:22:00.61 ID:bToP/k2z0.net]
>>653
うん・・・
SQLServerの情報は、accessで引っ張って来て終わりなんだ
VBAは使わないはず

663 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:22:19.53 ID:mNb42c/J0.net]
ん?Access でも、Word でも作れるよ。

MS Office を使えばコスパ良く自動化できる
ってのを、割と知らない無能が多いから
ヒントを書いたまでだけど?

664 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:25:27.78 ID:mNb42c/J0.net]
なぜかバカほど高価なミドルウェアを使いたがるけど
VBAで自動化したらタダでできるのに。

オレはVBSでも作ったけどね。
VBSならメモ帳だけでプログラミング可能。

665 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:28:01.06 ID:mNb42c/J0.net]
>>656

ああ居る居る。
Javaとか、Pythonじゃないととか…
ただマウント取りたがる無能なんだろうね。

VBAは、Officeのリソースしか使わないから
コストパフォーマンス最高なのに。

666 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:31:39.60 ID:mNb42c/J0.net]
>>658

Accessなら、標準でSQL Serverとの連携は
VBA使わなくても簡単にできるけど、

フォームを使いたい場合は、VBA必須。

667 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:35:14.51 ID:mNb42c/J0.net]
MS Officeが無い場合でも JavaScriptでも
できるけど。

とにかく色んな自動化は、格安でできるってこと。

弘法筆を選ばずとはこの事。笑



668 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:38:14.03 ID:mNb42c/J0.net]
まあ、給料上げたいなら
努力して頑張りましょう。

669 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:40:51.27 ID:f4GoSiUSM.net]
Excel VBAでも作れるけどC#とかの方が全然楽だぞ
定期的なADの操作とかならPowerShellでいいし
VBAしか書けないというのでなければ.NETFrameworkの恩恵を受けられないVBAの出る幕はない

670 名前:デフォルトの名無しさん [2022/01/25(火) 20:41:24.90 ID:4M+ZFVtxM.net]
いつもの馬鹿か?

671 名前:デフォルトの名無しさん [2022/01/25(火) 20:44:12.39 ID:EmlIIuq10.net]
ID:mNb42c/J0

いつもの知ったかの馬鹿?

672 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 20:46:43.85 ID:mNb42c/J0.net]
コスパの話をしてんのよ。

わかるかな?無能さん。

673 名前:デフォルトの名無しさん [2022/01/25(火) 20:58:23.53 ID:EmlIIuq10.net]
>>668
無能はお前だろ、馬鹿が
コスパなら>>665が書いてるようにPowerShellだろうが

674 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 21:01:31.55 ID:mNb42c/J0.net]
もちろん、PowerShellでも作れるし
他にもテキストベースなら
JavaScript、VBSでもつくれるし。

675 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 21:01:47.49 ID:7v92mOzc0.net]
VBAスレなのになぁ

676 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 21:04:24.62 ID:mNb42c/J0.net]
無能はスマソ。
Windows環境なら、簡単に自動化する方法は
沢山あるよって話でした。

さようなら。

677 名前:デフォルトの名無しさん [2022/01/25(火) 21:28:25.73 ID:EmlIIuq10.net]
>>672
話しを誤魔化して逃げるのかよ、馬鹿



678 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 21:31:06.39 ID:Ezk4VrXqM.net]
放置しとけよw
別に今時のWindowsならC#でもVB.NETでも使えることすら知らんみたいだし

679 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:00:31.09 ID:+A6ImuRo0.net]
>>604

なんかもうため息というかなんというか。要は上司の「俺が理解できないから」だよね。
悪い意味での日本流。東アジア流かもしれん。

偶然の産物かもだけど、「長々とした入れ子は駄目」は賛成する。

4段以上のネストとか30行以上の関数とか俺の頭じゃバッファオーバーフロー。

680 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:08:37.63 ID:+A6ImuRo0.net]
If( 正当条件1 ) Then
  If( 正当条件2 ) Then
    If( 正当条件3 ) Then
      If( 正当条件4 ) Then
        長〜い正当処理1
        長〜い正当処理2
        長〜い正当処理3
      Else
        エラー4
    Else
      エラー3
   Else
    エラー2
  Else
   エラー1


681 名前:End If

こんなの見ると、「初手でエラー全部弾けよ」と思う。
[]
[ここ壊れてます]

682 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:11:24.49 ID:Zmf/5OMz0.net]
まあまあ、自分が昔組んだコード見ると何でこんな面倒なことやってたんだろうってみんなが通る道だし

683 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:16:18.25 ID:bToP/k2z0.net]
>>676
こういう場合どうすべきかね
フラグ立ててfalseならexitsubにしてしまうか
gotoかエラーコードで最後に飛ばすか

684 名前:デフォルトの名無しさん [2022/01/25(火) 22:21:46.97 ID:mNb42c/J0.net]
いま、Youtubeひろゆきライブ配信やってるから

よく聴いて、社畜奴隷の洗脳を解きなさいな。

685 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:23:22.62 ID:CplOG10X0.net]
Office田中先生、近々ようつべに復帰するみたいですね。
内容は当たり外れあるからアレだけど、あの方の喋りはひょうきんで楽しい。

686 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:24:31.01 ID:CplOG10X0.net]
>>677
恥ずかしくなりますよね昔のシート見ると。
当時の自分は何がしたかったのかみたいな。

687 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:32:38.66 ID:T9L9nj8SM.net]
>>676 なら

If Not 正当条件1 Then
 エラー1
ElseIf Not 正当条件2 Then
 エラー2
ElseIf Not 正当条件3 Then
 エラー3
ElseIf Not 正当条件4 Then
 エラー4
Else
 長〜い正当処理1
 長〜い正当処理2
 長〜い正当処理3
End If

とする、面倒なのは

If 正当条件1 Then
 ちょっとした処理1
 If 正当条件2 Then
  ちょっとした処理2
  If 正当条件3 Then
   長〜い正当処理1...3
  Else
   エラー3
 Else
  エラー2
Else
 エラー1

のケースでこの時はルーチン分けるかGotoで途中脱出させると思う



688 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 23:09:39.57 ID:ZGZoh/tR0.net]
Select Case 0
Case 正当条件1
エラー1
Case 正当条件2
エラー2
Case 正当条件3
エラー3
Case 正当条件4
エラー4
Case Else
長〜い正当処理1
  長〜い正当処理2
  長〜い正当処理3
End Select

どやさ

689 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 23:20:00.64 ID:Y5KLOHGW0.net]
Call 長い正当処理1to3

690 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 23:22:36.33 ID:DW1OPm0+0.net]
>>676
VBAはショートサーキットしないからIfを何段も並べた方が効率いい場合がある
けど、この場合はエラーも4種類だから判定式を1つにまとめるわけにいかない

この書き方が読みにくいと思うならIfからエラーまでをそれぞれ4つのFunctionに飛ばすかな

691 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 23:29:04.02 ID:UWkwB/rRd.net]
頭が悪いからずっとこれだわ

If エラー条件1 Then
エラー処理
Exit Sub
End if

If エラー条件2 Then
エラー処理
Exit Sub
End if

If エラー条件3 Then
エラー処理
Exit Sub
End if

正当処理

692 名前:デフォルトの名無しさん [2022/01/26(水) 01:52:17.01 ID:ULWJ4UsX0.net]
>>679
馬鹿が底の浅い知識をひけらかして嘘を書いて、捨てゼリフ吐いて逃げたのにノコノコ戻ってきて再び捨てゼリフと
馬鹿は自分の拙さを知らずに馬鹿な自分が見えるだけの世界が全てだと思っているから馬鹿なんだよ

693 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 06:27:00.95 ID:0epn3Uk/M.net]
>>686
サブルーチンに切り出せるならそれが一番見易い

694 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 11:26:17.93 ID:RGV8ouxS0.net]
パッと思い付いてすぐコードを書ける自体有能だと思いますよ。
みんな凄い。

695 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 11:54:57.36 ID:xGOCvJmUr.net]
たしかにVBとか普段書かないからif thenおかendなんて思い出せないよな

696 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:10:14.89 ID:q0HuFlPw0.net]
ちゃんと単体結合テストやるところの場合だと
処理毎に、Function に分けるのが吉。

697 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 14:42:22.30 ID:ip0aOcF2M.net]
みんな試行錯誤してきたのがよくわかる



698 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 16:16:07.18 ID:RGV8ouxS0.net]
Excel全般て本当に努力しないと使えないってのはウソじゃないですな

699 名前:デフォルトの名無しさん [2022/01/26(水) 16:21:39.28 ID:ykAsNY55r.net]
Excel VBAビギナーの頃
5000万の案件をやり遂げた事あるけど
VBの入り口としては良いよね。

昔はVBAを入り口に、VB6.0 に移行できたから
良かったんだがな。

700 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 18:39:36.99 ID:WAP1y4aa0.net]
>>623
まぁ他言語をやってない奴の意見なんてそんなもんだろな。
VBAで使えるものもあれば使えないものもある。

テンプレートメソッドパターンなんかは使えないけどストラテジーパターンなんかは使える。

そういうの使った際に分岐が減るからUT楽になるかなー、とか、それ使う程の規模かなー、とか
楽な方を選べるってことだよ。

701 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 18:53:39.06 ID:YVr9NW6iM.net]
>>695
> ストラテジーパターンなんかは使える。
無理じゃね?

702 名前:デフォルトの名無しさん [2022/01/26(水) 19:15:39.62 ID:xR2ItXtPM.net]
グローバルしかない古代BASICに比べれば天国じゃよ

703 名前:676 mailto:sage [2022/01/26(水) 20:11:08.97 ID:+JbM4Kut0.net]
みんなやっぱ困ってるお題なんだなこれ。反応ありがとう。

俺は

Function Func(Args)

 Func = TestArguments( Args ) // ←このへんは異論出るかもだけど、内部関数で引数テストはありだと思う。

 If Func <> Normal Then
  Exit Function
 EndIf

 Call 長〜い処理1をファンクションにしたもの
 Call 長〜い処理2をファンクションにしたもの
 Call 長〜い処理3をファンクションにしたもの

End Function

てな感じをイメージしてた。VBAの文法的にはむちゃくちゃかもだけど、最近書いてないのでそこは許してw

C風に

If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。

704 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 20:33:27.76 ID:Rwt/NS3J0.net]
エラーとしてまとめるってのを昔見たことあるけど、見づらいかなぁ

Sub Func()
On Error GoTo err

flg = True

If flg Then
err.Raise Number:=513, Description:="内容"
End If

' Call 長〜い処理1をファンクションにしたもの
' Call 長〜い処理2をファンクションにしたもの
' Call 長〜い処理3をファンクションにしたもの
Exit Sub

'エラー処理
err:
MsgBox err.Number & vbCrLf & err.Description
End Sub

705 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 20:50:31.29 ID:8zLJqphFM.net]
>>698
> C風に
> If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
書けるけど君の思ったようには動かない、例えば
Work = (Func = TestArguments(Args))
は TestArguments() の戻り値が Func と同じなら True、違うなら False が Work に入るから、それと Normal を比較することになる
※ 実際には Func は再帰呼出しとなるが引数が指定されてないのでエラーになる

706 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 21:48:41.76 ID:+JbM4Kut0.net]
>>700
なる。ありがとう。

707 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 01:44:43.12 ID:f6ffcYr70.net]
>>699
わざわざエラーとかせずに、普通にGOTOで飛ばせばいい

局所的にGOTO使っても可読性は落ちないし、むしろわかりやすいと思ってる



708 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 02:13:33.38 ID:iz7yjT+P0.net]
後藤使うのは素人

709 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 07:25:42.82 ID:EosWc+uxM.net]
>>702
Raise ならエラー情報(番号とメッセージ)を伝えられると言うメリットがあるな

710 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 09:17:43.26 ID:ISwrtggt0.net]
>>702>>704
そう、この場合のメリットは>>704の通り
そして他のエラーもまとめることができるのでシンプルになる

>>703
この場合はgotoかエラー以外ない

711 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 09:49:42.96 ID:jZ2PQbyQ0.net]
>>696
何故そう思う?

712 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:10:14.97 ID:pNJphUuoM.net]
>>706
CallByName() とかを使ってやってやれなくは無いけど無理矢理感あるしな

Strategyパターンはアルゴリズムを記述するサブルーチンへの参照をデータ構造の内部に保持する。
このパターンの実現には、関数ポインタや関数オブジェクト、デリゲートのほか、オーソドックスなオブジェクト指向言語におけるポリモーフィズムと委譲、あるいはリフレクションによる動的ダック・タイピングなどが利用される。

VBAにもまともな関数ポインタがあればね…

713 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:41:53.58 ID:jZ2PQbyQ0.net]
>>707
そもそもクラスで普通に移譲が出来るんだから
出来るとは思わないか?
もっとも、継承が使えないので
Is a関係だろうがhas a関係だろうが
移譲に頼ることになるだろうけど。

714 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 11:20:16.68 ID:NmFY0FMsM.net]
>>708
ああ、インターフェースはあるから移譲はできるか

715 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 12:29:10.84 ID:iz7yjT+P0.net]
シンプル・イズ・ベスト。
スティーブ・ジョブズの信条でもあった。

凡才は複雑を好み、天才はシンプルを好む。

716 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:04:37.97 ID:sv+QVprG0.net]
WorkSheetのEventで、
テーブルのフィルタソート機能(昇順or降順)をユーザが使ったときのEvent
ってできるんでしょうか?
最悪、"フィルタ機能を使った"時点でも取得できれば。。。

717 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:19:09.31 ID:6Z68BDtw0.net]
>>711
ない



718 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 03:12:47.26 ID:sv+QVprG0.net]
>>712
まじですか、、、ありがとうございました。

719 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 12:32:58.97 ID:EweXC9jR0.net]
すんません、膨大なデータ量の集計を任されて困ってます。
例えばA1セルに
「1.5G」とあるものは
Gを取った上で1024を3乗し、B1に表示
「256M」とあるものは
Mを取った上で1024を2乗し、B1に表示
「504K」とあるものは
Kを取った上で1024を掛け、B1に表示
みたいな便利なことができる関数があれば教えて頂きたく。
SUBSTITUTEで文字を取ったりVALUEで数字だけ抜き出したりしてみても、そこに条件判定を組み込むことが出来なくて…。

720 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:00:06.93 ID:6Z68BDtw0.net]
>>714
Excelのバージョン書いて

721 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:09:05.83 ID:tnq08GUKM.net]
>>714
あんまりスッキリした方法じゃないけど、単位ごとに処理を分けて並べるぐらいしかないのでは
式はもうちょっと整理できると思うけど、とりあえず動くやつ
=IF(RIGHT(A1,1)="G",LEFT(A1,LEN(A1)-1)*1024^3,IF(RIGHT(A1,1)="M",LEFT(A1,LEN(A1)-1)*1024^2,IF(RIGHT(A1,1)="K",LEFT(A1,LEN(A1)-1)*1024,A1)))

722 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:43:11.42 ID:EweXC9jR0.net]
>>715
Microsoft 365 MSO(16.0.13801.21004)
>>716
本当にありがとう、助かります。

723 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:54:48.79 ID:SUVzbVrJ0.net]
powerとfindで考えてたけど、あんまり変わらんかった

724 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:06:54.61 ID:54qKpcGwM.net]
>>717
365 なら
=SWITCH(RIGHT(A1, 1), "G", 1024^3, "M", 1024^2, "K", 1024) * LEFT(A1, LEN(A1) - 1)
ただし、最後が GMK でなかった時はエラーになるのでその場合はIFERROR()で回避かな

725 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:10:37.46 ID:pNi2eyZM0.net]
集計なら式使わずに素直にVBAで処理すれば?

726 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:01:21.24 ID:EweXC9jR0.net]
>>719
ありがとう、それも問題なくいけました。

727 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:16:30.86 ID:6Z68BDtw0.net]
>>721
1K未満の単位の付かない数値に対応したやつ
=LET(u,RIGHT(A1,1),p,SEARCH(u,"kmg"),IFERROR(LEFT(A1,LEN(A1)-1)*1024^p,A1))



728 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:34:49.10 ID:EweXC9jR0.net]
色々ありがとう。使わせていただきます。

729 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:00:55.15 ID:Pw9WEPs80.net]
>>723
スピードを求めるならVBAでやった方がいい。
基本、VBAよりCELLに入れた数式の方が計算早いけど、
値を設定するたび再計算が走るのでは当然遅くなる。

単位をRightの1文字切り取って使うかInStrRevで1文字切り取って使うかは自由だし、
数値部分も最後のひと文字を抜いて数値変換する方法はどうにでもなるはずだから、
後は切り取った単位で冪乗計算の乗数を変えてあげれば簡単に行けるはず。

730 名前:デフォルトの名無しさん [2022/01/28(金) 16:07:42.05 ID:eEIZm5jJ0.net]
膨大な行数になるようなら
関数よりマクロの方が断然軽い。

マクロの記録で瞬間でできるし。

731 名前:デフォルトの名無しさん [2022/01/28(金) 16:08:26.59 ID:eEIZm5jJ0.net]
記述すら必要なし。

732 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:30:28.61 ID:vX0FG/YWd.net]
マクロの記録で瞬間て、どうやるの?

733 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:31:33.84 ID:MK2zcruJ0.net]
一瞬で

734 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:35:47.36 ID:sJpZ8snBM.net]
この程度なら関数の方が速いと思うぞ
マルチスレッドで動くし
再計算も変化したセルに関連するところしかやらないから問題にはならないと思う

735 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:36:25.47 ID:u6dzd5iJd.net]
ここはVBAスレだから質問はスレチだけどみんな優しいね

736 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:49:38.97 ID:qJef3P+M0.net]
>>730
はて?

「Excel VBA 質問スレ Part74」
とあるが?

737 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:57:01.02 ID:sJpZ8snBM.net]
> ここはVBAスレだから(計算式の)質問はスレチだけどみんな優しいね



738 名前:デフォルトの名無しさん [2022/01/28(金) 18:14:34.37 ID:ZcQb+fCA0.net]
>>714
こんな奴に作業を任せるとかそもそも間違えている

739 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 18:21:53.88 ID:np+yf06a0.net]
今のエクセルの計算式は基本マルチスレッドでやるから、VBAでちまちまやるよりは早いだろうけど
このスレ的にはVBAで関数作るんが正解じゃないかと思った

で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな

740 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 18:58:00.84 ID:Qmj8/oz70.net]
>>711
どうしても「そのテーブルのフィルタソート機能を使用した」時点を起点に処理を始めなければならないとすれば、
Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
たまたまソートする前にデータが整列してしまっていた場合や処理が完了した後に再度処理が走ってしまうので、どこかにフラグを作って管理する必要もあると思うけど
あと、ソートする列に数値と文字列やブール値などが混在している場合も判定に注意が必要かと思う

741 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:12:04.41 ID:SUVzbVrJ0.net]
>>730>>732
vbaより数式や標準機能が簡単なら、そっちで回答するだけだよ
「excel&vba」なのか「eccel|vba」かは解釈次第だが、俺は後者だと思う

742 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:24:01.89 ID:qlKzmgV90.net]
7時30分から30分ずつ加算した時刻をコンボボックスに入れるやり方をおしえてください

For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(DateAdd("n", 30, "7:30"), "h:mm")
Next i

743 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:35:31.95 ID:sJpZ8snBM.net]
>>734
> で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
ドキュメントは見たことないけどVBA部分はシングルだろうと思う
マルチで走るとグローバル変数で競合したとき困るし

744 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:40:10.55 ID:GYI6WCqI0.net]
VBA専用だけどExcel全般もOK
Excel板と仲悪い理由だけは分かった。

745 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:41:52.43 ID:sJpZ8snBM.net]
>>737
Dim T As Date
T = TimeSerial(7, 30, 0)
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(T, "h:mm")
T = DateAdd("n", 30, T)
Next i

746 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:55:14.07 ID:PEhFKy76d.net]
power queryと変数定義関数で、VBA使わずともかなりのことができるようになったよね
ローコードツールみたいだなと思う

747 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 20:01:26.98 ID:XaG/+jlyM.net]
>>735
> Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
そんなことしなくてもWorkSheet.AutoFilterMode見て、WorkSheet.AutoFilter見たらいいだけ



748 名前:737 mailto:sage [2022/01/28(金) 20:13:02.61 ID:qlKzmgV90.net]
>>740
ありがとうございます

749 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 21:49:05.63 ID:Qmj8/oz70.net]
>>742
テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
(フィルタソートしてもAutoFilter.FilterModeはFalse)
もし環境で動作が異なるのならごめんなさい

750 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 22:21:03.74 ID:0dNIFpO5M.net]
>>744
> テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
ああ、そりゃすまん

> あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
手元に環境ないから試せないけど
ListObjects(...).AutoFilter.Filters(...).On
じゃねーの?

751 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 00:40:00.86 ID:d67hOlZf0.net]
図書館に「はじめてのPower Automate Desktop」ていう本があったので借りてみたんだけどよ。
VBAでは10-20行ぐらいのエクセルの処理を、40ページぐらいかけて説明してたわ。
やってることは、VBAでやるコマンドをGUI操作でやってるような感じ。
どう考えても、VBAより簡単とは思えんしむしろVBAのほうが簡単じゃねーの?

752 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 02:38:30.78 ID:wvbeuCX/d.net]
>>746
馬鹿には違いがわからんだけだろ

753 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 06:07:15.34 ID:S/AYuT160.net]
AWS など、Linux は逆。
GUIを排除して、コード化する。IaC(Infrastructure as Code)

AWSのGUIで設定したら、人によって間違うから、
どのボタンを押すなど、ソースコードで書いて、Terraform で実行する

これなら、Terraformのコードをサーバーへ転送して、実行するだけで環境構築できる

754 名前:デフォルトの名無しさん [2022/01/29(土) 06:12:15.60 ID:nI5CwbIZ0.net]
いや…VBA (VB6)を作った人は、相当優秀やな

昔、VB6 でフリーウェア作ったり、楽しかったわ…

755 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 07:43:57.70 ID:p3H2eYK50.net]
>>746
まあ、コードがわからん人(わからん人が使えるとは言ってない)向けだからな。
会社で色々ガチガチに制限されてるけど、そこだけはオッケーとかだったら使うしかないじゃない?そういう人向けだと思うよ。

Power Automateはまだサーバーが勝手に動いてくれるからマシだけど、Desktopはホント用途がわからん。

756 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 07:56:58.17 ID:u7cBLx/b0.net]
他言語のプログラマーからは下に見られるVBA
なぜ差別される?

757 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 08:31:49.58 ID:vQXkhP0VM.net]
中途半端に自分の知識を誇示して周囲を見下すやつが多いから
職場や上司を叩いて自己満足に浸るレスがこのスレでも目立つ



758 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 08:56:48.05 ID:mMYfjebB0.net]
起動しているedgeやIEで開いているページから文字を取り出したいのですがどうしたらいいでしょうか?

もしくは起動しているページからワンクリックで文字を取り出しExcelに貼り付ける様な方法はありますか?

759 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:01:58.47 ID:p3H2eYK50.net]
RPAみたいに世間の認知も高いわけじゃない、
プログラムほど難しいことやってるように見えない、
そのくせ仕事は手抜きしてるように見える、
聞いてもよく分からないことしか言わない、

知らない人からみたらこんな感じだからじゃない?

760 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:41:15.24 ID:D0pOsND50.net]
>>751
理由は色々あると思う。
名前がVisual Basic for Applications というくらいEXCELとかACCESSとかのMicrosoft Officeに特化していて
実際のシステムを構築するのには不向きであること。

間口が広いので初心者向きでもあり、それが逆にどんな人でもちょっと勉強すれば組めてしまうイメージがあること。

フレームワークの知識が皆無でも普通に組めてしまうこと。

VB.Netですら消えかかってるこの時代にあまりに旧態依然とした言語であること。

ちょろっと何かを組むには非常に良い言語なんだけどね。俺もVBAでシステム組めって言われたら「え・・・」ってなると思う。

761 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:47:43.70 ID:UwALgNeL0.net]
そもそもVB自体が下に見られているからじゃないかな
知らんけど

762 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:54:07.85 ID:OyQV2dPc0.net]
>751
覚える事が信じられないぐらい少なく、誰でも使えるから
変数とif、for辺り知ってればほとんどの場合に対応できる
若干とっつきにくいのがset程度
更に相当テキトーに書いても他へ影響し辛い

どれも実務上は長所だけど、
他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい

763 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 10:17:37.26 ID:M8ea68f50.net]
>>745
自分の環境だと、普通のフィルタをかけた状態ならそれで拾えるけど、フィルタのソートを行った状態は拾えないので、やりたくないけどどうしてもやるなら列のデータをなめるしかないのかなと

>>751
元々、Visual Basic自体がBASICという、学校でプログラミングの導入として教えるような簡易なプログラミング言語から派生したものだから、他の言語より低く見られていた
更にそこから派生したVBA(マクロ)やVBS(スクリプト)なんかはより低く見られている
まぁ実際に、図体の重たいプログラムでは手が届きにくい部分を補完する孫の手的な使い方をするのが主流なので、穴埋めや間に合わせ的な位置付けに見られているからだと思う

764 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:04:25.26 ID:1pI7yMTXM.net]
>>758
ソートは一時的な状態じゃないから完全に拾えるわけじゃないけど
ListObjects(...).AutoFilter.Filters(...).Sort
見たらわかるんじゃないの?

765 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:05:21.11 ID:bDLL2+/00.net]
>>751
差別しているのは Ruby厨だから無視していいんじゃね
そもそも言語に上下なんかないし

766 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:13:37.04 ID:M50L9SrL0.net]
>>757
> 他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい

なんとなく納得できる表現だな。
C・C++・C#・JAVA・Rustとかの、かちっとしたのが当然だと思ってると面食らう。

特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。

767 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:15:31.30 ID:M50L9SrL0.net]
あ。馬鹿にしてるわけではないよ。便利だと思う。

ただ、コンストラクタ引数と継承は入れてほしかった。



768 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:28:56.70 ID:tQGwfe1Lr.net]
VBAが言語として下に見られてるのかは知らんが書いてるやつの水準は他言語より圧倒的に下だよ
変数の型指定しない、withつかわない、まとめられる処理をまとめずにコピペし大量のモジュールを作る、配列とか使わないでセルを一回一回読み書き
こんなコードが会社のエクセルにはたくさんある
そしてそれが神マクロと崇め奉られてるのホントゴミ

769 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:44:30.01 ID:PUyOyrFtM.net]
>>761
> 特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。
void * とか昔からあるけど?

770 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:02:30.08 ID:ZRWUeJUN0.net]
結果がすべて
仕事を終わらせたやつが評価されるんであって、どんな方法を使ったか、きれいに書いたかどうかなんて普通は問われない

771 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:10:51.21 ID:L/C5gyxS0.net]
>>765
俺もそっちだわ
仕様として許容されているなら使う人が目的達成できればどうでもいいんよ
まぁリファクタリングしろと言われたら発狂するが

772 名前:デフォルトの名無しさん [2022/01/29(土) 12:12:26.42 ID:nI5CwbIZ0.net]
何かを見下したい、マウントを取りたいのは、
愚か者の本能であって、理由は後付け。

VBA がハイコストパフォーマンスで
ある程度のシステムを構築できてしまう
便利なツールであることには変わりない。

頭の悪い人間ほど、意味のない格付けをしたがる。

773 名前:デフォルトの名無しさん [2022/01/29(土) 12:22:38.03 ID:nI5CwbIZ0.net]
Windows環境で、
なんらかの要件を実現する方法の選定として
導入コストを考えたら、DOSバッチでも
PowerShellでも、JavaScriptでも、WSHでも
既存のリソースのみで実現できる方が良いに決まってる。

特に日本人の思考は、合理性を軽視して、見てくれや
くだらない感情で判断することが多いので、
開発のプロジェクトでも時間とカネのコスト管理ができてない
愚かな企業が多い。

774 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:23:55.26 ID:hiZAoffAM.net]
>>765
そういう書き捨ての仕事もあるし、連綿と続く仕事もある

775 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:27:08.84 ID:nI5CwbIZ0.net]
結果として、他国からバカにされてる
日本の生産性の低さに繋がっている

あらゆる分野で、開発スピードは、
圧倒的に米欧・中華が優っている

776 名前:デフォルトの名無しさん [2022/01/29(土) 12:29:20.03 ID:iTemfgLK0.net]
>>768
例の馬鹿か

777 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:34:16.18 ID:Q0NPbY74r.net]
>>765
書き捨てではなく日々の定型業務につかわれ
それらが前提になって業務フローが組まれてるから
保守が必要なんだよなあ…
なお制作者と仕様書、コメントはない



778 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:43:35.90 ID:28WRDRfRr.net]
まあ正直、要件定義〜設計までの上流工程の人間からすると
言語は何でも良いんだけどね。

こだわるのはコーディングフェーズ以下の下流エンジニアであって。

779 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 14:49:20.34 ID:u7cBLx/b0.net]
関数が得意な人はなんでも関数で片付ける、マクロが得意な人はなんでもマクロでやろうとする傾向があると田中氏が言っていたな講演会で。
バランス良く使える人こそ真のエキスパートだとも。

780 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:14:16.94 ID:YNpwCmNLM.net]
>>774
そうなんか
確かに関数使うのって電卓がわりにするか文字の置き換えくらいかも

781 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:41:11.14 ID:D/yb4xS+0.net]
指定した範囲にそれぞれ外枠線を引きたいのですが、量が多くなると時間がかかるのでUnionを使いたいのですが、

Dim rng As Range, i As Long

Set rng = Range("B2:B3")
Set rng = Union(rng, Range("C2:C3"))

For i = 4 To 50 Step 2
Set rng = Union(rng, Range("B" & i & ":B" & i + 1))
Set rng = Union(rng, Range("C" & i & ":C" & i + 1))
Next i

rng.BorderAround Weight:=xl

782 名前:Thin

だと、Range("B2:C51").BorderAround Weight:=xlThin と同じになってしまいます。
短い時間で、それぞれの範囲に外枠線を引く方法を教えてください
[]
[ここ壊れてます]

783 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:45:53.96 ID:W/oxWoyf0.net]
>>753
https://www.google.co.jp/search?q=vba+%E3%82%BD%E3%83%BC%E3%82%B9%E5%8F%96%E5%BE%97

784 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:52:44.84 ID:MAc7BERw0.net]
>>761
JavaでもObjectになんでも突っ込めるじゃん

785 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:14:17.19 ID:u7cBLx/b0.net]
マクロ書くより手作業でやった方が早いのにわざわざマクロでやる人ばかりとも言っていたな。
なるほどなと納得する講演会だったね。

786 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:34:34.13 ID:L/C5gyxS0.net]
今知ったんだけどFalseってフォルスって読むんだな
考えてみれば失敗じゃなくて偽りだもんな
本職じゃなくて良かったわ〜

787 名前:デフォルトの名無しさん [2022/01/29(土) 16:35:06.88 ID:RDGmPxZCr.net]
なんで Cells を使わず、わざわざ
Range を使うのが多数派なんだろ。
メリットないじゃん。意味わからん。



788 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:40:41.52 ID:D0pOsND50.net]
>>774
田中さんそんなこと言ってたのか
俺ならバランスより効率重視だな
数式にマクロの関数仕込むこともあるし
その逆もある。

789 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:41:42.31 ID:fC9nxr54M.net]
だってマクロ書きたいんだもん

790 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:49:23.58 ID:wL4gsmFrd.net]
>>781
a1とかa1:f5とかを暗黙定義された名前と考えて
名前で指定するイメージ

791 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:04:38.36 ID:fQ9LbNHBM.net]
>>780
失敗は Fail だもんな

792 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:04:52.88 ID:L/C5gyxS0.net]
俺はcellsだよ、座標として捉えてるから数値との親和性が高く感じる

793 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:06:06.65 ID:L/C5gyxS0.net]
>>785
そやねん、フェイルセーフっていうからその延長で思い込んでしまってたみたい

794 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:06:09.58 ID:fQ9LbNHBM.net]
>>781
極端な例だけど Cells(100, 100) がどのセルを指してるのかすぐにわかるなら…

795 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:09:18.89 ID:L/C5gyxS0.net]
>>788
なるほど
でもSAの倍の座標がどこかが解りづらいんじゃない?

796 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:16:34.10 ID:OyQV2dPc0.net]
日本はA1形式なのでどっちにしても分かりづらい
歴史的経緯で今更どうしようもないとは言え、残念すぎる

797 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:29:33.23 ID:36YHaPQ9M.net]
>>789
倍の座標とかの計算結果で指定するならそりゃCells()で指定するよ
Dim c As Range
Set c = Range("SA100")
としてCells(2 * c.Row, 2 * c.Column)
>>781は例えば最初のセルの指定とかでアドレスが分かってる場合でしょ



798 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:59:18.61 ID:u7cBLx/b0.net]
>>782
うん。自分の耳が腐っていなければ確かにそれを強調していたように聞こえたよ。。
とにかく後任者の事を第一に考えようと。
あと、速度改善するマクロを書いても後任者が理解できなければそのマクロは結果遅いマクロとも。
一理あるなと思った。
かなり前の話だからうろ覚えごめんなさい。

799 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:07:28.04 ID:oYmiRtJxM.net]
何が正解かはケースバイケースだしね
LETとかLAMBDAのサポートで正解変わったりするし

800 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:58:08.38 ID:D0pOsND50.net]
CellsとRangeなんて一長一短なんだから
状況に合わせて使い易い方、分かり易い方を使えばいい。
どうせ両方とも型はRangeだ。

801 名前:デフォルトの名無しさん [2022/01/29(土) 19:05:46.63 ID:XZlmQtKVr.net]
例えば、数万行の処理をループで回す場合とか
Range と Cells とでは、処理速度が全然違うのよ。

実際にやってみればわかる。

802 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:07:36.86 ID:u7cBLx/b0.net]
Range(A & i)みたいなコードをたまに見るけど、あまり良い書き方ではないと聞きましたよ

803 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:10:29.95 ID:D0pOsND50.net]
>>796
そりゃ普通そんな書き方しないもの。
最初の位置から移動させて使う場合は
RangeならOffset使うでしょ。

804 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:13:25.82 ID:u7cBLx/b0.net]
いわゆる「マクロ入門書」とかにもそのような変な書き方がある。
教える側の立場にある人がそんな書き方してるのはちょっと

805 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:49:18.54 ID:lAJromTAM.net]
>>797
Offset(), Resize() はセル結合を「考慮してくれる」からイマイチ使い辛い

806 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:57:24.50 ID:W/oxWoyf0.net]
可読性と処理速度要件で変えるだけ

807 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:51:43.39 ID:OyQV2dPc0.net]
>>795
100万ループさせてやっと数秒か
この程度の差なら速度は誤差では?
速度抜きにしてもrange("a1")って書き方はせんけど

Sub foo()
GetLocalTimeTest
For i = 1 To 1000000
'5秒
'bar = Range(Cells(1, 1), Cells(1, 1))
'2.8秒
'bar = Cells(1, 1)
'6.7秒
'bar = Range("a1")
Next
GetLocalTimeTest
End Sub



808 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:55:44.71 ID:2z3KoE650.net]
setは?

809 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 21:16:18.07 ID:u7cBLx/b0.net]
ねーこれかなり凄くない?
https://rkb.jp/article/61225/
実務を経験していない女子高生がExcel世界一だって。

810 名前:デフォルトの名無しさん [2022/01/29(土) 21:18:02.94 ID:j5q7lOJ70.net]
>>790
いろは順が良かったってか?

811 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 21:19:19.33 ID:zfCLVkWb0.net]
学生大会ね

812 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 21:24:22.79 ID:1BTFtAsTM.net]
>>803
素直にすごいと思う
まあExcelに対する知識もさることながらプレゼン力やセンスも問われるから俺には全然無理

813 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:21:59.94 ID:tNIxMt6Qd.net]
>>803
マスゴミの手に掛かればExcelそっちのけで好きな食べ物は?とか好きな男性のタイプは?とかどうでも良い情報ばかり取り上げられるだけ
紹介動画でExcel触ってんの1分も無いじゃん

814 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:38:28.21 ID:FzjWUvLmd.net]
>>781
マクロの記録で自動生成されるとRangeが使われるからじゃない
自分もCells派だけどいろんなツールで使ってる共通的な関数群はRangeの方が作りやすいからRangeも使ってる

815 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:41:28.05 ID:ZRWUeJUN0.net]
ループ回すにはCellsのが書きやすい

816 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:44:29.32 ID:yRT1rOmgM.net]
>>808
> いろんなツールで使ってる共通的な関数群はRangeの方が作りやすいからRangeも使ってる
???
どっちを使っても型はRangeだよ…

817 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 23:35:26.26 ID:FzjWUvLmd.net]
書き方が良くなかったね
自分が作ってる関数だと引数の使い方がRangeの方が汎用性が高い



818 名前:デフォルトの名無しさん [2022/01/29(土) 23:51:38.36 ID:j5q7lOJ70.net]
引数は文字列と言うことかな?

819 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 01:33:47.10 ID:RkuzR5nc0.net]
作成依頼もOKということで書き込みさせていたただきます。
現在開いているシートの名前で、特定の場所にCSV(コンマ区切り)の形式で保存したいです。
また、エクセルを開きっぱなしで別のプログラムにCSVを読み込ませ、その後データを書き換えてCSVを上書き出力、読み込ませ、データを書き換え…、の繰り返しをしたいのですが、エクセルを開いていると別のプログラムで読み込んだ時にエラーが出てしまうため、別のブックとして保存して閉じることができると嬉しいです。
VBAについての知識がほとんどないため、こういった情報で作成依頼していいものなのかわかりませんが、よろしくお願いします。

820 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 02:59:23.74 ID:MQJLXGaO0.net]
>>813
Sub save_sheet_as_csv()
  Dim this As Worksheet: Set this = ActiveSheet
  Dim sheet_name As String: sheet_name = this.Name 'ワークシート名取得
  Dim save_folder As String: save_folder = "c:\tmp\" '保存先フォルダ指定
  Dim save_fullpath As String: save_fullpath = save_folder & sheet_name & ".csv"

  this.SaveAs Filename:=save_fullpath, FileFormat:=xlCSV 'CSVで保存
End Sub

821 名前:デフォルトの名無しさん [2022/01/30(日) 03:34:13.23 ID:RkuzR5nc0.net]
>>814
ありがとうございます、試してみたところ、出力したCSVを別のプログラムで読み込もうとしたときに「別のプロセスで使用中のため開けません」とのエラーが出てしまいました。
私の使い方が悪いのかもしれませんが、アドバイスいただけるとありがたいです。

822 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 03:54:54.88 ID:MQJLXGaO0.net]
>>815
ブックを閉じるには、これを最後に入れる
Workbook.Close

823 名前:デフォルトの名無しさん [2022/01/30(日) 04:02:16.39 ID:RkuzR5nc0.net]
>>816
ありがとうございます、うまくできませんでした…。
ネットで拾ったものですが、これがやりたいことに近いかなと思うんですが、保存先の指定はどうすればいいでしょうか。

Application.DisplayAlerts = False 'Excelの警告を一時無視

ActiveSheet.Copy '新しいブックへコピー

ActiveWorkbook.SaveAs Filename:="book1.csv", FileFormat:=xlCSV, Local:=True 'CSVで保存。ファイル名は「book1.csv」。

Workbooks("book1.csv").Close 'book1.csvを閉じる

Application.DisplayAlerts = True

824 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 04:58:34.47 ID:MQJLXGaO0.net]
>>817
じゃあこっちを使ってみて
CSVで保存の次に以下の1行を追加
Application.Quit

いきなりExcelが終了するので、直したら保存を忘れずに

825 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 07:43:58.44 ID:q4Ohgw6D0.net]
>>759
うちの環境だと、FilterオブジェクトにSortはないね
その代わり、ListObject.AutoFilter.Sort.SortFields.Countで検出できそうなのは見つけた
もしかしてこのへんバージョン毎に違ったりするのだろうか?

826 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 09:05:00.91 ID:4Di3AbRzM.net]
>>819
すまん今見たらそっちが正しいわ
なんか勘違いしてた

827 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 09:32:32.30 ID:XZOTMr4+0.net]
>>807
確かにw
取材側の都合の良いように組まれているね。
言われてみればグラフの装飾だけでExcelを操作していないわ。



828 名前:デフォルトの名無しさん [2022/01/30(日) 09:32:37.50 ID:RkuzR5nc0.net]
>>818
私の伝え方が悪かったです。
Excel自体は終了せずに、現在使用しているブックとは別のブックとしてcsvを出力して、そちらを閉じたいのです。

829 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 09:54:20.39 ID:XZOTMr4+0.net]
そもそも学生大会があるってのは知らなかった
騒がしてごめんなさい😢⤵⤵

830 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 11:04:58.48 ID:q4Ohgw6D0.net]
>>820
いやいや、むしろ知らない方法を見つけられたのでありがたかったです

831 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 12:45:39.26 ID:mFQLQi3M0.net]
VBAももう終わりそうだな
MSはWEB版にしたいみたいだし

832 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 12:58:15.03 ID:+kmkPMy10.net]
不滅です

833 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 13:00:10.17 ID:gD+f1kBW0.net]
終わる要素一切なくて草

834 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 13:13:55.29 ID:wiJ8ix3a0.net]
MSがGoogleに頭下げてGASで統一しましょうみたいな交渉を持ち掛けない限りはないだろ

835 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 13:18:12.09 ID:XZOTMr4+0.net]
確か4.0マクロ廃止とパワークエリはマクロ作業を減らすためにMSが作ったんじゃないのかい?

836 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 18:00:19.55 ID:k8uzKlEP0.net]
>>825
気が早いな
まだ学校や企業のライセンスでしか
Web版Excelのjavascriptでの開発は出来ないと言うのに

837 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 18:51:59.67 ID:gD+f1kBW0.net]
パワーピボットは本当にスゴイ
なんでもっと早く実装しなかったんだ・・・



838 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 19:06:51.96 ID:DR73eQYX0.net]
ようつべにこんなのあった。

Excelオンラインで最新Excel関数を練習したいという方も必見です!どこまでできるか試してみた!
https://youtu.be/saC7BegnViI

Power Queryは使えないけど
テーブル、スライサー、ピボットテーブルは使える模様。

ただ、スマホの小さな狭い画面だとムリだろな・・・

839 名前:デフォルトの名無しさん [2022/01/30(日) 19:55:45.81 ID:gNdtnnB7r.net]
なんで、Access使わないの?
SQL 使えないと不便じゃん。

840 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 19:57:56.80 ID:PMeev6woM.net]
powerqueryで十分だから
excelだけで完結する

841 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:17:09.09 ID:XZOTMr4+0.net]
Excelオンラインって一部の上級者が食いつき始めていると聞きましたわ

842 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 21:04:21.08 ID:k8uzKlEP0.net]
>>833
何故にEXCELでSQLが使えないと思ったのかは聞かないけど
まだSQL初心者でクエリ画面開いてチマチマとテーブル繋いで設定していく
あのACCESSのが使えないかと言われればそれはそう。

でも複雑なSQLを組むようになると結局手で書いた方が早くなるからアレもあまり必要性を感じないけどね。

結局、ADOさえ理解していればACCESSだろうがORACLEだろうがSQLSERVERだろうがその気になれば
EXCELのシートだろうがCSVファイルだろうがEXCEL上からSQLを実施することが出来る。

ただ、本来DBの用途からかけ離れるほど使用に制限を受けるよ。
例えばEXCELのシートやCSVファイルはDELETE文が使えなかったりとか。

843 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 21:18:16.55 ID:k8uzKlEP0.net]
>>835
さっきもちょっと書いたけど
まだ商用か教育機関用のライセンスじゃないと
Javascriptで開発すること出来ないんだよね。

だからJavascriptやってない人は
まだ猶予期間がある内に
Javascript触って慣れておくといいよ。
特にスカラー変数とかまるで
全ての変数はVariant型で扱うかの
ようになったり、
Jqueryとかが出てくると
メソッドを変数に入れたり
チェーンメソッドみたいなのも出て来たり

その前にHTMLやCSSも勉強しなきゃだけど。

844 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 21:24:55.59 ID:gD+f1kBW0.net]
ちゃんとしたデータが揃ってるって前提なら、DELETEなんて使う事はそんなになくないか?

>>837
エクセルでjQuery使えるの?

845 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 21:36:30.54 ID:k8uzKlEP0.net]
>>838
DELETE使う必要があるかと聞かれれば、
まぁ有った方が便利かも知れないね、という程度。
何せEXCELのシートで条件に合った行が一発で消せるのであればまぁ便利だろう。ただ、
VBAでそういうロジック組めば代用出来ない訳じゃない。

Jqueryが使えるかどうかは俺もまだ
Web版EXCELの開発環境触ったことないから分からんけど、
どっちにしてもJavascriptをやるならついでに覚えて置いた方がいい。とっても便利。

846 名前:デフォルトの名無しさん [2022/01/30(日) 22:15:29.30 ID:sjTHXMe20.net]
ID:k8uzKlEP0

またいつもの馬鹿が嘘ばっか書いてる

847 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 23:07:47.49 ID:k8uzKlEP0.net]
例えばだけど
VBAを生業としているとその内DBとのやり取りを行うようになってSQLは必須になることは理解している人はここにも沢山いると思う。

同様にWeb系を行うならHTMLやCSS、Javascriptの知識が必須になるんだよ。
もしEXCELがWeb主体で扱われるようになるのであればその知識が必要ってだけ。

まぁ確かにスレ違いではあるから
ぼちぼちおいとまするよ。



848 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 23:34:30.41 ID:fPY/YlGjd.net]
Excelでやるには面倒なことでほかの言語知っててそっちの方が簡単ならわざわざExcelなんて使わないでしょう
開発者ならそれぐらいわかりそうなもんだと思うけどわざわざ関係ないことを持ち出してくる必要ないのにね

849 名前:デフォルトの名無しさん [2022/01/30(日) 23:58:36.03 ID:sjTHXMe20.net]
>>841
嘘ばっかと指摘されてもしつこく書く馬鹿

850 名前:デフォルトの名無しさん [2022/01/31(月) 02:05:16.34 ID:YxHLvxrCM.net]
ruby馬鹿だろ

851 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 04:36:16.27 ID:ByM6Elur0.net]
>>822
Sub save_sheet_as_csv()
  save_folder = "c:\tmp\" '保存先フォルダ指定
  file_name = ActiveSheet.Name & ".csv" 'シート名をファイル名に
  ActiveSheet.Copy '現在のシートを新規ブックへコピー
  Application.DisplayAlerts = False '警告を無視して上書き保存できるようにする
  ActiveWorkbook.SaveAs Filename:=save_folder & file_name, FileFormat:=xlCSV 'CSVで保存
  Workbooks(file_name).Close '新規ブックを閉じる
End Sub

852 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 08:22:57.51 ID:q62M0ujX0.net]
何が嘘で本当はどうなのかを書けば一発なのに

853 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 09:22:06.68 ID:KIxAb0730.net]
いやさすがにウソは書き込みしないでいただきたい。
このスレは真面目に勉強したい人もいますので。。
ウソを本当のように書かれると信じちゃうじゃん。

854 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 09:28:32.59 ID:xKkvHIL7d.net]
JSとか関係ない話を持ち出してる人のレスが問題なだけでVBAの回答だけなら嘘はないんじゃないの
それと書かれてる内容で勉強したいなら実際に動かしてみるべきだと思うよ

855 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 09:38:43.11 ID:9sC6tTKap.net]
JSはWebのエクセルの話から派生したみたいだからあながち完全にスレチという訳でもなさそうだな
一応俺も少しJS齧ってはいるけど嘘を書いているようには見えないなぁ
どの辺が嘘なんだろ?

856 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:13:50.76 ID:zlqGzvHc0.net]
>>849
嘘ではなかった、アドイン入れたらJS使えたわ
ただ、ぱっと触った所vbaでいいとしか思わんかった。慣れてる方が楽でいい
jQueryも使えると思うけど、使う理由はないと思う。あれセレクタ便利になるけど、エクセルjsでは使わないような

ただwebエクセルでの使い方がわからんかったけど、多分一生使わないからもういいや

857 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:25:32.89 ID:xKkvHIL7d.net]
自分は嘘と言ってるつもりはないけど話が散らかりすぎてしかもどうでもいいことをダラダラ書きすぎと思ってるけどね
知ってることをいろいろ言いたいのかもしれないけどスレチだってことをわきまえてほしい



858 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:46:32.75 ID:e1XVzmlT0.net]
Web版Excelのマクロ機能(JSスクリプト)は家庭向け製品では使えない
いまのところ法人向け製品だけの機能

859 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:58:28.57 ID:zlqGzvHc0.net]
>>852
ああそういうことね、ありがとう

860 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:28:12.04 ID:KIxAb0730.net]
まあ、ウソホントの話は置いといてマッタリ平和にやりましょうよ

861 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:34:07.47 ID:/myUa4Xt0.net]
争いが嘘か、平和が嘘か

862 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:47:21.32 ID:PJdTm1ZT0.net]
JavaScriptと書いてくれ、途中まで理解が噛み合わなかったわ笑

863 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:58:13.56 ID:9LYQT6bkM.net]
JScriptでExcel.Applicationを扱うのは難しい!

864 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:58:47.12 ID:e1XVzmlT0.net]
細かいこと言えば実際はJavaScriptというよりTypeScriptだけど
https://docs.microsoft.com/ja-jp/office/dev/scripts/develop/scripting-fundamentals

865 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 13:07:08.11 ID:xK8RZLXxa.net]
>>855
銀河万丈の声で脳内再生されて草

866 名前:デフォルトの名無しさん [2022/02/01(火) 04:12:47.67 ID:BAkheZAsM.net]
>>845
ありがとうございます。

867 名前:デフォルトの名無しさん [2022/02/01(火) 18:51:32.45 ID:BTrEast20.net]
VBA 何もかもみな懐かしい。。



868 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 20:43:06.80 ID:m1Otvt2w0.net]
GoogleのI'm Feeling Luckyボタンを押すために

objIE.document.GetElementsByClassName("〜")(0).click

って書いてちゃんとclassnameの名前を入れているのに実行してみたら
438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。
って表示されて実行されません
idだったらちゃんと動作するのですがclassnameだと実行されません
目的はclassnameでのボタンの押し方を知る事なのでどうしてらいいのか教えてください

869 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 21:42:08.98 ID:JauLxykcr.net]
独立したIf式が100個あるとして、どのIf式が処理をしたか最後にmsgboxで表示したいのですが、そういうことってできますか

870 名前:デフォルトの名無しさん [2022/02/01(火) 21:53:36.89 ID:NaaBd1FpM.net]
できる
はい、次

871 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 21:53:41.40 ID:UmaqdsBP0.net]
各ifの処理の中でmsgboxに表示する番号なり何なりを変数に代入すればいいんじゃね

872 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:48:27.08 ID:JauLxykcr.net]
>>865
If A1<>"" 〜
End if

現状上の式がただただ書かれているんだけなんですがどうしたらいいですか

873 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:53:02.19 ID:mToNlmlwd.net]
マクロでマクロを書く

はい次

874 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 00:04:57.15 ID:XK9gt2og0.net]
それはif文を理解していないという解釈でいいのか

875 名前:デフォルトの名無しさん [2022/02/02(水) 00:11:32.60 ID:WPZgN1IY0.net]
>>866
>>2を読め

876 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 00:23:00.41 ID:DCaD8SVN0.net]
>>862
Document.getElementsByClassName()
https://developer.mozilla.org/ja/docs/Web/API/Document/getElementsByClassName

JavaScript なら、上のリンク先を見れば良いけど、
VBA では、書き方が異なるのかも

877 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 07:28:52.11 ID:4nB6ciIN0.net]
>>870
ここからボタンを押すにはなんと書けばいいのでしょうか、、、?



878 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 07:31:23.63 ID:f98ebtked.net]
この手の質問は悪用される可能性があるから回答するの躊躇するよね

879 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 07:47:54.37 ID:DCaD8SVN0.net]
Ruby で、Selenium WebDriver なら、
driver.要素.click だけど、VBA は知らない

検索してみれば?

880 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 07:49:20.30 ID:Sif5VXmLd.net]
>>871
学習目的なら他のサイトにしたら

881 名前:デフォルトの名無しさん [2022/02/02(水) 10:07:41.90 ID:wojfg/N6r.net]
こんなところにアホな質問するヤツらは

ググる能力さえ無いということなのか?

882 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:13:58.55 ID:QFn3Myrbd.net]
ググったりして、その上で質問してると信じたい
スクレイピングとかブラウザの自動処理の質問だけど後者は悪用されるリスクが高いから答えたくないよね

883 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:17:43.23 ID:wojfg/N6r.net]
違うよ
処理完了MsgBox を表示させるなんて
素人でもググって1分で作れるだろ

884 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:38:37.34 ID:Ro/5oidY0.net]
>>875
最初は聞きまくった方が上達する
vbaはコードはアホみたいに簡単だけど、変なとこで敷居高いからな

885 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:54:30.15 ID:34qMGLm0a.net]
>>878
なら答えてやれよw

886 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:16:51.15 ID:QFn3Myrbd.net]
どんな言語もそうだけど敷居なんて高いと思ったことないよ
そもそもできないこともわからずにあれこれやろうとしてる人がそう思うだけでは

887 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:26:36.37 ID:h1+1MA/aM.net]
Excelを操作するための言語で
なぜブラウザを操作しているのか?
もっと良い方法があったのではないか?
手を動かす前にほんの少しは考えたほうが良かったのではないか?



888 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:27:02.36 ID:43zIf/SN0.net]
答えたい人は答えて答えたくない人はスルーしておけば良いと思う
答えないのに偉そうにしてる人は解らないのに偉そうにしている人と同じだし

889 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:38:30.87 ID:PFGno9cc0.net]
>>877
>>863の質問から、
「処理完了MsgBox を表示させる」ことが質問の本質だと思うわけね

890 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:58:44.52 ID:h1+1MA/aM.net]
お題は100個のif文を書き換えずにどれが処理されたかを当てるクイズね

891 名前:デフォルトの名無しさん [2022/02/02(水) 13:00:17.51 ID:mSZ4QSD40.net]
各、End If の前に、IF 番号を変数として代入する
一行を記述する。

892 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:31:44.29 ID:QFn3Myrbd.net]
100個のif文はどういう出し方したいかにもよるけど抜ける考慮はさておき
dim msgno as long
if 条件1 then
 msgno=1
end if
if 条件2 then
 msgno=2
end if
call MsgBox(msgno)
ってやるだけでしょ
そうではなくどのif文が動いたかであれば適当に動いた個所がわかる変数を用意して同じように表示すればいいだけかと

>>882
リスクあるから答えないってのも立派な回答だと思うけどね
それを偉そうと思うのならそう思ってもらって結構だけど

893 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:31:48.33 ID:Ro/5oidY0.net]
>>863
フラグを外に出したほうが良いか考えたけど、もういいかなって
ってか本当にやりたいことはステップインって機能では

Sub foo()

bar = ""
If A1 <> "" Then
bar = bar & "If A1 <> """" Then"
bar = bar & vbCrLf
End If

If b1 <> "" Then
bar = bar & "If b1 <> """" Then"
bar = bar & vbCrLf
End If

MsgBox bar
End Sub

>>879
たまってたのね

894 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:41:28.48 ID:h1+1MA/aM.net]
それじゃあ >>868 の言うように
私の子がバカみたいじゃないですか!

895 名前:デフォルトの名無しさん [2022/02/02(水) 13:42:27.00 ID:mSZ4QSD40.net]
IF 式自体を、MsgBox に表示したいのなら
100個の式の一覧をつくって、

Const にして100個記述すればよいかと。
そっちのほうが早い。

896 名前:デフォルトの名無しさん [2022/02/02(水) 14:24:28.77 ID:mSZ4QSD40.net]
Const IF001 = "If A1 <> """" Then"
Const IF002 = "If B1 <> """" Then"
・・・
・・・(100個記述)

Sub Test()

 If A1 <> "" Then  〜
   RSLT = IF001
 End If

 If B1 <> "" Then  〜
   RSLT = IF002
 End If

・・・・・

 MsgBox RSLT
End Sub

こんな感じかな。
スマホだと書きづらいわ…

897 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 14:25:53.07 ID:Ro/5oidY0.net]
VBAってevalなかったっけ
あれをフラグに入れれば完結になるんだけどな



898 名前:デフォルトの名無しさん [2022/02/02(水) 14:31:06.05 ID:mSZ4QSD40.net]
IF文を全部、シートにコピペ→ソートしてやれば
Const を100個書くのは、3分でできるかな。

899 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 14:32:20.83 ID:h1+1MA/aM.net]
もっとメンタリストみたいにスマートに当てる方法はないのですか?
あなた達のスキルにはがっかりデス

900 名前:デフォルトの名無しさん [2022/02/02(水) 14:36:33.27 ID:mSZ4QSD40.net]
プロシージャの中身も全部、シートにコピペして
変数の一行を100個挿入してやれば
10分かからないね。

901 名前:デフォルトの名無しさん [2022/02/02(水) 14:38:34.78 ID:wojfg/N6r.net]
くれくれ乞食がうぜえな

お前が書けよ

902 名前:デフォルトの名無しさん [2022/02/02(水) 14:59:23.76 ID:wojfg/N6r.net]
そもそも、IF文100コってなんだよw
無能が書いたのか?

903 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 19:16:31.19 ID:4nB6ciIN0.net]
vbaでieの操作に成功しました
そして目的の通知バーを出してキー操作をさせるためにsendkeyを入力しているのですがExcelの方がキー操作されてしまいます
これは待ち時間がないからですか?

904 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 19:27:47.16 ID:SglXGK6G0.net]
そう思うならタイマとか入れてどうなったか書けよ

905 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 19:32:10.25 ID:4mbUlsYd0.net]
みんなは過去に作った関数ライブラリって、標準モジュールで
管理(インポートorエクスポート)しているかんじ?
クラスモジュールで管理したらだめ?

906 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 19:42:36.70 ID:7tA3nICW0.net]
>>897
もしライブラリの追加が可能な環境ならSeleniumbasic使った方が簡単で確実に動作するぞ

907 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 20:08:51.32 ID:gm4r/aDEa.net]
>>897
そりゃ、IEに送らないとだめだわなw



908 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 20:31:24.68 ID:lYAq0wM7r.net]
>>887
ありがとうございます。
まさに理想通りのやつです。助かりました

909 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 21:08:49.40 ID:4bGMKLpw0.net]
>>899
やり方は色々あると思うけどその方法なら
用途によって標準モジュールでもクラスモジュールでも使い分けで管理すればいいと思う。

別の方法としてはツールとしてスケルトンのブックを作っておいて
その中に色んなモジュールを入れておいてコピーして必要なもの以外は削除して使う方法、
アドインブックを作っておいて参照を切って使う方法とかもある。

910 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 21:12:04.30 ID:sT0aKZOxd.net]
めんどくさいから win+vでピン留めしてるわ

911 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 21:53:01.49 ID:Ro/5oidY0.net]
>>899
googleスプレッドシートに書いておいて、そこからコピペ
vbaの場合、関数というよりも、
高速化や最終行の取得など、関数よりも細かい部分で欲しいものが多い

912 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 00:25:24.67 ID:qiNMcHyb0.net]
>>903-905
なるほど。結構、人によってやり方が違うもんなんだな。
勉強になります!

913 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 00:38:31.96 ID:tbES4bxer.net]
そんなん、メモ帳でよくね?

914 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 00:41:32.16 ID:tkF05tCjd.net]
いつもの奴だぞ

915 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 03:56:49.74 ID:32hviewX0.net]
>>897
VBAならスクレイピングを組むのに視覚的に動作確認できるけど、

慣れてきたらぜひpythonでchrome環境で同じような処理を再現してほしい

事務職の現場でもieだと対応してないサイトとかあったりしてクローリングはchromeの方が重宝されるんだ

916 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 09:21:08.30 ID:hHsifBpa0.net]
メモ帳で思い出したが、秀丸エディタってどうなの??
知人が秀丸使え使えってうるさいから

917 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 09:30:09.86 ID:Nd7AcXHS0.net]
>>910
VSCodeが一般化した昨今ではオワコン化が進んでる気がする。
未だにテキストエディタとしては使ってるけど、コードエディタとしてはちょっと厳しいのではないかと思ってる。



918 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 10:19:29.46 ID:Z7zOJE1W0.net]
>>910
閉じてもそのまま再開できる+タブ表示+シンタックスハイライト(文字色)が出来るものなら何でも良いと思う
メモ帳に比べたら秀丸は普通に便利
俺はsublimetext、atom、eclipce使ってるけど、全部オワコン臭が凄い

VScodeはプラグイン多くて使いやすいと思う

919 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 12:04:33.95 ID:hHsifBpa0.net]
うーん。とりあえずメモ帳でいっかな。
なるべく無料のアプリ使いたいし。
ケチが一番!

920 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 12:06:23.06 ID:pSX7/s4D0.net]
サクラエディタ使いやすいね

921 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 12:11:30.24 ID:c9OHCnJld.net]
Notepad++だな
タブでもやれるけど左枠に文書一覧表示が自分には合ってた
縦タブやお気に入り機能のようにファイルを扱える

922 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 12:31:17.48 ID:hHsifBpa0.net]
若い連中にはOneNoteが流行りなのかなと

923 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 13:12:28.58 ID:akJYuSUB0.net]
>>913
VCcodeはタダだよ
メモ帳は多分一番難易度高いんじゃないかと思う 焦

924 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 13:49:08.79 ID:Z7zOJE1W0.net]
>>917
VScodeな

>>915
実は俺も使ってる。そんな便利な機能あったんだ!
https://i.imgur.com/AGCZICl.png

メモ代わりに使ってるワイ、無事死亡

925 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 13:54:30.19 ID:advF3NKUM.net]
VSCode入れていいような環境でわざわざVBAなんか使う必要なくね?自由が利くなら他にいくらでも選択肢あるじゃん
拡張機能で得体の知れないOSSがモリモリ入る超危険ソフトウェアだぞ

926 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 13:59:55.10 ID:Z7zOJE1W0.net]
>>919
中小企業はやっぱりエクセルになってしまうので・・・・
使わずに基幹ソフトだけで済めば、どれだけ良いことか

>超危険ソフトウェア
これ言い出すとあらゆるソフトが、ね

927 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 14:44:10.97 ID:CBKIfEX60.net]
VBA使う理由の半分はエクセルスプレッドシートとの連携だし



928 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 15:12:55.32 ID:1AlNHnvf0.net]
まあそうだね
Excel上でアウトプットしないならVBA以外がいいと思うは

929 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 15:39:55.47 ID:OCu5/hNR0.net]
EXCEL VBAのスレでスレ違いで悪いんだけど
話ついでに、VS.codeってトレースも出来るんだっけ?

930 名前:915 mailto:sage [2022/02/03(木) 16:14:10.02 ID:c9OHCnJld.net]
>>918

そうこれ
他に同じ事が出来るエディタも有るかもだけど軽いし今んとここれ一択だわ

931 名前:デフォルトの名無しさん [2022/02/03(木) 16:15:44.17 ID:/TAKaoAN0.net]
>>923
馬鹿は消えろ

932 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 16:28:13.06 ID:OCu5/hNR0.net]
自己解決。出来るね。

>>925
いきなりどうしたの?高齢期障害?

933 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 16:52:05.79 ID:RpJDoNdN0.net]
VSCode
https://i.imgur.com/qTVwaIg.png

934 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 17:47:56.55 ID:hHsifBpa0.net]
超危険と言えば昔のExcelってそうだった記憶ある
確かExcelを狙ったウィルスがあったような??

935 名前:デフォルトの名無しさん [2022/02/03(木) 18:15:38.24 ID:/TAKaoAN0.net]
>>926
自分の書き込みを読み返せ、馬鹿

936 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 18:24:46.05 ID:akJYuSUB0.net]
>>928
マクロウイルスのことかな

937 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 18:37:27.74 ID:OCu5/hNR0.net]
>>929
なんだやっぱりちょっとした話の流れに便乗した質問も許容出来ない高齢期障害の爺か
そんなにイライラしてると高血圧で脳溢血になるぞ



938 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 19:16:08.09 ID:qZuoLMNW0.net]
マクロだけだっけ、覚えてないわ

939 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 21:24:18.10 ID:Mvkv/5Wv0.net]
マクロウィルスはラルーだっけな?
それもあったけど、なんかのウィルスだった覚えがあります。
入力した値や文字列が文字化けするウィルス

940 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 17:29:19.29 ID:/9L9fpIb0.net]
10弱ほどの複数のシートの同じ行を、まとめて選択してDeleteしているのですが
シート1枚につき18秒ほど掛かるようになって、シート全体で3分以上Excelが固まった状態になります
行では無く範囲をUnionで選択しても速度は変わりませんでした
Clearcontentsすれば速いんですが、その後CSVにして読み込ませる必要があり
ただ消しただけだと、Deleteされた行までデータが存在する事になってしまっていて、支障があります
Clearcontentsした後、VBA側で空欄の行をDelete以外で詰める方法は無いでしょうか

941 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 17:34:09.06 ID:/YpTyf1v0.net]
↑コピペ

942 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 17:49:25.28 ID:/9L9fpIb0.net]
コピペって何が?

943 名前:デフォルトの名無しさん [2022/02/04(金) 18:12:14.30 ID:pHRCGz/X0.net]
>>931
読み返しても問題に気付かない馬鹿か?

944 名前:デフォルトの名無しさん [2022/02/04(金) 20:33:02.02 ID:mH27gNw80.net]
諸先輩方に質問です。
VBAの勉強を始めたばかりで的外れなところはご容赦ください。
BeforeRightClickで記述するということはわかりました。

シート3のE4:H14とN4:Q14の範囲において、
セルを右クリックで黄色く塗る、もういちど右クリックすると塗りつぶしを無色にする
ということをやりたいのです。
同時に右クリックのメニューも表示しなくなるようプログラムしたいです。
塗りつぶすセルは毎回異なるセルです。

日々の作業で特定の範囲内でセルを黄色く塗る作業が多くあります。
これをペンキボタンを使わずにできると作業効率があがるかと思います。
皆様には簡単すぎるかと思いますがどうぞよろしくお願いします。

945 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 20:40:52.99 ID:AMkz1drU0.net]
直の回答で無くてすまんがショートカットキー使った方が便利な気がする

946 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:30:10.84 ID:wpZeT9bxM.net]
>934
実際のコードはどんな感じ?
シート選択して該当行を削除してるなら、当然遅い。

947 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:33:46.72 ID:wpZeT9bxM.net]
>>938
右クリックにマクロ割り当てるより、既に回答ついてるようにキーボードショートカットに割り当てるか、イベントのダブルクリックなんかに割り当てる方が良いと思います。
他にも色々したいならユーザーフォームを使うのもありかと。



948 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:36:40.60 ID:Zgf6kB1T0.net]
>>938
多分こんな感じ

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
色 = 65535
If Not (Intersect(Target, Union(Range("E4:H14"), Range("N4:Q14"))) Is Nothing) Then
Cancel = True 'コンテキストメニューなし
If Target.Interior.Pattern = xlNone Then
Target.Interior.Color = 色
Else
Target.Interior.Pattern = xlNone
End If
Else
Cancel = False '範囲外ならコンテキストメニュー復帰
End If
End Sub

949 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:38:14.51 ID:Zgf6kB1T0.net]
一応書けたけど、バグったらごめんね~って感じはある
コンテキストメニューの非表示は、何か良くない事が起こる気がする
ショートカットに割り当てといたほうが良いと思うなぁ

950 名前:デフォルトの名無しさん [2022/02/04(金) 21:52:01.87 ID:mH27gNw80.net]
>>942
ありがとうございます、
試してみたところ、問題なく動きました。
素早いレス感謝します。

>>939
>>941
ありがとうございました。
ショートカットキーも併せて検討してみます

951 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:59:19.78 ID:Zgf6kB1T0.net]
>>942で一個だけ迷ったのが、
Cancel = True 'コンテキストメニューなし
の行
これ、今の場所に書くべきか、以下の間が良かったのか、どっちだろう
End If
Else

なんとなく後者の方が良いかと思ったけど、具体的な理由は特に無い

952 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 22:00:37.50 ID:hsiPC1r9M.net]
>>942
勉強になるわ

953 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 22:07:39.34 ID:hsiPC1r9M.net]
>>945
色塗りが先か非表示が先かってことでしょ?
どっちでも良い気がするけど

954 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 22:20:18.23 ID:Zgf6kB1T0.net]
>>947
そうそう、どっちでもいい
だけど、エラーの発生や可読性などを考慮した時、どっちがいいかなと思って
こういう時に迷わずに書けるようになりたい

955 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 22:27:16.08 ID:MwWgLKiA0.net]
>>938
向上心あって良いね、自分は動きゃええわって感じだからなぁ 笑
それもあってここ抜いちゃうかもって思った
Else
Cancel = False '範囲外ならコンテキストメニュー復帰

956 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 02:19:12.27 ID:6OPkdc9C0.net]
>>940
レスありがとうございます
シートを一枚ずつ削除してからDeleteを試していったら、特定のシートの有無で大きな変化があったので
重くなる理由で調べていったら、条件付き書式がセルのコピペで勝手にどんどん増殖していく というのがまさにそれでした
Deleteとかは関係なかったみたいです、失礼いたしました

957 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 03:34:09.74 ID:Bcit2bMf0.net]
勝手に増殖したらウイルスみたいだな、そもそもコピペで(条件付き)書式もコピーされるのは正常動作だし



958 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 14:27:20.74 ID:NvgV3V+H0.net]
365インサイダー板、久しぶりに更新きた

959 名前:デフォルトの名無しさん [2022/02/06(日) 04:25:59.05 ID:4j2iEgx50.net]
EXCEL2021のエラーダイアログに「デバッグ」ボタンがないんだけど、
どうすれば表示されるようになります?

960 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 17:12:52.54 ID:5H6ThRiB0.net]
>>953
スクリーンショット見せてほしい

961 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 11:59:42.81 ID:dtTrWMUA0.net]
新しいバージョンは、バグがあるからねぇ…
使わないに限る

962 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:13:58.84 ID:PizflsNCM.net]
全面的に使用禁止

963 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 14:36:18.09 ID:L5SqTIhE0.net]
そういい続けて今でもExcel2003使っている

964 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 17:16:58.35 ID:clNFinzC0.net]
VBA内で今まで使えてたKillが急に使えなくなった。
Excel13に戻すと使えるけど、俺が頃されたのか。

965 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 17:38:36.22 ID:N54aEDvt0.net]
概念が殺された

966 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 17:41:13.85 ID:2n7cflzo0.net]
>>958
ファイルやフォルダのアクセス権は大丈夫なんか?

967 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 18:07:58.36 ID:Zblf2oZud.net]
>>958
エラーコードとかもどってきてないの?



968 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 18:21:22.94 ID:clNFinzC0.net]
実行時エラー70
書き込みできません

プログラム内で作った作業用のファイルを終了直前に削除する部分が効かなくなった。
もう帰っちゃったしアクセス権とかは調べてないや。でもファイルは作れるしな。
先月までは普通に動いてたし別なPCでも同じ結果なんだな。

969 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 18:30:16.04 ID:1qSznfbA0.net]
>>958
「実行時エラー70書き込みできません kill」
で検索したら色々出てきた
多分開きっぱなしになっているので、.closeかなんかで閉じると良いと思う

970 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 18:44:59.26 ID:UL1lTxQ90.net]
ウイルスチェックやフォルダの同期(GoogleDrive)が邪魔してくれる事は良くある

971 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 20:17:13.59 ID:rYqCZzs10.net]
田中氏、いきなりようつべに復活したぽい

972 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 21:53:43.66 ID:2n7cflzo0.net]
>>962
そのファイルを誰かが開いてる

場合によってはエクスプローラーが開きっぱなしにすることがある
テンポラリフォルダの表示形式を一覧か詳細に変えてから閉じてみ

973 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 07:57:31.61 ID:Kw22iHFld.net]
>>962
ファイルを削除直前まで開いてたりすると削除で使用中の扱いになったりすることがあるから
ファイルを閉じる>Sleepで2秒程度またせる>削除
のようにするといいかもしれない。
自分はいつもこうしてる

974 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:22:07.82 ID:VQAPYvrL0.net]
ダウンロードファイルのVBAマクロをデフォルト無効化。Officeに仕様変更
https://pc.watch.impress.co.jp/docs/news/1386777.html

975 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 07:37:52.77 ID:Fae4IrPy0.net]
ダウンロードファイルなら無効にしておいたほうがいいだろうけど、
すぐに有効にしそう

976 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 09:21:32.50 ID:9BkbymyAM.net]
>>969
使うためにダウンするから難しいところだよね

977 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 09:47:40.14 ID:mKkfmqYvd.net]
社内のサイトからだとめんどくさいけどやらかすやつがいる以上はアプリ側でこういう対策をしてくれるのはありがたい
ファイルごとの指定だろうから既定値無効でいいと思うね



978 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 09:50:35.22 ID:RWuYGaqJ0.net]
こっそり入ってくるのを防ぐのが目的なんだから、マクロの存在をユーザーが認識できてるかどうかでしょ
自分で設定を切れるレベルの人は問題ないとみなすので、自己責任でどうぞ切って下さいってスタンス

979 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 10:56:38.64 ID:9BkbymyAM.net]
>>972
ウイルス単独というか元々あるVBAのコードを改編されるからコードが読めないと判断出来ないと思うよ

980 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 11:20:58.48 ID:bDyl2u0GM.net]
完璧に対策するのは不可能だから、まずは「添付の資料を見て下さい」っていう犯人からのメールきっかけで侵入されるパターンを想定してるのでは

981 名前:デフォルトの名無しさん [2022/02/09(水) 12:06:08.78 ID:kbHLXdYh0.net]
マクロを理解してる人は、メールとかで送られてくる
Excelファイルなんて開かないけど、無能な素人が
開いちゃって、社内にウイルスがばら撒かれるから
無能のヒューマンエラー防止のための策でしょ?

982 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 12:22:38.83 ID:j8hQF/oi0.net]
公開されているcsvを読込むマクロで
csvファイルからウイルス広まる事例って
あるのかしら?

983 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:40:36.30 ID:LKLk4DLKa.net]
リンクを手当り次第クリックしちゃうアホがいるからね

984 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:43:15.59 ID:Fae4IrPy0.net]
誤クリを防ぐって意味ならたしかにかなり有用だと思う

>>976
言ってる意味がよく分からんが、
マクロはものすごくウィルスを添付しやすい
サイトで公開されているマクロ付きのエクセルファイルなんて開いちゃダメだぞ
コードを読んで、コピーして問題なければ使うのが基本だ

985 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:04:41.56 ID:j8hQF/oi0.net]
>>978
ああ。
.xlsmファイルをメールで送るつもりはさらさらなくて。

けど、
e-statなんかで公開されているcsvファイルを
読込んで処理するマクロを組んだ.xlsmファイルも
デフォルトでは開く度に毎回警告されるものだから。

986 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:20:22.38 ID:RWuYGaqJ0.net]
CSVは単なるテキストファイルだから、それ自体には感染能力はないけど、わざと文字化けさせたり巨大なデータを混入させてといて、読み込むアプリを誤作動されられる可能性ならある
簡単に実験できる範囲だと、セル内改行が大量にあるだけでExcelがプチフリするしね

987 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:20:22.44 ID:Z/7LO9MU0.net]
CSVに関数を書き込んで読み込んだExcelがそれを実行するって事例があった



988 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:25:00.32 ID:I0u44nFvd.net]
Excel VBA 質問スレ Part75
https://mevius.5ch.net/test/read.cgi/tech/1644384272/

989 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:27:15.27 ID:RWuYGaqJ0.net]
>>981
さすがにワークシート関数だけじゃ感染は無理なのでは
使用者を混乱させて誤操作を誘発するとかやらないと

990 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 15:29:31.91 ID:h7C3sgPu0.net]
>>982
なんたる有能

991 名前:デフォルトの名無しさん [2022/02/09(水) 15:41:42.37 ID:F+qQsHczr.net]
大昔、2chの草創期に大流行した

ブラクラみたいな感じ

992 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 18:27:17.30 ID:2Z/3/DW40.net]
古いExcelは拡張子.xls でもマクロ書けたのと、test.csv.xls みたいなファイル名でOS設定で拡張子を表示しないとか
されていると気づかないで実行されることがあった

993 名前:デフォルトの名無しさん [2022/02/09(水) 19:24:18.78 ID:KYojXGCr0.net]
どうすれば先頭の画像をクリックできるのでしょうか?
Sub func()
Dim url As String: url = "https://e-hentai.org/g/1727798/1f

994 名前:be77a0a2/"
Dim buffer As String: buffer = ""
Dim objLink As Object
Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.navigate (url)
Do While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Call WaitFor(3) ' wait for 3 seconds
buffer = objIE.document.getElementsByClassName("gdtm").outerHTML
Cells(1, 1).Value = buffer
objIE.Quit
Set objIE = Nothing
End Sub

Function WaitFor(ByVal second As Integer)
Dim futureTime As Date: futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Function
[]
[ここ壊れてます]

995 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 19:45:46.68 ID:Fae4IrPy0.net]
>>987
ここから進まない
Do While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

最終的に何がしたいの?スクレイピング(画像のダウンロード)?

996 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 19:48:05.28 ID:Fae4IrPy0.net]
ダウンロードなら、右の「Archive Download」からダウンロードできるぽいのでそこで試してみては

997 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:24:05.75 ID:Z/7LO9MU0.net]
buffer = objIE.document.getElementsByClassName("gdtm").outerHTML

buffer = objIE.document.getElementsByClassName("gdtm")(0).outerHTML

みたいに添え字が必要。先頭だけでいいなら0

ちなみに、objIE.document.getElementsByClassName("gdtm").Length で何個あるかわかる
全部ほしければループする

リンク先が欲しいなら、outerHTMLじゃなくて、aタグのhrefだけ取得すればいいと思うよ
hoge = objIE.document.getElementsByClassName("gdtm")(0).getElementsByTagName("a")(0).href

あとは、objIE.navigate (hoge) でリンク先に飛ぶ



998 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:40:08.30 ID:RWuYGaqJ0.net]
>>987
そもそもe-hentai.orgはスクレイピング対策がけっこうキツめだからそんな単純な方法ではだめだったはず

999 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:44:33.64 ID:oSWjz80sa.net]
.click

1000 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:14:49.52 ID:MpMYHHoEd.net]
どんな画像かわからんけど漫画なら作者なりが訴えたらまとめて賠償請求されるかもしれんのに
よく回答するねw

1001 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:20:10.16 ID:dWa1kwqW0.net]
だって、教えたがりおじさんおばさんの巣窟だもん

1002 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:31:13.14 ID:WQvIAEnaM.net]
回答者に賠償請求ですって?法律を知らない子はおかしなことをおっしゃるのね

1003 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:43:06.13 ID:qWGRAcWA0.net]
質問者はどうしたらクリックできるか訊いてるんだけどね
なぜかダウンロードだのどうしたいだの

1004 名前:デフォルトの名無しさん [2022/02/10(木) 01:00:09.82 ID:hZgX7eKD0.net]
マウスつなげる

1005 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 07:30:31.61 ID:j0eZpZqg0.net]
If cnt=1000 Then MsgBox "ぬるぽ", vbOkOnly+vbCritical

1006 名前:94 mailto:sage [2022/02/10(木) 09:01:43.57 ID:YAVEwoPsM.net]
vbaでWordの2ページ目にある表の中の文字列をエクセル転記したいです。
Wordの操作はできそうなのですが文字をどこまで細かく引っ張れるのでしょうか

1007 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 09:33:43.50 ID:cXcP1CjO0.net]
>>999
条件次第



1008 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 52日 7時間 52分 44秒

1009 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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