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/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ではできないし俺もすげー不便に思う
タイプ量の話じゃなくて別に初期化関数持つのがダメダメ
2020/02/23(日) 10:02:34.10ID:unOBnpssx
>>713
タイプ量はステップ数やコードの可読性低下、人件費とほぼ正相関するので、オーバーヘッド抑制のために下流はもちろん中流以上のPMクラスでもケアしなきゃならない基本中の基本だぞ
いつの時代も変わらない
2020/02/23(日) 10:22:38.92ID:wq/R6u2w0
まだこんな老害がいるんだな…
変数名は1文字に限るとか?w
2020/02/23(日) 11:03:51.11ID:unOBnpssx
読解力皆無で笑える
2020/02/23(日) 12:08:50.82ID:sbceR+SQ0
>>706
変換テーブルでも用意するしかないですかね。
2020/02/23(日) 12:47:04.17ID:wq/R6u2w0
>>717
揶揄されてることも理解できないとか可哀想ですらあるw
2020/02/23(日) 16:21:03.27ID:dmBvCqf60
タイプ量ってwww

いつの時代だよ。
というか、タイプ量少ない奴は寧ろ組みたく無いわな。

頓珍漢なロジックで余計なことやってることでタイプ量がが増えたので無い限り、そんなもん気にするバカは真っ先に要らない。
721デフォルトの名無しさん (スッップ Sd1f-ftqI)
垢版 |
2020/02/23(日) 16:41:58.26ID:EF3UNxNad
そもそもVBAは構文が長いって話なのに
プログラム全体で見てば間違いなく長くなる
でタイプ量の話は流れの中で出て来た少ない方が良いよね程度の事なのに絡まれてる人が気の毒だわ
2020/02/23(日) 17:21:12.88ID:ot72o1TpM
>>721
> タイプ量の話は流れの中で出て来た少ない方が良いよね程度の事なのに
老害にはそうでもないみたいよw ⇒ >>715
2020/02/23(日) 17:46:51.73ID:tUguP7M50
デジャヴかと思ったら
>>565再来なん?
2020/02/23(日) 18:31:17.82ID:ot72o1TpM
>>565自体が最小構成ソースとかのオレオレ用語で意味不明なので再来かどうかもわからん
2020/02/23(日) 18:38:52.53ID:YcvTMcMQ0
構文レベルのタイプ数の多さはまともなIDEがあれば気にならない
つまりExcelのVBA環境だとゴミクズ
2020/02/23(日) 20:58:50.89ID:9ZBd+yN40
そもそも言ってる内容が正しいとは思えないが、そこは議論の余地がなくはない
それよりオーバーヘッドって用語、使い方が間違ってると思うぞ
2020/02/23(日) 21:57:21.45ID:2PAuLkEda
タイプ量が長いのもあるけど
コードが長いと注意が分散されてミスに気付きにくくなるというのはあると思う
宗教戦争になるけど
2020/02/24(月) 16:11:57.17ID:1tltuveE0
深さ不明の入れ子の連想配列があります。
値は数値一つか、一つ以上の連想配列のどちらかです。
下記の様にタブインデントの回数で位置を示した図をテキストファイルで作成したいのですが、どうすればいいでしょうか。

A
B
C 653
D 993
E
F
   G 534
H 331
2020/02/24(月) 16:13:00.23ID:1tltuveE0
スペースが潰れてしまったので修正します

A
 B
  C 653
  D 993
 E
  F
   G 534
