Excel VBA 質問スレ Part60

■ このスレッドは過去ログ倉庫に格納されています
2019/03/16(土) 20:39:09.64ID:6HWXzj9o
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part59
https://mevius.5ch.net/test/read.cgi/tech/1549692750/
2019/04/18(木) 13:36:25.79ID:/sUch5Kf
自分の理解で合ってるか確認したいんだけど再利用性高いてのは決め打ち無くして例えば引数とかで使えるようにしてモジュールなりを使い回せる状態
だけども再利用性ない部分(呼び出し元?main?)を作らないといけない限りこれ1つあればどの業務、案件でも使える!てことにはならない
ライブラリ化?とか再利用性を高めることは出来るけど中々難しく初心者には険しい
て感じでおけ?
2019/04/18(木) 15:07:10.61ID:66UDqgKZ
>>750
ライブラリと業務寄りアプリの難しさは別種のもので初心者にはどっちも難しい。
とはいえライブラリは小さな便利ツールをピンポイントで一個一個作っていくことができる点で
ハードルが低い面はある。
752デフォルトの名無しさん
垢版 |
2019/04/18(木) 15:19:41.42ID:YY/ze1GU
無理だと言うやつには無理のんだろう
汎用性の高いのは別に問題ないのでは?エクセル自体はどの部署でも使ってるんだから追加でどこまで機能を絞るか縛りを緩くするかの問題でしょ
2019/04/18(木) 16:05:19.35ID:FYzqO+ri
プログラム板の他スレじゃ相手にされない半端者がここならドヤ顔で語れるだろうって調子に乗ってて草
754デフォルトの名無しさん
垢版 |
2019/04/18(木) 17:34:24.27ID:Mwk0+ScA
他プログラムはサンプルや情報が多いからVBAより簡単に現象を獲得できる
755デフォルトの名無しさん
垢版 |
2019/04/18(木) 17:41:24.05ID:Mwk0+ScA
そもそも他言語はシンプルだしVSならガッツリとインテリセンスが効くから簡単に書けて工数も少なくて済む
文法もVBAは難しい部類
2019/04/18(木) 21:55:37.18ID:CoHPfDW+
難しいというか不合理なんだよな
内包表記やヌル安全やモナドみたいに別に難しい概念があるわけでは無い
2019/04/18(木) 22:12:05.40ID:sbpDgPak
完全な言語なんて存在しないし作るのも不可能
2019/04/18(木) 22:18:06.03ID:rY75T8tq
>>757
小学生みたいな発想スね
2019/04/18(木) 22:25:43.62ID:NyxG62A4
漠然とした話からは何も産まれない
2019/04/18(木) 23:02:30.65ID:ZviCYbcp
マクロでブック開くと、データ量が多いブックの場合開き終わるまで拘束されてしまう。
開き終わってセルに書き込みできるまでに他の処理をさせたい

if application.Ready=False then
(その間にやる処理)
endif

