Excel VBA 質問スレ Part64

■ このスレッドは過去ログ倉庫に格納されています
2019/12/02(月) 23:43:54.18ID:ngrqyTy20
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part63
https://mevius.5ch.net/test/read.cgi/tech/1568630099/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/02/15(土) 17:13:03.49ID:Lm2T2Naqd
>>614
例えば、VBSからVBAを呼び出し、VBA経由でWin32APIを呼び出す。

VBAからShell関数で別exeを呼び出し、そのexeはtxtファイルを残すように作成されており、そのtxtファイルの内容を見て連携する。

あるフォルダを常に監視するプログラムが動いており、そのフォルダにファイルが置かれると其れを読んで動作するプログラムがある。別のプログラムがそのフォルダに指示するファイルを置いて連携する。

どれも、仕方なくそういうプログラムを書くことがある。
しかし、こういうピタゴラスイッチのようなシステムは汚い。
1言語で完結する方が良いのは明らかだ。
そんなこともわからない奴は素養が無い。
動けば良いなんて考えの奴とは組みたく無いね。
スパゲッティで炎上案件必至だ。
2020/02/15(土) 17:32:31.69ID:w0AGl45A0
>>615
そういうシステムの場合は1言語で完結する方がいいって?
1言語でもやりたくないな
プロセス毎に担当とかならいいが
2020/02/15(土) 17:34:00.99ID:w0AGl45A0
そのプロセス毎に言語が違って余計な手間が増えるのも非効率だな
2020/02/15(土) 18:20:20.91ID:0SWjbLN40
>>615
>どれも、仕方なくそういうプログラムを書くことがある。
そんなプログラム仕方なくでも書くな
たからそんな頓珍漢なシステムしか作れないんだよ
素養なさすぎでしょ
2020/02/15(土) 18:27:08.22ID:Lm2T2Naqd
>>618
だから>>597が正にそれだろw
バカがwww
2020/02/15(土) 18:27:51.31ID:Lm2T2Naqd
こっちの主旨も伝わらないとはねw
2020/02/15(土) 18:33:14.64ID:8KFvWLo00
ググルのスプレッドシートってまだまだだねぇ・・・
Excelの完成度の高い操作性に慣れると、あんなの使ってらんねーわ・・・
2020/02/15(土) 19:16:30.13ID:OXybc0Po0
あれはGoogleのAPIを使いたい時用。
2020/02/15(土) 19:16:36.07ID:0SWjbLN40
>>619
>>594は糞ではないが>>615は糞
極端なものしか語れない/作れないの?
素養無いね。いやマジで
2020/02/15(土) 20:04:11.40ID:Lm2T2Naqd
>>623
まだ伝わってね―のかよ。
>>615は糞の例だっちゅうのw

Excel起動した状態で、わざわざ別言語呼び出すのも基本的に同じだ。
2020/02/15(土) 20:27:26.64ID:Lm2T2Naqd
ちなみに、俺は実際には>>615のようなものを仕事で書いたことは無い。
しかし、世の中には>>615のような腐ったのはあったりする。
>>615の内の1つは俺がネットワーク系のコード書いてた時にある技術的課題をすぐにクリア出来なかった時に上司や他のメンバーから提案されたものだ。

結局、Win32APIで何とかしたが。
2020/02/15(土) 20:46:44.54ID:0SWjbLN40
自分でも書かないような極端な事例を勝手に出してそれに対してマウントとるオナニー気持ちいい?
コミュニケーションの素養も無いね
2020/02/15(土) 21:00:26.03ID:Lm2T2Naqd
>>626
プッw
話を変えようとしても無駄。

Excel起動した状態で、わざわざ別言語呼び出すのも糞。
2020/02/15(土) 21:02:22.67ID:Lm2T2Naqd
ちなみに、極端でも無いのは上司や他メンバーが提案したことからも明らかだが。
糞だけど実際にはそんな事例は結構ある。
2020/02/15(土) 22:00:26.34ID:0SWjbLN40
>>627
それは糞ではない
2020/02/15(土) 22:13:15.78ID:Lm2T2Naqd
>>629
プッ
センス無いなあw
2020/02/15(土) 22:30:05.36ID:0SWjbLN40
>>630
素養って言葉使うのやめたの?
2020/02/15(土) 22:51:41.05ID:Lm2T2Naqd
>>631
プw
2020/02/15(土) 22:54:09.55ID:K8Q8SzUI0
横からだけど
VBAでは足りないことが多いし、言語も冗長でできれば書きたくない言語
けど、気持ちは分かるわ。自分もエクセル神、VBA最強と思ってた時期があったw
634デフォルトの名無しさん (ワッチョイ c2eb-GUQA)
垢版 |
2020/02/15(土) 23:04:02.01ID:DNF/C+cP0
よろしくお願いします。

