!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part58
https://mevius.5ch.net/test/read.cgi/tech/1542577644/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
Excel VBA 質問スレ Part59
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ d2a3-A3MQ)
2019/02/09(土) 15:12:30.70ID:3lTArmdf0572デフォルトの名無しさん (ドコグロ MMdb-hSmr)
2019/03/01(金) 13:04:09.15ID:SCR8DJeBM 所詮VBAだしどうでもいいよ
VBAの可読性・保守性を高める唯一の指針があるとしたら、極力VBAを書かないでワークシートの機能を活用することかな
VBAの可読性・保守性を高める唯一の指針があるとしたら、極力VBAを書かないでワークシートの機能を活用することかな
573デフォルトの名無しさん (JP 0H4f-j5yB)
2019/03/01(金) 13:26:59.89ID:HgS5037SH >>571
標準モジュールに Sub MergeSheet1To2 とか作ってCallすれば、他人が処理部を見なくても「このボタンを押すとマージされるんだなぁ」と想像ができる。
自分はフォーム内は処理に使うデータのチェックくらいにしてる。
標準モジュールに Sub MergeSheet1To2 とか作ってCallすれば、他人が処理部を見なくても「このボタンを押すとマージされるんだなぁ」と想像ができる。
自分はフォーム内は処理に使うデータのチェックくらいにしてる。
574デフォルトの名無しさん (ワッチョイ 9f01-IBRN)
2019/03/01(金) 14:04:11.91ID:+h/xS+gL0 フォームモジュールって細々としたイベントのプロシージャであふれちゃって見にくい
だからできるだけ標準モジュールに切り分けてる
例えばフォーム上の複数のTextBoxに全く同じ入力規則を設けたい時なんかは
TextBox・KeyCode・Shiftを引数とするプロシージャを標準モジュールに書いて使い回ししてる
さっきもそういうの書いてた
だからできるだけ標準モジュールに切り分けてる
例えばフォーム上の複数のTextBoxに全く同じ入力規則を設けたい時なんかは
TextBox・KeyCode・Shiftを引数とするプロシージャを標準モジュールに書いて使い回ししてる
さっきもそういうの書いてた
575デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/01(金) 17:47:45.49ID:jYXMQwAma576デフォルトの名無しさん (スップ Sd3f-IK5z)
2019/03/01(金) 18:53:01.98ID:KSyELWIpd >>571
そのフォームで完結させたい時はフォームに全部書く。
汎用的なのは標準モジュール、汎用的でなくてもいろんな所から使い回す場合も標準モジュールだな。
シートモジュールにはシートのイベントプロシージャ以外書かないのが基本だけどそのシートのイベントプロシージャと一緒にしたい理由でシートモジュールに書くこともある。
意味論というか、何処に書くかは内容で決める。その方が後でコード見る時に視認性も良くなる。
そのフォームで完結させたい時はフォームに全部書く。
汎用的なのは標準モジュール、汎用的でなくてもいろんな所から使い回す場合も標準モジュールだな。
シートモジュールにはシートのイベントプロシージャ以外書かないのが基本だけどそのシートのイベントプロシージャと一緒にしたい理由でシートモジュールに書くこともある。
意味論というか、何処に書くかは内容で決める。その方が後でコード見る時に視認性も良くなる。
577デフォルトの名無しさん (アウアウウー Sa9b-fNI3)
2019/03/01(金) 20:10:20.22ID:9ceAGmrya 俺ならスコープで書く場所変えてる
578デフォルトの名無しさん (ワッチョイ d783-nvQ/)
2019/03/01(金) 20:18:09.30ID:S/p2I5Nx0 シート1だけでしか使わない関数はシート1
その関数の中で使う関数で他でも使う汎用関数は標準モジュール
シート1のデータを加工ってあるが、それが将来にでも他のシートでも使いそうならその加工関数は汎用化して
標準モジュール。 シート1でしか使わないのならその加工関数はシート1に書く
その関数の中で使う関数で他でも使う汎用関数は標準モジュール
シート1のデータを加工ってあるが、それが将来にでも他のシートでも使いそうならその加工関数は汎用化して
標準モジュール。 シート1でしか使わないのならその加工関数はシート1に書く
579デフォルトの名無しさん (ワッチョイ 9f7c-L+km)
2019/03/01(金) 21:39:17.32ID:41cCIQF20 上級者の人がどう使っているかなんとなく解ったような気がします。とりあえず
【クラスモジュール】汎用性のある関数
【標準モジュール】 大きな処理
【シートモジュール】【フォーム】極力使わないが他と絡まない短いコードなら完結しても良い
という感じで試してみようと思います。
あとは関数名の最後に呼び出しする関数がある場所を付けてみようと思います。
何をやりたいかで構成も変わると思うのでそこらへんも加味しながら試してみます。
参考になりました、ありがとうございます!
【クラスモジュール】汎用性のある関数
【標準モジュール】 大きな処理
【シートモジュール】【フォーム】極力使わないが他と絡まない短いコードなら完結しても良い
という感じで試してみようと思います。
あとは関数名の最後に呼び出しする関数がある場所を付けてみようと思います。
何をやりたいかで構成も変わると思うのでそこらへんも加味しながら試してみます。
参考になりました、ありがとうございます!
580デフォルトの名無しさん (アウアウクー MM0b-VAd9)
2019/03/01(金) 22:34:27.56ID:KieDV9lDM ここに上級者なんていないぞ
581デフォルトの名無しさん (ワッチョイ bf8c-9NtP)
2019/03/01(金) 22:48:58.94ID:eQhW3/JV0 >>579
関数名の最後になにを付けるって?
関数名の最後になにを付けるって?
582デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/01(金) 23:05:06.38ID:jYXMQwAma また一人、道に迷ってしまった
やっぱりVBAで勉強するのは非推奨ダナ
やっぱりVBAで勉強するのは非推奨ダナ
583デフォルトの名無しさん (ワッチョイ ffda-3oSp)
2019/03/01(金) 23:30:05.02ID:zWZoP6hm0584デフォルトの名無しさん (アークセー Sx0b-Yt/p)
2019/03/02(土) 01:21:31.95ID:Po9hNmd9x >>579
汎用性のある関数を記載する場所だけど、VBAの仕様ではクラスモジュールではなく標準モジュールの方が都合が良いよ
何故なら自作のクラスモジュールに記述した関数を呼び出す場合、その自作クラスのオブジェクトのインスタンスを生成した後にそのオブジェクトのメソッドとして書くという手間が要る
つまりマシンメメモリの無駄食いになるしコーディング量も増える
標準モジュールならば関数名を書くだけで呼べるので余程気楽
適当にググったときに出てくる、OOP原理主義のJavaプログラマあたりが言うところの「汎用性のある関数はクラスに」っていう考え方は、VBAには当てはまらないので注意だよ
汎用性のある関数を記載する場所だけど、VBAの仕様ではクラスモジュールではなく標準モジュールの方が都合が良いよ
何故なら自作のクラスモジュールに記述した関数を呼び出す場合、その自作クラスのオブジェクトのインスタンスを生成した後にそのオブジェクトのメソッドとして書くという手間が要る
つまりマシンメメモリの無駄食いになるしコーディング量も増える
標準モジュールならば関数名を書くだけで呼べるので余程気楽
適当にググったときに出てくる、OOP原理主義のJavaプログラマあたりが言うところの「汎用性のある関数はクラスに」っていう考え方は、VBAには当てはまらないので注意だよ
585デフォルトの名無しさん (ワッチョイ f7ce-uydA)
2019/03/02(土) 02:50:08.40ID:eoNuxzNL0586デフォルトの名無しさん (ワッチョイ 9fa2-IBRN)
2019/03/02(土) 03:08:30.41ID:vHLv5v7t0 >>585
数式タブ→数式の表示
数式タブ→数式の表示
587デフォルトの名無しさん (アークセー Sx0b-Yt/p)
2019/03/02(土) 09:24:48.87ID:Po9hNmd9x588デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/02(土) 09:34:34.03ID:heck9gfNa ワークシート関数の何が良いかというと副作用がないことだよ
ぶっちゃけ重要なのはそこだけ
それ以外ではセル内にだらだら式を書くと醜いなどデメリットしかない
なのでVBAで普通に副作用がない関数を書けばいい
副作用のない関数ならVBAからもセル内式からも使いやすい
しかもセル内式と違って見やすく管理しやすい
ぶっちゃけ重要なのはそこだけ
それ以外ではセル内にだらだら式を書くと醜いなどデメリットしかない
なのでVBAで普通に副作用がない関数を書けばいい
副作用のない関数ならVBAからもセル内式からも使いやすい
しかもセル内式と違って見やすく管理しやすい
589デフォルトの名無しさん (アークセー Sx0b-Yt/p)
2019/03/02(土) 09:47:47.22ID:Po9hNmd9x VBAの方が見やすくて管理しやすくてワークシート関数は見にくいって図式が成り立つかどうかは正直処理を書くやつのスキル次第だけどな
ワークシート関数は必ず内部スコープが()で括られるリスト形式だから、処理構造が簡潔に可視化できるメリットがあるとも言えるわけだし
ワークシート関数は必ず内部スコープが()で括られるリスト形式だから、処理構造が簡潔に可視化できるメリットがあるとも言えるわけだし
590デフォルトの名無しさん (ワッチョイ bf8c-9NtP)
2019/03/02(土) 10:15:37.68ID:VydunwR60 自分は>>572とほぼ正反対のやり方でやってきた
シートは使い捨てのデータとちょっとした設定情報を置いたり、あとは結果を出力する場所としてしか使わないな。
使い捨てのは別だけど、ツールとして繰り返し使うブックのシートに関数はほぼ書いてない。
シートは使い捨てのデータとちょっとした設定情報を置いたり、あとは結果を出力する場所としてしか使わないな。
使い捨てのは別だけど、ツールとして繰り返し使うブックのシートに関数はほぼ書いてない。
591デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/02(土) 10:26:10.19ID:heck9gfNa592デフォルトの名無しさん (アウアウエー Sadf-hSmr)
2019/03/02(土) 10:34:03.78ID:1SfH4HCRa593デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/02(土) 10:46:06.68ID:heck9gfNa >>592
そもそもセル名前自体が管理しにくいので論外
セル名と数式の関係性がパッと見てわからないし
セル名と数式がひも付けられて管理されてると言われなきゃ後任が気付かない
VBA関数ならこの関数名はこの定義って誰でも一目でわかる
本来の出力でない余計なカラムはノイズになって邪魔
名前で管理したい項目が増えたらノイズだらけになってなにを説明したい表なのかわからなくなる
そもそもセル名前自体が管理しにくいので論外
セル名と数式の関係性がパッと見てわからないし
セル名と数式がひも付けられて管理されてると言われなきゃ後任が気付かない
VBA関数ならこの関数名はこの定義って誰でも一目でわかる
本来の出力でない余計なカラムはノイズになって邪魔
名前で管理したい項目が増えたらノイズだらけになってなにを説明したい表なのかわからなくなる
594デフォルトの名無しさん (ワッチョイ 7f0d-+O5F)
2019/03/02(土) 10:57:15.96ID:ZJ+HN4z+0 visual studioに慣れ切ってしまってるのでVBAエディタがマジで苦手・・・
595デフォルトの名無しさん (ドコグロ MMdf-hSmr)
2019/03/02(土) 11:26:41.59ID:PSsyx6QoM596デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/02(土) 11:40:34.50ID:heck9gfNa >>595
こ文脈でループを回すの意味がわからないしどっから出てきて何を意味してるんだ?
こ文脈でループを回すの意味がわからないしどっから出てきて何を意味してるんだ?
597デフォルトの名無しさん (ワッチョイ f7da-3oSp)
2019/03/02(土) 13:55:25.27ID:WupyvY1Q0 話変わるがセルのコピーとか移動したときに条件付き書式が壊れてやたら重くなって直すの苦労したことある
598デフォルトの名無しさん (ワッチョイ 9f2f-nxCI)
2019/03/02(土) 15:18:36.62ID:EfeqCtIS0 お前らまず、
ワークシートの機能を活用する
というのをどういうことかちゃんと合わせてから話してくれるか
ワークシートの機能を活用する
というのをどういうことかちゃんと合わせてから話してくれるか
599デフォルトの名無しさん (アークセー Sx0b-Yt/p)
2019/03/02(土) 18:22:41.70ID:BmvnLX83x >>598
ワークシートの機能ってのはワークシートの機能一般のことでしかないだろ
ワークシートの特定の機能を想定して話をしてるんじゃない
ワークシートの機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
ワークシートの機能ってのはワークシートの機能一般のことでしかないだろ
ワークシートの特定の機能を想定して話をしてるんじゃない
ワークシートの機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
600デフォルトの名無しさん (ワッチョイ ffda-3oSp)
2019/03/02(土) 19:24:09.91ID:PK2Geudt0 ワークシートって言いすぎww
Withでまとめたくなってきたわ。
Withでまとめたくなってきたわ。
601デフォルトの名無しさん (JP 0Hdf-lo0V)
2019/03/02(土) 19:30:50.79ID:6n8BrDHBH With ワークシート
.の機能ってのは
.の機能一般のことでしかないだろ
.の特定の機能を想定して話をしてるんじゃない
.の機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
End With
.の機能ってのは
.の機能一般のことでしかないだろ
.の特定の機能を想定して話をしてるんじゃない
.の機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
End With
602デフォルトの名無しさん (ワッチョイ bf8c-9NtP)
2019/03/02(土) 20:23:41.79ID:VydunwR60 ワークシートの機能って単独のワークシート関数で実現できることなの?
それをVBAでやるのは確かに馬鹿らしい。
そうじゃないならVBAのほうがいいな。
それをVBAでやるのは確かに馬鹿らしい。
そうじゃないならVBAのほうがいいな。
603デフォルトの名無しさん (ワッチョイ 9f2f-nxCI)
2019/03/03(日) 01:17:47.50ID:5kU0Dorz0 >599
だからワークシートの機能一般ってなんのことを言ってるの?
セルの計算式?
計算式用のワークシート関数?
Application.WorksheetFunction?
だからワークシートの機能一般ってなんのことを言ってるの?
セルの計算式?
計算式用のワークシート関数?
Application.WorksheetFunction?
604デフォルトの名無しさん (ワッチョイ f7b0-VAd9)
2019/03/03(日) 03:16:39.28ID:1gVEOeax0 VBA以外のExcelで出来ること全てだろ
理解力低過ぎないか?
理解力低過ぎないか?
605デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/03(日) 11:57:08.93ID:XBWTxj+a0 なんでVBAを外すのか分からない
このスレにいる連中ならワークシートにはイベントも含まれるという感覚の方が普通でしょ
このスレにいる連中ならワークシートにはイベントも含まれるという感覚の方が普通でしょ
606デフォルトの名無しさん (ワッチョイ ffda-3oSp)
2019/03/03(日) 12:44:05.38ID:87SKey7q0 シートを方眼紙だと思っている人の視点での機能一般だろう。
ここの人たちは、クラスモジュールの1つくらいの感覚かもしれんが。
ここの人たちは、クラスモジュールの1つくらいの感覚かもしれんが。
607デフォルトの名無しさん (ワッチョイ 377c-vuRV)
2019/03/03(日) 14:18:18.29ID:ilhG1tLW0 そこはかとなく臭うというか湧き出るダサさが嫌い
608デフォルトの名無しさん (アウアウウー Sa9b-fNI3)
2019/03/03(日) 18:57:15.36ID:dGd12yAna EXCELの全ての機能のうちVBAを除いた残りってことじゃね
609デフォルトの名無しさん (アークセー Sx0b-yUTo)
2019/03/03(日) 19:26:33.74ID:2dKZwCIHx エクセルのオブジェクトモデルでメソッドが提供されてるような機能をわざわざVBAでスクラッチするなって意味もあるんじゃね
ListObjectオブジェクト(テーブル)の存在や機能を知らずに、同一列内のセル数式ほコピーの機能を自作するような話だろ
ListObjectオブジェクト(テーブル)の存在や機能を知らずに、同一列内のセル数式ほコピーの機能を自作するような話だろ
610デフォルトの名無しさん (ブーイモ MM3b-hSmr)
2019/03/03(日) 20:55:07.59ID:C10iXUczM 初心者です。わかる方いましたらお教えください。
IE.Visible = False
として、
IE.Quitが何らかの理由で実行されなかったり、それを書かなかった場合
どうなってしまうんでしょうか…?
バックグラウンドでずっとフワフワといるんでしょうか?
見方もよくわからないタスクマネージャーで見てみるとアプリケーションとしてはたぶん起動されていませんでした…
IE.Visible = Falseとした場合はもしかして特に閉じる指示が必要ないのでしょうか…?
IE.Visible = False
として、
IE.Quitが何らかの理由で実行されなかったり、それを書かなかった場合
どうなってしまうんでしょうか…?
バックグラウンドでずっとフワフワといるんでしょうか?
見方もよくわからないタスクマネージャーで見てみるとアプリケーションとしてはたぶん起動されていませんでした…
IE.Visible = Falseとした場合はもしかして特に閉じる指示が必要ないのでしょうか…?
611デフォルトの名無しさん (ワッチョイ f7ce-uydA)
2019/03/03(日) 21:00:52.17ID:sl8Y8jOC0 >>610
バックグラウンドでずっと動き続ける、が正解
ちゃんと起動してないのはコードがおかしいかタスクマネージャの見方がおかしい
そこをTrueに変えるだけでちゃんとIEのウィンドウが表示されるか確認
バックグラウンドでずっと動き続ける、が正解
ちゃんと起動してないのはコードがおかしいかタスクマネージャの見方がおかしい
そこをTrueに変えるだけでちゃんとIEのウィンドウが表示されるか確認
612デフォルトの名無しさん (ブーイモ MM3b-hSmr)
2019/03/03(日) 21:44:32.70ID:C10iXUczM613デフォルトの名無しさん (ワッチョイ 3791-IK5z)
2019/03/04(月) 09:46:01.18ID:TvaJY4yu0 関数使うかVBA使うかも内容で決める。
関数だと物凄く重くなることがある。
Sumproductとかを多用した場合とか、複数シートの集計を1日の集計としてさらに1ヶ月分の集計するとか。
自動計算を切れば良いんだけど、運用で微妙だね。
それに昔、銀行の仕事で大量のデ―タとSumproductのせいで1回の計算でさえいつまでたっても終わらないことがあった。
その時はVBAに書いたら5秒で終わった。
関数だと物凄く重くなることがある。
Sumproductとかを多用した場合とか、複数シートの集計を1日の集計としてさらに1ヶ月分の集計するとか。
自動計算を切れば良いんだけど、運用で微妙だね。
それに昔、銀行の仕事で大量のデ―タとSumproductのせいで1回の計算でさえいつまでたっても終わらないことがあった。
その時はVBAに書いたら5秒で終わった。
614デフォルトの名無しさん (ブーイモ MM1b-9NtP)
2019/03/04(月) 10:53:05.90ID:RuY9YBtCM ワークシート関数を関数と表現するのってUSBメモリをUSBと呼ぶのと同様にアレな感じ
615デフォルトの名無しさん (ワッチョイ 178e-4jKm)
2019/03/04(月) 10:55:32.34ID:TFGUk6BN0 その違和感を持てる知識がない頭が残念な人なんだろ
616デフォルトの名無しさん (JP 0H4f-j5yB)
2019/03/04(月) 11:15:22.83ID:gwy/L6iPH WorksheetFunctionプロパティで呼ぶもの(sumとかvlookupとか)がワークシート関数
VBAでしか使えないもの(CIntとかInstrとか)がVBA関数
上記と自作関数をまとめて関数
VBAでしか使えないもの(CIntとかInstrとか)がVBA関数
上記と自作関数をまとめて関数
617デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/04(月) 11:25:35.49ID:vFn2j9Kt0 >VBA関数
標準関数だろう
エクセルの場合はVBA標準関数とでも言うべきか
>自作関数
ユーザー定義関数という名称がある
まぁ俺は関数としか呼ばんけどな、ハハハ
vbaでワークシート関数使う時はそう呼ぶ
標準関数だろう
エクセルの場合はVBA標準関数とでも言うべきか
>自作関数
ユーザー定義関数という名称がある
まぁ俺は関数としか呼ばんけどな、ハハハ
vbaでワークシート関数使う時はそう呼ぶ
618デフォルトの名無しさん (JP 0H4f-j5yB)
2019/03/04(月) 11:45:46.92ID:gwy/L6iPH619デフォルトの名無しさん (ワッチョイ 3791-IK5z)
2019/03/04(月) 14:30:16.31ID:TvaJY4yu0 関数とVBAと対比させてるのに勘違いする奴がいるとはとても思えないが。
いたらそいつはアホだよ。
いたらそいつはアホだよ。
620デフォルトの名無しさん (ワッチョイ 178e-4jKm)
2019/03/04(月) 14:32:37.46ID:TFGUk6BN0 >>619
馬鹿が恥の上塗りに来ましたよ、と
馬鹿が恥の上塗りに来ましたよ、と
621デフォルトの名無しさん (ワッチョイ 3791-IK5z)
2019/03/04(月) 14:57:43.98ID:TvaJY4yu0 >>620
あらら、アホが恥の上塗りに来たよw
あらら、アホが恥の上塗りに来たよw
622デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/04(月) 15:02:35.15ID:vFn2j9Kt0 vbaだし何でもええやろ
どうせ大事に至ることはない、争う程の事ではない
どうせ大事に至ることはない、争う程の事ではない
623デフォルトの名無しさん (ワッチョイ 178e-4jKm)
2019/03/04(月) 15:28:20.01ID:TFGUk6BN0624デフォルトの名無しさん (ブーイモ MM1b-9NtP)
2019/03/04(月) 16:20:08.03ID:RuY9YBtCM 「文脈上USBメモリのことであるとわかるときはUSBでいい」
「そもそもそんな呼び方普段からするなよ」
「そもそもそんな呼び方普段からするなよ」
625デフォルトの名無しさん (アウアウクー MM0b-VAd9)
2019/03/04(月) 18:20:48.65ID:FDpjfwBmM わかるかどうか判断するのは読み手側だからな
書く側が勝手に略すのは読ませる気がないんだろう
書く側が勝手に略すのは読ませる気がないんだろう
626デフォルトの名無しさん (ワッチョイ 37e6-W5e4)
2019/03/04(月) 23:23:23.24ID:dF1M3atd0 そういえばCD-ROM2をロムって呼んでたやついたな
これSUPER CD-ROM2だから
これSUPER CD-ROM2だから
627デフォルトの名無しさん (ワッチョイ 178e-XA5H)
2019/03/05(火) 00:24:00.61ID:YDI1bFmR0 ID:TvaJY4yu0みたいな馬鹿がメンテできなくなるVBAを作る
628デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 00:37:29.46ID:yUBkGE+g0629デフォルトの名無しさん (アウアウエー Sadf-vuRV)
2019/03/05(火) 03:34:27.88ID:VDry4yCPa 馬鹿には無理
630デフォルトの名無しさん (ワッチョイ d709-nvQ/)
2019/03/05(火) 05:56:45.90ID:pou1Iepn0 >>628
見てきたけど、なんかすげえめんどくさそう。出来ることも見新しいことってほとんどないじゃん
普通のWin32APIとかやったことあるのか。そっち勉強した方が遥かにまし。 VBAでもやれるから
見てきたけど、なんかすげえめんどくさそう。出来ることも見新しいことってほとんどないじゃん
普通のWin32APIとかやったことあるのか。そっち勉強した方が遥かにまし。 VBAでもやれるから
631デフォルトの名無しさん (アウアウエー Sadf-hSmr)
2019/03/05(火) 07:48:42.24ID:VSxyPtP8a いやMacとかOffice Onlineで使えることに意味があるんだろ
まあOffice Online使うくらいならGSuite使うという企業が殆どだろうけどw
まあOffice Online使うくらいならGSuite使うという企業が殆どだろうけどw
632デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 08:12:27.21ID:yUBkGE+g0 >>628
はこういう事だった
誰も使ってないのね
https://qiita.com/y__na_ka_ya_ma/items/2575e79248978ff7828d
>>629
自己紹介乙
>>630-631
もちろんやれることは同じ
jsで書ける事自体がメリット
googleSpreadsheetのマクロを移植する時に使える
一生に一回もないと思うけどな
はこういう事だった
誰も使ってないのね
https://qiita.com/y__na_ka_ya_ma/items/2575e79248978ff7828d
>>629
自己紹介乙
>>630-631
もちろんやれることは同じ
jsで書ける事自体がメリット
googleSpreadsheetのマクロを移植する時に使える
一生に一回もないと思うけどな
633デフォルトの名無しさん (アークセー Sx0b-yUTo)
2019/03/05(火) 08:56:53.06ID:K5flI6jox Win32APIとOffice JavaScriptAPIどっちを勧めるかと聞かれたら今なら後者かな
後者の案件あるのか知らんが
後者の案件あるのか知らんが
634デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
2019/03/05(火) 12:20:11.68ID:IGhfqt8ja そもそも全くの別物を比較してどうすんねん
635デフォルトの名無しさん (エムゾネ FFbf-IK5z)
2019/03/05(火) 12:44:55.98ID:bZMGULjeF636デフォルトの名無しさん (エムゾネ FFbf-IK5z)
2019/03/05(火) 12:47:21.71ID:bZMGULjeF637デフォルトの名無しさん (エムゾネ FFbf-IK5z)
2019/03/05(火) 12:51:32.81ID:bZMGULjeF638デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 13:01:00.32ID:yUBkGE+g0639デフォルトの名無しさん (ワッチョイ 178e-4jKm)
2019/03/05(火) 13:14:26.63ID:YDI1bFmR0 ID:bZMGULjeF
マジモンのアスペルガーのキチガイ
マジモンのアスペルガーのキチガイ
640デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 13:18:51.34ID:yUBkGE+g0 jsアドインもう少しぐらい使われてるのかと思ったけど、
誰も使ってないようで安心した
誰も使ってないようで安心した
641デフォルトの名無しさん (ワッチョイ 377c-nl/e)
2019/03/05(火) 13:32:20.37ID:YOwkwz810 Excel Python API とかも Excel.js Office.js とかと同じ扱いになる悪寒
642デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 13:36:30.59ID:yUBkGE+g0643デフォルトの名無しさん (ワッチョイ 3791-IK5z)
2019/03/05(火) 20:23:23.29ID:ruLmgCaM0644デフォルトの名無しさん (ワッチョイ 3791-IK5z)
2019/03/05(火) 20:34:12.08ID:ruLmgCaM0645デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 20:39:11.81ID:yUBkGE+g0 逆引き系辞典はネットあると本当に使わない
646デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
2019/03/05(火) 21:11:49.71ID:WmyrgrGT0 会社で異動になった人が作ったマクロの稀に出るバグを直そうと頑張っています。
ちょっと怪しいかなと思ったプロシージャがあるので見にくく長いと思うのですが見て頂けませんか?
勉強しながらの初心者です。
Sub wait(IE As InternetExplorer)
Const リトライ = 2
Dim IEDOC As HTMLDocument
Dim ReCount As Long,i As Long
Do
«略»
Set IEDOC = IE.Document
«略»
Loop While IEDOC Is Nothing
If IEDOC.frames.Length < リトライ Then
ReCount = リトライ
Else
ReCount = IEDOC.frames.Length
End If
For i = 0 To ReCount
Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Next
End Sub
このあとすぐに書き込みに参ります
ちょっと怪しいかなと思ったプロシージャがあるので見にくく長いと思うのですが見て頂けませんか?
勉強しながらの初心者です。
Sub wait(IE As InternetExplorer)
Const リトライ = 2
Dim IEDOC As HTMLDocument
Dim ReCount As Long,i As Long
Do
«略»
Set IEDOC = IE.Document
«略»
Loop While IEDOC Is Nothing
If IEDOC.frames.Length < リトライ Then
ReCount = リトライ
Else
ReCount = IEDOC.frames.Length
End If
For i = 0 To ReCount
Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Next
End Sub
このあとすぐに書き込みに参ります
647デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
2019/03/05(火) 21:26:50.63ID:WmyrgrGT0 オレンジの部分がIE.Busy = Trueという風に教科書通りになっていないのですがこれで大丈夫なのでしょうか
上手いことちゃんとなっているか調べようとやってみましたが私には難しかったです
そして水色の部分なのですが、フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
フレームがいくつかあると取得のたびにIE.BusyがTrue,Falseに切り替わると聞いたのでそのためで合っていますか
それよりもさっき調べて出てきた
'完全にドキュメントが読み込まれるまで待機する
Do Until IE.document.ReadyState = "complete"
DoEvents
Loop
ではダメなのでしょうか、別物でしょうか
ざっとみておかしい部分はありますか?
図々しくすみません
https://i.imgur.com/DQxGNB5.jpg
上手いことちゃんとなっているか調べようとやってみましたが私には難しかったです
そして水色の部分なのですが、フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
フレームがいくつかあると取得のたびにIE.BusyがTrue,Falseに切り替わると聞いたのでそのためで合っていますか
それよりもさっき調べて出てきた
'完全にドキュメントが読み込まれるまで待機する
Do Until IE.document.ReadyState = "complete"
DoEvents
Loop
ではダメなのでしょうか、別物でしょうか
ざっとみておかしい部分はありますか?
図々しくすみません
https://i.imgur.com/DQxGNB5.jpg
648デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
2019/03/05(火) 21:32:38.87ID:WmyrgrGT0 どういうマクロかと言うと、IEを開いてリンクボタンをいくつか押して文字を引っ張ってきてIEを閉じるというのを何度か繰り返すものです。
リンク先を正しく閉じられていないまま次の回転に入っていることが稀にあるのです
リンク先を正しく閉じられていないまま次の回転に入っていることが稀にあるのです
649デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 21:58:09.97ID:yUBkGE+g0 >>646
別物だな
>>646はvbaオブジェクトのプロパティ
WebBrowserControl.ReadyState
https://docs.microsoft.com/ja-jp/office/vba/api/access.webbrowsercontrol.readystate
>>647はwebのapi
Document.readyState
https://developer.mozilla.org/ja/docs/Web/API/Document/readyState
どっちが信用できるかは分からない
どちらにしてもIEオブジェクトがどこまでwebの技術に対応してるか分からない。難しい
かなり雑な解決策としては、
>リンク先を正しく閉じられていないまま次の回転に入っている
とりあえず必ず開いていると仮定して、最初に閉じる処理を噛ませばいいだけな気もする
あと個人的にだけど、untilはあんまり好きじゃない。「否定の否定」が出て来ないように注意した方が良い。あれは読みづらくなる
とりあえず応急処置として、併用してみてはどうかな。うまくいくかどうかはわからない
Do While IE.Busy Or _
IE.readyState <> READYSTATE_COMPLETE Or _
IE.document.readyState <> "complete"
DoEvents
Loop
別物だな
>>646はvbaオブジェクトのプロパティ
WebBrowserControl.ReadyState
https://docs.microsoft.com/ja-jp/office/vba/api/access.webbrowsercontrol.readystate
>>647はwebのapi
Document.readyState
https://developer.mozilla.org/ja/docs/Web/API/Document/readyState
どっちが信用できるかは分からない
どちらにしてもIEオブジェクトがどこまでwebの技術に対応してるか分からない。難しい
かなり雑な解決策としては、
>リンク先を正しく閉じられていないまま次の回転に入っている
とりあえず必ず開いていると仮定して、最初に閉じる処理を噛ませばいいだけな気もする
あと個人的にだけど、untilはあんまり好きじゃない。「否定の否定」が出て来ないように注意した方が良い。あれは読みづらくなる
とりあえず応急処置として、併用してみてはどうかな。うまくいくかどうかはわからない
Do While IE.Busy Or _
IE.readyState <> READYSTATE_COMPLETE Or _
IE.document.readyState <> "complete"
DoEvents
Loop
650デフォルトの名無しさん (ワッチョイ 9f34-0snV)
2019/03/05(火) 23:41:58.62ID:b71Efr460 IE11からreadystateもbusyも使えなくなったとかどこかで見た
利用出来ないという意味ではなくて使い物にならないという意味で
なので移動後に表示されるタブ見つけたら、とか移動後に表示される文字列を見つけたらという条件で対処してるわ
利用出来ないという意味ではなくて使い物にならないという意味で
なので移動後に表示されるタブ見つけたら、とか移動後に表示される文字列を見つけたらという条件で対処してるわ
651デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/05(火) 23:46:48.59ID:yUBkGE+g0 ここでもIEかよ・・・
652デフォルトの名無しさん (ワッチョイ bf8c-9NtP)
2019/03/05(火) 23:57:28.83ID:AE45wcOz0 逮捕されないように気をつけろ
653デフォルトの名無しさん (ワッチョイ 9701-gWFi)
2019/03/06(水) 00:08:19.97ID:qZfNBEKA0 >>646
・ IE.Busy = Trueという風に教科書通りになっていない
「if A then B」自体が既に「AがTrueならB」っていう意味だから、更に「= True」は冗長
・ フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
作者はそのつもりだったんだろうけど、Whileの条件が真になった瞬間に全ループが終わるだろうから無意味
その後何かがFalseになってもEnd Subになる
・完全にドキュメントが読み込まれるまで待機する
偶にIEの受信が終わってもDocumentが読み込み終わってない時があるから、付けたほうがいい
フレームの件も、フレーム毎にdocument.ReadyStateを待つことで解決できる(ことが多い)
>>649
VBAは短絡評価出来ないから、IE.documentが取得できないとreadyStateプロパティが見れずに参照エラーが起きるよ
先にIEを待ってから、安全策としてdocument.readyStateも確認すると安定してDOMが使える
・ IE.Busy = Trueという風に教科書通りになっていない
「if A then B」自体が既に「AがTrueならB」っていう意味だから、更に「= True」は冗長
・ フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
作者はそのつもりだったんだろうけど、Whileの条件が真になった瞬間に全ループが終わるだろうから無意味
その後何かがFalseになってもEnd Subになる
・完全にドキュメントが読み込まれるまで待機する
偶にIEの受信が終わってもDocumentが読み込み終わってない時があるから、付けたほうがいい
フレームの件も、フレーム毎にdocument.ReadyStateを待つことで解決できる(ことが多い)
>>649
VBAは短絡評価出来ないから、IE.documentが取得できないとreadyStateプロパティが見れずに参照エラーが起きるよ
先にIEを待ってから、安全策としてdocument.readyStateも確認すると安定してDOMが使える
654デフォルトの名無しさん (ワッチョイ d701-9DxJ)
2019/03/06(水) 00:12:35.24ID:M8vFX/4l0 csvを読み込む手法はいくつかありますが以下のような場合どの方法が最適でしょうか
1行1レコードになっていない(セル内改行あり)
csvが複数ありそれをすべて読み込んで集計処理がしたい
普段はデータインポートやopenで1行づつ読み込んでいましたが1行≠1レコードだと難しいのかと考えています
1行1レコードになっていない(セル内改行あり)
csvが複数ありそれをすべて読み込んで集計処理がしたい
普段はデータインポートやopenで1行づつ読み込んでいましたが1行≠1レコードだと難しいのかと考えています
655デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
2019/03/06(水) 00:17:18.56ID:0oqXehnm0656デフォルトの名無しさん (ワッチョイ 9701-gWFi)
2019/03/06(水) 00:29:35.50ID:qZfNBEKA0 >>655
既存のウインドウを触るのは初心者にとっては結構大事だよ
閉じれてないのはQuitメソッドの前に次の処理が入ってしまってるだけだと思うから、
処理が終わったと思われる場所に自分でコードを挿入したらどうだろう
既存のウインドウを触るのは初心者にとっては結構大事だよ
閉じれてないのはQuitメソッドの前に次の処理が入ってしまってるだけだと思うから、
処理が終わったと思われる場所に自分でコードを挿入したらどうだろう
657デフォルトの名無しさん (ワッチョイ 9701-gWFi)
2019/03/06(水) 00:33:49.27ID:qZfNBEKA0658デフォルトの名無しさん (ワッチョイ 9701-gWFi)
2019/03/06(水) 00:36:57.21ID:qZfNBEKA0659デフォルトの名無しさん (オッペケ Sr0b-9DxJ)
2019/03/06(水) 00:54:59.22ID:jXlQSKwgr660デフォルトの名無しさん (ワッチョイ 9f7c-sBsz)
2019/03/06(水) 01:00:18.09ID:wqRC+Uom0 >>654
replace(str,vbcrlf,"うんこ")
replace(str,vbcrlf,"うんこ")
661デフォルトの名無しさん (ワッチョイ 9701-gWFi)
2019/03/06(水) 01:08:03.42ID:qZfNBEKA0662デフォルトの名無しさん (JP 0H4f-j5yB)
2019/03/06(水) 07:35:28.45ID:3ub5rlP9H IEってBusy以外にステータスも見てないとループ抜けちゃわなかったっけ
663デフォルトの名無しさん (ラクッペ MMcb-Z6MB)
2019/03/06(水) 07:51:07.24ID:9ZQV49QQM 抜けた気がする
要素がありませんってよく怒られた
要素がありませんってよく怒られた
664デフォルトの名無しさん (スプッッ Sd3f-IK5z)
2019/03/06(水) 08:14:30.41ID:OZZFIuGOd 両方見てても抜ける時が有る。
滅多に無いけど。
例えばClickで遷移する場合に、抜けてからBusyになることがあった。
Submitに比べてClickは単純に文字通りClickするだけなので遷移しないページも有るから必ずBusyになると想定されていないと想像してる。
それ以降Clickの時は最初にSleepを入れるようにしてる。
滅多に無いけど。
例えばClickで遷移する場合に、抜けてからBusyになることがあった。
Submitに比べてClickは単純に文字通りClickするだけなので遷移しないページも有るから必ずBusyになると想定されていないと想像してる。
それ以降Clickの時は最初にSleepを入れるようにしてる。
665デフォルトの名無しさん (スプッッ Sd3f-IK5z)
2019/03/06(水) 08:20:35.12ID:OZZFIuGOd >>654
別に方法は色々あると思うけど1行ずつ読み込んでも良いんじゃない?
1行ずつでも条件に合うまで1レコードとしなければ良い。
1レコードの最後にも改行は有るんだろ。
もし1行ずつ読むなら1レコード内に複数改行が有る可能性を考慮すること。
別に方法は色々あると思うけど1行ずつ読み込んでも良いんじゃない?
1行ずつでも条件に合うまで1レコードとしなければ良い。
1レコードの最後にも改行は有るんだろ。
もし1行ずつ読むなら1レコード内に複数改行が有る可能性を考慮すること。
666デフォルトの名無しさん (ワッチョイ ff2c-Im2K)
2019/03/06(水) 08:57:22.69ID:Uli2bEJM0 >>654
Ruby では、列をダブルクオートで囲むと、その中にカンマや改行を含める事もできる。
他の仕様も含め、詳しくはRFC4180を参照
require 'csv'
p CSV.parse_line( "a,\"あ\nい\"" )
# => ["a", "あ\nい"]
\n は改行
列区切りはカンマで、外側の"〜" は文字列を表すための囲み。
内側の\"〜\" は、"〜"内での"〜"を表すため、\ でエスケープしている。列囲みを表す
a の部分は、\"〜\"で囲まなくてもよい
Ruby では、列をダブルクオートで囲むと、その中にカンマや改行を含める事もできる。
他の仕様も含め、詳しくはRFC4180を参照
require 'csv'
p CSV.parse_line( "a,\"あ\nい\"" )
# => ["a", "あ\nい"]
\n は改行
列区切りはカンマで、外側の"〜" は文字列を表すための囲み。
内側の\"〜\" は、"〜"内での"〜"を表すため、\ でエスケープしている。列囲みを表す
a の部分は、\"〜\"で囲まなくてもよい
667デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/06(水) 09:17:24.17ID:R/1sU7PR0 rubyって・・・
もう完全に終わってる言語なんだからそんなもの勧めないでよ
もう完全に終わってる言語なんだからそんなもの勧めないでよ
668デフォルトの名無しさん (ブーイモ MM1b-9NtP)
2019/03/06(水) 09:47:16.43ID:HGc0sPl8M669デフォルトの名無しさん (ワッチョイ bfab-GrE3)
2019/03/06(水) 11:28:25.04ID:p4qnJjw30 下記リンク先のページ下部にあるユーザ定義関数がVBAとして正しく書けてるかチェックして貰えませんか
https://peltiertech.com/loess-smoothing-in-excel/
https://peltiertech.com/loess-smoothing-in-excel/
670デフォルトの名無しさん (ワッチョイ bf68-W5e4)
2019/03/06(水) 11:39:12.31ID:R/1sU7PR0 >>669
どういう計算をしてるかは知らんけど、コード上は問題ない
どういう計算をしてるかは知らんけど、コード上は問題ない
671デフォルトの名無しさん (ワッチョイ bfab-GrE3)
2019/03/06(水) 15:05:39.78ID:p4qnJjw30 多分スレチだろうと思いますが、>>669をLibreoffice最新版に実装したところ戻り値に=LOESS(x,y,z,n)で指定したyの配列がそのまま表示されたのでコードどこか間違ってるか仕様変更したのを俺が見落としてるのかなと思って聞きました
ありがとうございました
ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【悲報】日本人「日本が中国と戦争になったら世界中の国が応援してくれるぞ!」 [616817505]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【ほんこん悲報】吉本新喜劇の中国公演が中止に! [523957489]