こんな感じに、開くまでの間になにか処理をさせたいのです。
なにかできる方法があったら教えてください
その重いブックは自分で作ったものじゃなくてすぐに改善はできない状況です
よろしくお願いします
2019/04/18(木) 23:26:59.03ID:1fisAtwZ
一瞬、マクロを実行するファイルそのものを開く時の待ち時間かと思ったわ。
VBAじゃなくて、VBSで開かせるなら出来なくもなさそうだけど。
762デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:32:51.10ID:RfIDmYfE
VBAやUWSCのプログラムちょっとできる程度なんだが組み込みのソフトウェア部に転身しろと先輩から言われる。
ちなみに今は製造部の使えないやつ扱いをうけている模様。
これは辞めろってことか
2019/04/18(木) 23:38:14.35ID:rY75T8tq
>>762
現場が分かるシステムが欲しいんだろう
かなり必要とされてるように見える。行ってみたら良いだろう
いずれ製造なんて自動化でなくなる部門何だしている
2019/04/18(木) 23:39:24.29ID:ycswSyUn
>>760
他の処理ってのがExcel操作だったら無理
ExcelはSTAのCOMなので複数のスレッドからアクセスしても常にタスクを直列にシリアライズして逐次処理する
一個の処理で詰まると後が渋滞するだけ
Officeの他のアプリのVBAとかPowerShellとかJSとかVBSとか、別の言語のプログラムをキックして他のエンジンで処理を実行させることは可能
後でウィンドウなりファイルなりにアクセスすれば処理結果も取れるし
765デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:42:06.58ID:RfIDmYfE
>>763
ありがとう。
その自動化するための機械作ってるのがうちの会社なんだよね。
機械のソフトウェアだからCとかパイソンになるのかな?
一応情報卒なんだけど自信ないよ
2019/04/18(木) 23:47:17.30ID:NyxG62A4
>>765
何で遅いか調べないの?
外部リンクとか、シート間参照が多いとか
2019/04/18(木) 23:47:45.92ID:rY75T8tq
>>765
そうなのか
言語は多分C辺り、pythonは無いと思う
一度面談受けたら?分からない事がさすがに多すぎる
2019/04/18(木) 23:50:56.85ID:NyxG62A4
>>766
すまんアンカー間違えた
769デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:51:11.62ID:RfIDmYfE
>>767
Cだよなぁ、ポインタで挫折しちゃったけいけんがあるんだよなぁ。数字の羅列はやってても楽しくないんだよなぁ。グラフィックに実行結果出ないとつまらないんだよなぁ。
でも一生製造で終わりたくはないし…話ししてみようかなサンクス
770デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:51:26.61ID:RfIDmYfE
>>768
ええんやで
2019/04/18(木) 23:59:44.00ID:tULlneIt
>>764
Excel.Application複数起動してもダメなの?
2019/04/19(金) 05:04:11.19ID:F+IfR3tb
accessのテーブルに接続するデータテーブルをVBAでrefreshallした時に、
読み込み完了前に次の処理に進むのを止めることできますか?
stopで一時的に止めればいけるけれど、読み込み完了後に次処理に自動的に
進めたいです。
2019/04/19(金) 08:11:56.05ID:WxAK0tT/
>>771
たぶんできる。
>>764は思慮が足らないと思う。
774デフォルトの名無しさん
垢版 |
2019/04/19(金) 10:27:04.15ID:L5evqwYE
>>773
Excel2010までは簡単だったがExcel2013から複数インスタンスの起動は難しくなったようだな
ただ、所詮重い処理をそのままにして複数起動してももっと重くなるよな