A1からA500まで順に走査し、セルの値が「あ」「い」「う」「え」「お」のいずれかなら同行のB列に「OK」と書く

こういう命令を書きたいのですが、
if ws.cells(row,1)="あ" or ws.cells(row,1)="い" or ws.cells(row,1)="う" or ws.cells(row,1)="え" … then
という書き方しかしりません。

たぶん、
「セルの値が「あ、い、う、え、お」のどれかの場合は、」という書き方があるんじゃないかと思います。
ひとつひとつORで並べるんじゃなくて、そのように書くにはどうすればよいのでしょうか?
教えてください。
2020/02/15(土) 23:28:52.14ID:UxF7uCH30
select case a
case "あ","い","う","え","お"
cells (i,j) = "OK"
end select
2020/02/15(土) 23:41:20.13ID:DNF/C+cP0
>>635
ありがとうございました!!
637デフォルトの名無しさん (ワッチョイ 1f94-NAxV)
垢版 |
2020/02/16(日) 01:36:16.88ID:hu3zE7F/0
そもそも他言語使うのにエクセルシートを開くのがダサい
2020/02/16(日) 05:43:51.26ID:UuI8sGIrM
pythonでもjsでもいいからさっさとVBA廃止して欲しいわ
2020/02/16(日) 06:57:36.74ID:v3JJWFtt0
使わなけりゃいいのに
640デフォルトの名無しさん (スプッッ Sd32-NAxV)
垢版 |
2020/02/16(日) 07:30:58.53ID:G5lQpk7Jd
VBAを使ってるって人に言うのが恥ずかしい
2020/02/16(日) 09:18:13.09ID:1S/Tig2+0
VBAアレルギーがこのスレにいるのが恥ずかしい
2020/02/16(日) 09:39:35.57ID:qdCD1uit0
VBAよく使うし便利なんだけど嫌われている理由って何?
2020/02/16(日) 10:08:05.95ID:+qE5f9v2a
>>642
出来る人が多くなると自慢にならない
2020/02/16(日) 11:01:43.69ID:U1tPq90o0
>>642
いつ切り捨てられるかわからないストレスの反動
2020/02/16(日) 13:09:01.06ID:tByZLPoS0
>>642
アンチがうるさいだけ
2020/02/16(日) 13:21:44.77ID:qdCD1uit0
最先端を追っかけて一般に広がったらダサく見えちゃう人のパターン?
2020/02/16(日) 13:46:18.68ID:onfJSXj2a
使いこなせないけどとりあえずスカラー使っとけばマウント取れるという風潮
2020/02/16(日) 13:54:18.04ID:gXg/oo9KM
スカラーってなぁに?
649デフォルトの名無しさん (ワッチョイ b7f1-pc6R)
垢版 |
2020/02/16(日) 14:33:37.03ID:OOULfQDL0
オナラを音を出さずにする人のこと
2020/02/16(日) 14:49:07.22ID:myP/3poOM
>>642
言語仕様が古臭すぎる
モダンな便利な仕組みが使えないしデフォルトの関数やライブラリも貧弱
Excelっていう表を使うのにリスト周りの機能が劣悪なのが個人的に最高に糞
sortやfilter、mapぐらいは用意しといてくれ
2020/02/16(日) 17:03:22.19ID:crcHCgfv0
Excelは神じゃないし、VBAも別に古くないなんて言わない。
でも、VBAを使う場合では他に選択肢が無い。
他のモダンな言語使ってダサさ極まりないプログラムを書くことになる。