H 331
2020/02/24(月) 16:28:54.55ID:pOROlutlM
VBAを投げ捨ててyamlにする
2020/02/24(月) 16:29:30.10ID:BJsPLhtxr
みなさんコード打ちはJIS配列でしていますか?
USのほうがやっぱり打ちやすいのかな
2020/02/24(月) 16:48:26.70ID:OWwFgx4ma
VBA使ってる即ちプリインストール厨なんだから職場貸与のJISキーボードに決まってるでしょ
道具に拘ること自体は否定しないが、そんな奴がVBAなんてストレスMAXじゃないか?
捻れが大きすぎて正常な精神を保てなそう
2020/02/24(月) 17:00:35.65ID:1tltuveE0
>>730
VBAでお願いします
2020/02/24(月) 17:02:23.23ID:zhSNWlOe0
JSON VBAでぐぐれ
2020/02/24(月) 17:50:57.41ID:l6OFRdVP0
いやだ
2020/02/24(月) 19:43:10.92ID:jjjPoigmx
>>728
連想配列とネスト深度を引数にとって出力を返す再帰関数を作る
連想配列の第一要素の型が数値ならば普通にネスト深度とKeyとValueから出力内容を生成して返し、連想配列だったら更に自身を呼び出すようにすれば良い
2020/02/25(火) 09:26:37.66ID:d82kFCO70
>>728
普通にやっても問題ない
2020/02/25(火) 09:59:23.47ID:9IyrqwVFM
VBAを気持ちよく使い続けたいなら、今与えられている環境が最高であると信じて疑わず、余計な知識を仕入れないことだ
特に、作業環境に拘りはじめるといずれ確実にVBAがボトルネックであるという考えに至ってしまうため非常に危険
2020/02/25(火) 10:39:35.32ID:d82kFCO70
仕事なのか趣味なのかで取り組み方は全然違うぞ
2020/02/26(水) 19:10:12.76ID:vsXFrrYA0
VBAで何でも作れると、VSなんて要らないと思われてしまうため非常に危険
741デフォルトの名無しさん (ワッチョイ 0b94-ctjd)
垢版 |
2020/02/26(水) 20:09:04.34ID:JVb++aVC0
VBAで何でも作れるとは?
2020/02/26(水) 20:15:42.46ID:rKAt0si0d
何でもは作れないわ、作れる物だけ
2020/02/26(水) 20:28:14.58ID:Ll3mA7qnM
excelVBAでDDEexecution使ってあるアプリを操作し、
そこでクリップボードに取得した画像をアクティブシートに貼り付けたいです

DDE経由で取得したクリップボードが空っぽなのですが、
DDEterminateする前にオブジェクトに移さないとダメなのでしょうか?
2020/02/26(水) 20:37:33.48ID:8sZglkar0
別言語いじると、元言語に戻ったとき、思わぬブレークスルーがあるので、別言語は是非やるべきだと思う。
2020/02/26(水) 21:08:39.92ID:+cz27N880
今やるならAWSだろ。
2020/02/26(水) 22:51:04.88ID:UkD+a9vW0
VBAでそこそこの物を作れるとは思うが他の言語使えるならわざわざVBAなんて選択しないよ
なので>>740が何を主張してるのかよくわからん
2020/02/26(水) 22:52:21.57ID:+cz27N880
じゃ、なんでこのスレいるの?
2020/02/26(水) 23:20:52.00ID:UkD+a9vW0
VBAでやらんといけない場合もあるから
ってことも想像できないの?
2020/02/26(水) 23:32:57.96ID:+cz27N880
じゃ他言語が使えてもVBA使うことあるってことじゃん、何言ってんのこいつ
2020/02/27(木) 00:05:00.80ID:RMeeA8fN0
日本語の理解力なさすぎw
他の言語が使える(状況)ならって話な
2020/02/27(木) 00:14:45.62ID:5xLWm1lA0
じゃ、状況って書けよ
VBAでそこそこの物を作れるとは思うが他の言語使えるならわざわざVBAなんて選択しない

この表現から「状況」って単語を読み取ってほしいって自分の言葉足らずを認めず他人をなじるただの馬鹿としか思えんわな。
素直に謝れよw
2020/02/27(木) 00:17:32.13ID:5xLWm1lA0
「小学生並みの表現力が誤解を招いたにもかかわらず悪態をついた卑しき自分が存在してすみません」って言え
2020/02/27(木) 04:21:27.06ID:NxJu2KcC0
たしかに「使える人」「使える状況」どっちにも読めるけど、俺は初見では「使える人」の方だと思った