そもそも、重い原因を確認しないと、自動計算を止めれば早くなる可能性もあるが
それをやっていいかもわからん
2019/04/19(金) 11:03:21.04ID:Bg8kiXU6
正直、余計なことをせずに静観しておいたほうが良い気はする
2019/04/19(金) 11:49:18.40ID:tnpUi0yI
これもそうだな 漠然とした話からは何も産まれない
2019/04/19(金) 13:51:24.35ID:ZnDHFpRl
けどこのスレの人間って、無駄話で罵り合いするの好きだよね w
2019/04/19(金) 14:22:48.38ID:L5evqwYE
漠然とした話から連想ゲームして、自分語りを始める
で、好きな事違うから無駄な話が続くんでない
2019/04/19(金) 15:58:50.09ID:k3MrA8ng
VBA界には有名人がいないから、いじる対象がないってのもある
他言語だとコミュニティの顔みたいな存在がちらほらいるけどVBAは活動自体ないからな
780デフォルトの名無しさん
垢版 |
2019/04/19(金) 18:35:20.89ID:bifIXaiQ
ないねぇ
オープンマインドじゃないし自分の考えが正論だと信じ込んでるから新しい発想は受け入れないもん
全部排除
2019/04/19(金) 19:33:45.34ID:F+IfR3tb
>>772
解決しました
2019/04/19(金) 21:09:28.46ID:+TCHgQUv
書道家にWord使ったほうが早いのにとか言っても仕方ないだろ?
VBAは伝統芸能なんだよ
2019/04/19(金) 21:28:42.21ID:hMAGCQp2
書道家だってWordくらい使うだろ
2019/04/19(金) 21:31:43.30ID:GnXLTXUb
しょれはどうか?
しょどうか?
2019/04/19(金) 22:09:23.17ID:muLZwW/F
>>780
オープンマインドってなんですか?
2019/04/20(土) 00:10:38.45ID:xcWVlBQQ
昇順で並べたデータ(日付など)の変わり目に一行挿入を繰り返すマクロは作れるかな?
セルの差分の列を作って0でないところに行挿入を考えてるんだが、他に何かないでしょうか先生方
2019/04/20(土) 00:19:14.02ID:qwsd80fG
>>786
上下のセルの内容が同じじゃなかったら挿入
2019/04/20(土) 00:30:38.72ID:xcWVlBQQ
>>787
これは早速素晴らしい案をありがとう!よほどシンプルに行けるわ
2019/04/20(土) 00:41:38.87ID:lNRl64h3
>>788
念の為、
for i 最終行 to 2 step -1
で回すんだぞ
790デフォルトの名無しさん
垢版 |
2019/04/20(土) 01:43:17.46ID:ojpyozsg
このスレだとプログラマではないひとの質問が書かれるか。
2019/04/20(土) 02:10:30.65ID:SAylvlqW
>>789
行がずれるから逆から回すということかな、助かりますありがとう!
2019/04/20(土) 02:37:10.84ID:lNRl64h3
>>790
そりゃそうだろう
vba使う層って事務のにーちゃんねーちゃん+できる営業マンが片手間に使うぐらい
793デフォルトの名無しさん
垢版 |
2019/04/20(土) 06:25:29.61ID:X4+f+v7V
VBAをプログラムだと思ってる人はいない
2019/04/20(土) 07:10:53.95ID:ZcIJD8m+
きみの勝手な思い込みだよ、
と思われたくないなら客観的な根拠をあげた方がいいね
2019/04/20(土) 08:13:49.91ID:tWWHyzwg
エクセルの画面が右上に飛んで行って、
画面に「どこいくね〜ん!」って表示させるのはどうでしょう?
2019/04/20(土) 08:27:11.00ID:9HZyCDJw
>>779
居るだろ。
君が知らないだけじゃね?
パッと10人くらいは思いつく。
797デフォルトの名無しさん
垢版 |
2019/04/20(土) 09:01:22.69ID:Khb9FcyX
>>796
例えば誰?
2019/04/20(土) 10:40:51.92ID:50ElbllH
>>797
聞いちゃいけない事ってあるだろ、ニタニタで我慢しろよ
2019/04/20(土) 11:00:20.54ID:hWWI2xiJ
どうせtwitterのキーワード検索にVBAって入れて出てきたやつとt.tanakaぐらいだろうよ
2019/04/20(土) 11:38:03.85ID:9HZyCDJw
Office田中さんはその内の1人だね。
あとはA○○○さん、k○○○○○○さん、魔○○○○○○さん、じ○○○○○○さん、熊○○○さん、K○○さん、き○○○さん、s○○○○さん、y○○○○○○さん、Y○○○○○○さんとか。

き○○○さんは今も活躍されてるけど今は見かけなくなった人が多いけどね。
.netの方へ移動された人もいるし。
ここ数年でVBAやりはじめた人じゃ知らないのも無理無いが。
2019/04/20(土) 11:40:06.78ID:9HZyCDJw
ああ、A○○○さんはA○○○○さんだった。
今はA○○○○○さんかな。
2019/04/20(土) 11:47:01.11ID:hWWI2xiJ
>>800
T○○○さんもI○○○○さんもいないじゃないか
2019/04/20(土) 11:49:12.54ID:lNRl64h3
名前は覚えてないな
サイト見たら大体思い出す
2019/04/20(土) 11:50:13.86ID:lNRl64h3
Office田中はサイトの修正点を送っても反映してくれないのがネック
後続のためにも直してくれ〜
2019/04/20(土) 12:06:15.09ID:hWWI2xiJ
解説系とライブラリ提供系に分けられるがそれなりに有用
しかしコミュニティを形成してるかと言うとちょっと
2019/04/20(土) 12:20:16.39ID:9HZyCDJw
>>802
I○○○○さんは想像つく。
けど、俺がいた所じゃ見かけたことが無い。
そういやtwitterで発言されてるらしいけど、俺VBA関連はtwitter見て無いんでな。
T○○○さんは想像つかないな。

田中さんは有名人だけどあの人のサイトでは教わることは無いな。
基本的に全て知ってることだから。
でも>>800で挙げた人達は全員俺よりかなりレベルが上だ。
807デフォルトの名無しさん
垢版 |
2019/04/20(土) 12:22:08.90ID:n0GthIX7
VBAのworksheetfunction.vlookup関数で
該当の値がないときエラーを回避してそこの処理は無視させるにはどんなコードを書けばいいですか?
該当なしだと問答無用でエラーが出て止まってしまう。
2019/04/20(土) 12:27:26.17ID:9HZyCDJw
>>807
>>423からの流れを読んでね。
2019/04/20(土) 12:29:15.35ID:lNRl64h3
>>807
'forなどで回す時はラベル付けて飛ばす
Sub foo()
On Error GoTo err
For i = 1 To 5
bar = WorksheetFunction.VLookup(1, Range("a1"), 1, 0)
'エラーじゃない時の処理
err:
'共通の処理。無ければ何も書かない
Next
End Sub