Excelを介さずにExcelのファイル作る場合ではVBAはお呼びじゃ無いし、Excelを介して何かする場合はVBA以外がダサイプログラムとなる。
2020/02/16(日) 17:23:12.06ID:bd16la8D0
だよな
VBAでIE操作するなんてダッサイよな
Excel VBAでWord操作するなんてもっての外だ
653デフォルトの名無しさん (ワッチョイ b7f1-pc6R)
垢版 |
2020/02/16(日) 17:37:11.50ID:OOULfQDL0
>>651
日本語を
2020/02/16(日) 19:45:47.28ID:264B3TMP0
それはVBAでIEを操作したいんじゃなくて、
取り出したデータをシートに書き込みたいからVBAなんだよ。
2020/02/16(日) 20:02:56.16ID:bd16la8D0
pythonでExcelを操作したいんじゃなくてpythonで弄ったデータをシートに書き込みたいからWin32APIなんだよ
2020/02/16(日) 20:46:33.79ID:YpWFdUlV0
>>648
しめつけ痴漢ビームだろ
2020/02/17(月) 17:50:27.95ID:vNEYHF2AM
VBAはコレクションが貧弱すぎ
そしてVBの言語仕様が大嫌い
2020/02/17(月) 18:40:54.09ID:Pe28e1YX0
ちょっとそれ詳しく
2020/02/18(火) 03:35:58.54ID:TF8ZYXaL0
VBAに継承があったら、もっと楽しくコード書けるのになあ
2020/02/18(火) 06:20:13.81ID:8hbClqqAx
クラスはサポートしてるのに継承がなくてポリモーフィズムしか使えないからね
クラスを作るのが面倒で仕方ない
2020/02/18(火) 07:31:23.14ID:EfyTSHg3M
せめてコンストラクタ(VBAだとInitialize)の引数は欲しかったわ
2020/02/18(火) 10:24:05.40ID:6ZsCABKsa
良くわからないんだがexcelに必要か?
2020/02/18(火) 13:47:20.72ID:chdQR5M40
excelが必要か?に見えた
2020/02/18(火) 18:45:59.17ID:/5Mxz8ykd
CADで書いたデータをDXFにしてメモ帳で開いて読み取って、エクセルシートにオートシェイプで書いたんですが、円の中にテキストがあるやつのみグループ化したいんですがいい方法ありますか?

調べると座標点から追ってみたいな方法しかないですか?
2020/02/18(火) 21:01:24.57ID:F3RpBkgw0
自分の仕事くらい自力でやれば?
2020/02/18(火) 21:11:50.33ID:YCW0Xx5j0
>>659-660
継承は愚策であることが判明しているのでは?継承よりも委譲をつかいなしあ
2020/02/19(水) 19:57:26.16ID:mzzoJTJv0
VBAよりpythonの方が実行速度が速いなら使ってもいいが、そうじゃないんだろ?
2020/02/19(水) 21:51:44.49ID:kwCZcDbv0
マクロの実行速度なんてほぼExcel側で決まるんだから言語変わっても変わるわけないだろ
そもそもたかがExcelのマクロに実効速度とか要求するか?
2020/02/19(水) 22:21:56.27ID:mzzoJTJv0
ん、いや、pythonに何かしらメリットがなきゃ、乗り換える意味なんてないよなと思って。
2020/02/19(水) 23:50:48.47ID:IiRLq+jSM
VBA使わなくていいっていう最大のメリットが
2020/02/19(水) 23:58:20.17ID:FWuAEXxDa
VBAがないなら もうWindowsを使う意味はないってユーザーも多いのでは
2020/02/20(木) 00:18:21.99ID:AoQGP1nv0
手作業で数式を入れるだけならオンラインのスプレッドシートで十分だもんな
2020/02/20(木) 06:08:18.51ID:L/aFoY2Cr
スプシでネイティブアプリ並の速度でかつVBAが使えれば言うことないんだけど
2020/02/20(木) 06:43:28.49ID:2rLj+nIZM
>>669
お前さんがメリットないと思えばそのままでいいんじゃね?
俺はpythonなら乗換えるよ
理由は>>659-661辺りに書いてある通り
675デフォルトの名無しさん (ワッチョイ 737c-3FYl)
垢版 |
2020/02/20(木) 07:44:40.62ID:D4QlVP2L0
端末にPythonインストールされてないし使えない。
2020/02/20(木) 12:18:14.02ID:IgUrfnDG0
っていうかPythonつかうならVB.netでいいんじゃないの??
C#でもいいし。
2020/02/20(木) 12:52:29.82ID:2rLj+nIZM
>>638の話じゃないのか?
現状ならそりゃVBA使うしかないわけで
外部から制御するならC#でもPowerShellでもいいわな
2020/02/20(木) 19:50:27.27ID:oaOtGalk0
Excel VBAスレでpython信者が何いってもねw
2020/02/20(木) 22:25:17.20ID:Gh4fiqHN0
エクセル中心でやりたいことはvbaでも十分だよ
何かの作業のほんの一部にエクセル使うときは、そもそもエクセルをフレームワークとして使うこと自体間違ってる
2020/02/21(金) 21:53:28.61ID:pWRsPetz0
得ろサイトの動画や画像を根こそぎゲットするためにサイトの解析してるんだけど
ソースにないリンク(javaとかで生成されたリンク)ってVBAで取得できるの?
2020/02/22(土) 02:17:27.01ID:MTp4jPgj0
>>680
サイトごとに画像ファイルのデータベースの作りが違うから、不可能じゃないけどかなり面倒
画像のURLのパターンを調べるだけなら既成のアプリでパケットキャプチャしたり、自動運転してフラウザのキャッシュから拾った方が早い