判断の理由は、まずこの文章には主語がないこと
そこで想像で「俺は」を補い読み進めると、次に同じ文章の中に「作れる」「選択しない」という単語が、また主格を伴わずに出てくる
この場合は、すべての動詞の主体は「人」だと判断するのが自然
754デフォルトの名無しさん (ワッチョイ 0b94-ctjd)
垢版 |
2020/02/27(木) 04:35:15.51ID:PX1R20t40
ネチネチとクドい言い方がキモいよ
2020/02/27(木) 04:55:30.05ID:RMeeA8fN0
理解力足りない奴がクドクド夜中まで大変だなw
2020/02/27(木) 05:05:43.27ID:F9flkDmPd
4時21分は夜中だけど4時55分は朝
757デフォルトの名無しさん (ワッチョイ 3a26-7qQN)
垢版 |
2020/02/27(木) 05:27:02.00ID:1NTaOPIN0
文章力低すぎて試験で失敗したタイプ
2020/02/27(木) 06:51:41.59ID:6N44UBOdM
文章力で試験に失敗とかそんな経験ないけどなw
そもそも今時ム板見てる人でVBAだけ使える人って珍しくね?
2020/02/27(木) 09:46:48.05ID:RXnANkEf0
論点ズレズレで遊ぶ大人(外見だけ)?
2020/02/27(木) 12:41:36.10ID:6N44UBOdM
試験とか言い出して論点ずらそうと必死な奴を虐めるなよw
2020/02/27(木) 14:04:05.59ID:XYBaslRL0
CGだとわかっていてもwww
2020/02/27(木) 14:16:04.01ID:xizTLawga
>>756
わかる(わかる)
2020/02/27(木) 15:36:14.26ID:C8kQhi5I0
言葉の内容じゃなくて表現に文句つける奴は大体無能
完璧な意思疎通なんて無理なんだから曖昧な点は都度確認して
ああそういう意図だったので済むのにネチネチとなんの生産性もない
2020/02/27(木) 18:40:02.39ID:cb25kGwba
せやかてクド
2020/02/27(木) 22:04:00.42ID:d4EgxlqA0
わふー
2020/02/27(木) 22:06:00.45ID:JMJaKBCQ0
>>742
VBA で何でも作れるのでは?
だって win32api を自由にコールできるのだから
2020/02/27(木) 23:43:30.37ID:qWPXm1F00
>>766
非同期処理や並列処理はできないやろ
たぶん
簡単にできるなら書き方教えてほしいっす
768デフォルトの名無しさん (ワッチョイ 678a-mhrx)
垢版 |
2020/02/28(金) 06:19:02.24ID:unYBun0f0
それはズルいだろって言われそうな方法なら…。
2020/02/28(金) 06:20:10.17ID:L+KjVouD0
C#とかで処理してVBAに渡すとか?
2020/02/28(金) 07:09:52.34ID:yw4NYUGs0
別のEXCEL(多数)起動して並列処理もどきをやったことはあるんですが、無理やりな感じは否めないかな…
ソース(ファイル)も分散するし
(プロジェクトとしてフォルダに纏めるくらいしか…)
VBAの知識だけでできるのはいいんだけど
771デフォルトの名無しさん (JP 0H27-iWdh)
垢版 |
2020/02/28(金) 10:20:28.33ID:zXCoNy+pH
sendkeysを使って
他のアプリを操作し
ctrl +pgdnをしたいのですが実行されません

SendKeys"^{PGDN}",True
2020/02/28(金) 12:25:39.80ID:2j7Cc3iW0
>>771
まず第一に、SendKeysの確実性はそんなに高くないので、正しく記述しても必ずしも毎回動くとは限らないということを理解しておく必要があるよ
その上で
アクティブなウインドウに送るので事前に他のアプリをアクティブにしておく
他のウインドウをアクティブにするのにウインドウタイトルを指定する必要があるのでその記述にも気を配る
他のウインドウがアクティブになるのにタイムラグがあるのでSleepとかを使って調整する必要があるけどVBAには無いのでほかから借りてくるかApplication.Waitで代用する
どうしても動かない場合は、もっと簡単なケースで試す
2020/02/28(金) 17:21:36.80ID:eDNEl8wD0
Excel21016
現在フォルダを指定してその配下にあるファイルの一覧をシートに記載するのを作成中なんですが。
FileLen関数でファイルサイズを出してるんだけど戻り値がLiong型でそれを越えるファイルだとマイナスの値が
返ってきてしまう。そこでFileLen関数以外で正しくサイズを返せるものあるいは工夫ってあります?
2020/02/28(金) 18:23:01.43ID:MtqAk8k50
Scripting.FileSystemObjectのFile.Sizeを使うとか
2020/02/28(金) 18:24:45.49ID:tYO2NqnQa
入力ミスかw
2020/02/28(金) 18:31:00.61ID:J9MIpREGM
FileSystemObjectを使う機会は増えたな
2020/02/28(金) 18:54:32.55ID:eDNEl8wD0
>>774
ありがとう。調べて作り直してみるよ
2020/02/28(金) 19:38:05.63ID:XpFHUdRGa
vbaのlong って最大いくつ?
2020/02/28(金) 19:53:42.22ID:04Y2DCb30
符号付4byteだから(256^4)/2-1
2020/02/28(金) 20:02:10.27ID:aE85awzW0
>>778
2G
2020/02/28(金) 22:10:29.04ID:KGz3N4NDa
2G越えるファイルexcelで読むの?
2020/02/28(金) 22:12:17.34ID:KGz3N4NDa
あ、一覧か
とりあえず負の数なら強引に変換するとか
2020/02/28(金) 22:50:10.05ID:aE85awzW0
それでも4Gまでしか扱えないから困るんじゃない?やっぱり根本的に解決するにはFSOが必要だよ
2020/02/29(土) 01:59:32.20ID:nzXCWKfq0
LongLongってVBAで使える?
■ このスレッドは過去ログ倉庫に格納されています