'使い捨てプログラムならonerrorで囲んでしまうという手もあるが、あまりオススメできない
Sub foo()
On Error Resume Next 'エラーを無視
bar = WorksheetFunction.VLookup(1, Range("a1"), 1, 0)
On Error GoTo 0 '無視を無効化
End Sub
2019/04/20(土) 12:43:34.58ID:50ElbllH
>>809
お前ね何度書けば・・・
Sub foo()
On Error GoTo err
For i = 1 To 5
bar = WorksheetFunction.VLookup(1, Range("a1"), 1, 0)
'エラーじゃない時の処理
goto 共通
err:
ERR時の処理
共通:
'共通の処理。無ければ何も書かない
Next
End Sub
2019/04/20(土) 13:02:36.97ID:lNRl64h3
>>810
ちゅまん
2019/04/20(土) 13:23:10.42ID:50ElbllH
>>811
てか、WorksheetFunction.VLookup(1, Range("a1"), 1, 0)
見過ごしたけど、これ何?
2019/04/20(土) 14:04:44.42ID:lNRl64h3
>>812
引数を適当に入れただけ
2019/04/20(土) 14:36:59.58ID:tWWHyzwg
>>807
Trueならエラー起きないんじゃない?
815807
垢版 |
2019/04/20(土) 15:39:14.34ID:J0kjNxAu
on errorはセンスがないように感じるのですが。
わたしのセンスがon errorを使うことを許しません。
どうしたらいいですか?
こんなとき定番のような方法はないですか?
816デフォルトの名無しさん
垢版 |
2019/04/20(土) 15:49:30.44ID:Khb9FcyX
on errorで問題ないならそれで良いじゃん
そんな瑣末な事に時間を使わずにもっと生産性のある事に時間を使って組織や社会に貢献して下さい
2019/04/20(土) 15:56:13.97ID:9HZyCDJw
On Errorを使うのがセンス無い?
何処の初心者だ?

想定された動作なのに一緒くたにするのが嫌というならOn Errorの使い方を知らないだけだろ。
2019/04/20(土) 15:56:41.52ID:tgvbScEy
>>815
センスとか気になるならVBAに関わるのは止めた方が良いよ
2019/04/20(土) 15:58:32.36ID:tgvbScEy
>>815
ID:9HZyCDJwのキチガイが起こってるぞw
2019/04/20(土) 16:10:16.59ID:9HZyCDJw
>>819
センスの無いお前には言われたくね―なw
2019/04/20(土) 16:44:47.04ID:lNRl64h3
vbaにtrycatchが無い以上、onerrorで分岐するしかない
ただ今回に限って言えば、ワークシートにvlookup()を入れてその結果で分岐させることは可能
2019/04/20(土) 17:45:57.42ID:V7SrR6WW
こんな方法もある

Range("Z1") = WorksheetFunction.VLookup( 略 )

結果をどこか空いてるセルに入れてしまえば、エラーでも止まらずに結果を判定することができる
もうひとつ、試したことはないけど