エロサイトスクレイピングの最大の問題は、サイトの解析に夢中になるあまり、抜いてないのに疲れて賢者モードになってしまうこと
2020/02/22(土) 02:26:26.53ID:/4ot1EkTM
そういうのは、いつのまにかダウンロードが目的になってしまう
大量の画像を一気にゲットしても99%は好みじゃないから、どうせ見ないよ
683デフォルトの名無しさん (スップ Sd1f-ftqI)
垢版 |
2020/02/22(土) 03:41:31.80ID:ksAsfwMgd
VBAでする必要ある?
会社の事務作業に必要?
2020/02/22(土) 13:58:35.37ID:qQaAG+8d0
漏れは、スクレイピングは、Ruby, Selenium WebDriver, Nokogiri を使うけど、
各サイトの解析が大変

例えば、5ch の投稿から画像ファイルだけを探すのに、
「div.message a」内のURL で、拡張子が「png jpg jpeg gif」のものだけを絞り込むとか、
こういう処理を、VBA で書くのは辛い

可読性が高い、Rubyなどを使わないと面倒
2020/02/22(土) 18:55:32.50ID:VWTN01Wl0
>>684
5chで探すとグロと宣伝の同じ画像だらけで集める意味ないとおもう
2020/02/22(土) 20:40:32.07ID:CpuGABtnd
>>684
VBAでも簡単だけどな。
というか、世の中のスクレイピング見てると随分テキトーだなと思うね。
ページ内のタグ1つ1つをごっそり取ってくる処理書ければ、絞りこむ方法なんて簡単だろ。
どっちにしろ、スクレイピングなんて初心者とは言わないが、その程度の話。
情報なんてゴマンと有るんだから。
687デフォルトの名無しさん (スップ Sd1f-icXw)
垢版 |
2020/02/23(日) 00:38:51.54ID:jVAo1XvKd
jsonから動的にHTMLを生成するページだとjsonファイルのURLを調べるのが面倒
そのままソースには書いてないことも多いし
2020/02/23(日) 03:39:39.65ID:DZYqUxJ90
Ruby使いは画像収集家なのかご苦労様
2020/02/23(日) 04:26:11.00ID:K7fXFWfL0
VBAちょっと触ってみたけど難しいね
書き方独特すぎてちょっときつい
2020/02/23(日) 06:38:50.97ID:wq/R6u2w0
VBAが独特って日頃どんな言語使ってるんだ…
691デフォルトの名無しさん (スップ Sd1f-ftqI)
垢版 |
2020/02/23(日) 07:12:19.53ID:FxSnKpMed
独特と言うか構文が長くて繰り返しが多い
2020/02/23(日) 07:15:28.16ID:/TUwZlyEa
いじめられっ子VBA
2020/02/23(日) 07:35:03.32ID:+eBIvQNk0
>>681
やっぱ面倒か、諦めよ
ありがとう
2020/02/23(日) 07:46:27.78ID:unOBnpssx
[VBA]
Dim str As String: str = "hoge"

[VB.NET]
Dim str As String = "hoge"

[Java,C# その他]
string str = "hoge";

まぁ確かにVBAは冗長で繰り返し多いわな
If Then構文もThen書かせるなと思うし
2020/02/23(日) 08:19:14.23ID:hlUaoTwd0
コンストだと真ん中みたいに書けるのにな。
2020/02/23(日) 08:27:54.12ID:sbceR+SQ0
文字列から組み込み定数の値を取得する事は出来ますか?
例)”rgbRed" -> 255
2020/02/23(日) 08:31:22.34ID:pFS6OxI+0
[VBA]
Dim str$: str = "hoge"