WorksheetFunction.Iferror( WorksheetFunction.Vlookup ( 略

みたいな方法でもエラーで停止するのを回避できそうな気がするけど、Vlookupで止まるかなあ
2019/04/20(土) 17:53:15.47ID:V7SrR6WW
>>822
間違えた
こうだった
Range("Z1") = Application.VLookup( 略 )
2019/04/20(土) 17:58:05.16ID:yRp1LpZz
ちゃんとエラー番号調べて処理すりゃ良いだろ
2019/04/20(土) 18:00:15.98ID:KuIF036/
>>823
なんでセル
変数でいいじゃん
2019/04/20(土) 19:12:25.83ID:tWWHyzwg
じゃあLeft Outer Joinで。
2019/04/20(土) 19:43:05.64ID:qwsd80fG
>>807
・VlookupじゃなくてFindを使う
・事前にcountifとかエラー値が返らないもので存在確認してから使う
・worksheetfunctionの代わりにApplication.VLookupを使うと見つからなかった場合N/Aが返るが、旧バージョンの命令だからあまりおすすめしない
2019/04/21(日) 10:03:39.80ID:fPscZosh
質問者は、もっと具体的に書くべきだな、対応方法は多種多様にあるから
質問に対するベストな回答が、質問者の意図するベストの回答とは限らん
2019/04/21(日) 15:50:42.83ID:4kO5c1T5
もうね、On Error Resume Nextが嫌とか、宗教だと思うんですよ。
830デフォルトの名無しさん
垢版 |
2019/04/21(日) 15:59:22.44ID:IGJB+uLA
んて訳の分からん面倒なコードを書くとかキチってるよね
2019/04/21(日) 16:03:59.70ID:h3OWzsvU
>>829
でも配列の次元すらOn Error 使わないと求められないってひどくないですか?
2019/04/21(日) 16:50:25.73ID:7jtZEDKn
>>831
何も分かってないんだから大人しく使いなよ
2019/04/21(日) 17:30:52.05ID:fXlSQHRa
>>832
ほう、じゃやり方を教えてくれよ
2019/04/21(日) 17:35:25.49ID:7jtZEDKn
>>833

だから文句言わずにonerrorを使えば良いだけなんだが
2019/04/21(日) 17:37:30.55ID:VJZKP3mE
>>831
お前の言ってることは結局、コ−ド書かないと動かないって酷くないですかってのと同じ。
2019/04/21(日) 17:51:22.14ID:fXlSQHRa
>>834
アスペか?
配列の次元を取得するのにOn Errorを使うなどという事自体は酷い。これは事実だ。
それに対して「何も分かってない」とdisる以上、On Errorを使わない真っ当な方法があると解釈するのが当然のこと。
2019/04/21(日) 18:06:20.94ID:jEVddS48
そこじゃないよ
vbaの酷い点はtrycatchが無い事
2019/04/21(日) 18:15:35.13ID:VJZKP3mE
>>836
酷い?なぜ?
と言ってるんだろう。
2019/04/21(日) 18:15:57.22ID:hbj2KyMO
客見ずにマウント取り合いってツルッパゲのする事 産毛すら無い
2019/04/21(日) 18:16:48.81ID:blm05+38
>>835
流石にそれはないわ
VB.NETやC#は普通にプロパティあるし
2019/04/21(日) 18:17:02.42ID:VJZKP3mE
>>837
書き方の問題じゃね?
実質同じことが出来るんじゃないの?
2019/04/21(日) 18:19:22.95ID:VJZKP3mE
>>840
それはVBAに無いものをあげつらっているだけ。
VB.netやC#に無いものをあげつらうことも出来るだろ。

そもそも何が酷いのかサッパリ分からん。
2019/04/21(日) 18:26:29.16ID:fXlSQHRa
On Error とか例外機構っていうのは、メモリ不足とかファイルの不在なんかのソフトウェア的には想定しづらい
例外的な事象に使うものなんだよ。
例えば「関数引数に対する事前条件がもし守られていなかったら」なんていう
ソフトウェア的に想定できるような事には例外を使うのべきじゃない。
ましてや配列の次元の取得なんてことに使うのは「ひどい」としか言いようがない。
それはセンスとかの問題じゃなくて常識だと思うよ。
2019/04/21(日) 18:33:13.89ID:VJZKP3mE
>>843
で?
何が酷いの?
2019/04/21(日) 18:33:17.05ID:uW2zy1zl
>>842
> そもそも何が酷いのかサッパリ分からん。
まじで言ってるの?
2019/04/21(日) 18:35:05.76ID:KjSHT9nF
もともと有る機能を組み合わせて
目的の動作をするように作るしかない
2019/04/21(日) 18:42:35.76ID:vxMMLTMP
>>845
そういう返しじゃなくて、教えてやれば
2019/04/21(日) 18:47:06.02ID:VJZKP3mE
例えば昔仕事で扱ったWin32APIのGetPrinterでは取得するPinterInfo2構造体のサイズを0にして渡して敢えて失敗させることによって正しい構造体のサイズを取得するなんてのがある。
再度正しいサイズで実行するやり方が想定されていて、そして失敗時はdllエラーも当然発生するなんてのが有るわけなんだが。

確かDevmode構造体を取得するする時に使うDocumentPropertiesも同じような使い方してたと思う。
2019/04/21(日) 18:48:35.29ID:VJZKP3mE
>>845
結局取得できる。
何も問題無い。

お前のオナニー以外は。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況