[VB.NET]
Dim str$ = "hoge"

[Java,C# その他]
string str = "hoge";

大差ないな
そもそも文字数の差なんて全体から見たら誤差みたいなもんだ
2020/02/23(日) 08:48:22.46ID:m7teXSWT0
VBAならDimステートメントは省略できるからもっと文字数を減らせる
2020/02/23(日) 08:52:41.96ID:wq/R6u2w0
>>694
宣言+初期値設定だけ?
> If Then構文もThen書かせるなと思うし
そんなことまでケチつけるのかw
むしろSelect CaseのCaseの方が要らんだろ
2020/02/23(日) 08:58:08.06ID:unOBnpssx
>>697
どうかね、タイプ量って生産性に直結するのだが
そもそもVBAの型宣言文字ってごく一部のプリミティブ型にしか割り当てられてないじゃん

Class1 cls = new Class1(param);
の一行で変数宣言、引数付きコンストラクタへの引数付与、インスタンス生成代入が同時に出来るのは便利だぞ

それに慣れてしまったら、
Dim cls As Class1
Set cls = New Class1
cls.Init(param)
みたいにVBAでやるのが馬鹿らしくなる
2020/02/23(日) 09:00:12.99ID:wq/R6u2w0
>>696
いま手元に環境ないから試せないけどApplication.Evaluate("rgbRed")とかでできないかな?
2020/02/23(日) 09:03:59.50ID:wq/R6u2w0
>>700
タイプ量の話なら
Dim cls As New Class1
ってやるだけだろ
わざわざ自爆ネタを提供しに来るとか斬新だなw
2020/02/23(日) 09:08:06.54ID:sbceR+SQ0
>>701
Evaluateでは評価できませんでした。
2020/02/23(日) 09:08:57.81ID:/TUwZlyEa
文字数そんなに重要?
2020/02/23(日) 09:12:15.33ID:KMj3XtMO0
>>702
汎用的な処理を省略したいなら関数を書けってなる
VBAに限らず基本的なことのはずだけど
2020/02/23(日) 09:23:07.17ID:m7teXSWT0
定数名(文字列)から値を得るのって、昔はtlbinf32.dllでできたんだけどWindows10でなくなっちゃったんだよね
GetExportedTypesでできそうなんだけど、すぐに使えるサンプルがネット上には見当たらない
あとはVBAのソースをテキストファイルに書いてインポートとか
2020/02/23(日) 09:26:18.22ID:unOBnpssx
>>702
その書き方はJava等で一行でインスタンスを生成代入するのとは意味が違うので、比較対象にならない

有名な話だけど、DimステートメントでNewを付加した場合、Nothingで一度参照破棄しても変数を評価する度に新しいインスタンス参照が生成代入されるので、以下のようなコードがコンパイルエラーにならない
非常識な挙動なのでMSも非推奨と言ってるし、いまどき使うのはアウト

Sub Test()
Dim C1 As New Collection
Set C = Nothing
C.Add "エラーにならない"
End Sub
2020/02/23(日) 09:28:01.95ID:unOBnpssx
>>707
間違えた、Set C1 = Nothingだな
2020/02/23(日) 09:30:04.09ID:wq/R6u2w0
>>705
何を言ってるの?

>>707
だからわざわざ「タイプ量の話なら」って書いてあるんよ
わからなかったの?w
2020/02/23(日) 09:31:22.21ID:wq/R6u2w0
>>704
コーダーレベルの人には重要なんだろうねw
2020/02/23(日) 09:34:37.47ID:unOBnpssx
>>709
機能や挙動が等価でない構文を並べてタイプ量を比べても意味がないだろ
2020/02/23(日) 09:56:51.02ID:KMj3XtMO0
>>709
その場での記述量の話じゃないの?
引数付きコンストラクタだって元々タイプした関数だろ
2020/02/23(日) 09:57:00.88ID:wq/R6u2w0
>>711
それ以前にタイプ量云々っていつの時代の話だよ
ってことねw
2020/02/23(日) 10:00:28.85ID:wq/R6u2w0
>>712
ああコンストラクタの引数の話を言ってたのか
これは確かにVBAではできないし俺もすげー不便に思う
タイプ量の話じゃなくて別に初期化関数持つのがダメダメ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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