Excel VBA 質問スレ Part80

■ このスレッドは過去ログ倉庫に格納されています
2023/05/31(水) 08:23:38.97ID:4RV1IxmB
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

関連スレ
Excel VBA 質問スレ Part79(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1674875532/

※前スレ
Excel VBA 質問スレ Part79
https://mevius.5ch.net/test/read.cgi/tech/1674874007/
2024/01/18(木) 00:33:52.88ID:j51Gu5qi
VBAの質問なのですが
運送系事務でコース表の各店舗に数量を記入する作業があるのですが
この数量記入を例えば入力用というシートを作り一元管理したいのですが
配送を4社に振り分けている関係で月曜日でも月曜@、月曜➁、月曜➂、月曜C、と
シートが4つに分かれておりシステム上これは変えられないと言われました
店舗も例えばセブン、ローソン、ファミマ、サンクス、ミニストップ、と色々あり
100店舗ほどあるのを該当店舗があるシートへ移動し数量を入力するという…

現状でやり始めた事はデータベースを作りキーワードで検索できるようにし
ドロップダウンリストでセブンを選んだらセブン全店が表示されるようにしました
これを利用してオプションボタン等で月曜を指定し店舗名の右セルに数量を入力すると
月曜日シートにある同名店舗の右セルに入力した数量が反映されるという形にしたいのです
ここまで書いて思ったけどこれってVBAで解決させる物でしょうか?
vlookupとかの関数の領域? すいません素人に毛が生えた程度の知識しか無いもので
ご教授いただけると幸いです
392デフォルトの名無しさん
垢版 |
2024/01/18(木) 01:53:45.90ID:jpryHAaY
>>391
ある程度複雑になるとVBAを使わないと何処に何があるかわからなくなって積む
特に他人からするとブラックボックス化する
ドキュメントを残すことができるなら良いけど
393デフォルトの名無しさん
垢版 |
2024/01/18(木) 04:26:25.22ID:O3FeaIOP
ワークシートの内容が固まりきってもう変更は無い、新しいものの追加はない、ならVBAでもいいけど自分なら関数で作る。
VBAで作った方が後々のメンテナンスが大変になる。
2024/01/18(木) 10:41:22.24ID:i5FxeiUS
>>391
現状を正しく理解できないからなんとも言えないけど、関数かvbaかって質問なら、関数でできるなら関数、できないならvbaってしか答えられないと思う
関数って言っても組み合わせ次第では色々出来るから、vbaでしかできないと思っていても、工夫したら関数でできましたって事なんか腐る程あるし
2024/01/18(木) 11:06:18.05ID:DZf6Ha1U
現行のシステムの改良/改善なのか? それをベースによりよいシステム化をしてもいいのか?
月曜だけで4シートとあるが一週間分で28シートが現状で存在するのか?
100店舗ほどもあるシートに移動して入力した数量はどこの何に反映されるのか?
入力元のデータは指示書のようなカタチでまとまったものがあるのか?
或いは各店舗からの要請があって、それを元に質問者側が曜日で振り分けているのか?
4社に振り分けているとは?下請けの意味?配送コースの4車輛の意味?

コンビニを例えに出しているが、例示が悪いのかどうか、コンテナ(カゴ)に種々雑多な商品が詰め込まれた
イメージが付きまとってしまい、面倒臭いのはもっと他にあるだろうにと思ってしまうが、
あくまでも4社への振り分けが面倒なだけで、積み荷はもっと単純なものなのか(一店舗に一品とか)
全体のボリュームも知りたいところ
物流の観点から言うと、ピッキングなのか仕分けなのか 似たようなものだろと言われるかも知れないが
そのどっち側なのかでも設計も変わるし成果物も変わる  ↓参考までに
https://www.keyence.co.jp/ss/products/autoid/logistics/role/function-safekeeping.jsp
2024/01/18(木) 12:03:28.39ID:J8Jk6UJ9
なげーよ
397391
垢版 |
2024/01/18(木) 12:31:08.59ID:KlrhRgnN
曖昧な情報で皆様を混乱させてしまい申し訳ありません
現状でやっている作業の前提条件としては

曜日毎のコース表シートが4つあり
1シート内に曜日毎に決められた店舗の組み合わせで4~5コース存在している
店舗に出荷される数量が前日に確定し全店舗数量一覧が"紙ベース"で来る
数量一覧を元に該当店舗に出荷数を順次入力していく

月曜@〜月曜Cと分かれているのは下請け配送会社4社に振り分けた形で
月曜@にはA社担当コース、月曜➁にはB社担当コースという形になっています
各曜日シートに数量を記入したらその4つのシートが完成版で共有されます

完成版シートの仕様は変えられないと言われてしまったので
せめて数量入力を一元管理して効率化したいと思っていますが
>>391で作った入力用シートの入力情報を各曜日に転記さたいと思い
ChatGPTを使ってみましたがどうしても上手く行きませんでした
上記作業を持ち回りでやっている人間が3人いて入力作業効率化の提案をしても
「良く分からないからいい」「新しい作業を覚えたくない」「そうやって楽する事ばかり考えるな」
作ったという意見を頂いているのでシステムがブラックボックス化しても問題ありません
他作業と並行しながら2〜3時間かかる入力作業を続けたいそうです
2024/01/18(木) 12:51:09.85ID:i5FxeiUS
>>397
ごめん、結局最終的に何がやりたいのか全然分からないからアドバイスができない
「他作業と並行しながら2~3時間かかる入力作業を続けたいそうです」って言うならそれでいいんじゃない?
と思うけど、聞きたいのは多分そういうことじゃないよね?
言葉で説明されてもこっちはシートがどうなってるのか分からないからなんとも言えない
「東京から大阪まで行きたいけどどう行けばいいですか?」って聞かれても新幹線もあるしバスもあるし飛行機もあるから、なんとも答えられないよね?
それが「東京から大阪まで◯日◯時までにつくように新幹線で行きたいんですけど、どの新幹線に乗ればいいですか?」って聞かれたら答えられる
まずは関数なりvbaなりで自分でやってみて、分からないところのみを聞かないと誰も答えられないと思うよ
2024/01/18(木) 12:59:01.97ID:i5FxeiUS
あと、無駄な情報が多すぎ
ここは質問をして答えるスレなんだから運用までは面倒見きれない
完成版を変えちゃだめとかブラックボックスが~とかは運用の話であって、その話をされても「はぁ」って感想しかでない
2024/01/18(木) 13:04:56.76ID:J5B7weBB
【VBA作成 依頼】
5ちゃんねるHTMLを WEBクエリしたんだが、見づらい。
タグ『< >』で改行させるVBAコードを 誰か作ってください。 無料で。
https://i.imgur.com/XMdGvUd.jpg
2024/01/18(木) 14:58:45.62ID:DZf6Ha1U
曜日毎のコース表シートが4つあり : それ、火曜日水曜日って続かないってことだよね?
28シートあるのか?の問いに応じずに同じことを繰り返すってことは、そういうことだろ?
つまり、曜日毎は関係無くて、4コース用に4シートがあるだけ 
面倒だけどそれぞれの店舗シートに入力したら、その4シートに反映される ということだろ?
その100店舗前後のシートを探すのが面倒だから入力用に新たに1シート設けて、そこに入力したら
店舗のシートに反映されて、尚且つコース用シートにもまとめられる と? そおゆうのが欲しいと?
2024/01/20(土) 11:31:50.99ID:vOFZkfTX
>>397
結論から言うとそんなの余裕でできる

その前に、あのさ、君結構アタマいい人でしょ?
話を聞く人の労力もうちょっと考えてわかりやすい説明しようよ

・曜日7日
・コース4〜5
・下請け4社
・コンビニ5社(セブン・ローソン・ファミマ・サンクス・ミニストップ)

この4次元マトリックスがどういう風に表になってるのか
口だけで上手に説明するのって難しいし、読む側の読解力にも依存する
ひな形でもいいから自分で簡単なの作ってスクリーンショットとってあげるぐらいしなって

読んでる方はいろんな形式の表が頭に浮かぶんだけど、一体どれなのか特定できないもんだからまともなアドバイスできないわけよ
いろんな人からいろんなアドバイス聞きたいなら、まずどうやればできるだけ多くの人に正しい情報を伝えられるのか工夫しな

https://i.imgur.com/cf3VhMk.jpeg
2024/01/20(土) 12:01:23.58ID:vOFZkfTX
>>400
タグをvbNewLineに置換するだけ


自  分  で  や  れ  



.
2024/01/20(土) 12:04:37.73ID:FNhUV8xD
Excel VBAでAIは作れますか?
2024/01/20(土) 19:05:48.23ID:6lky6R4+
>>404
はい
チューリング完全なので
2024/01/21(日) 03:02:30.89ID:cfaA1lc6
みんなの環境は32bit? 64bit?
世間はどっちが多いんだろう

最近は64bitにしても影響少なくなったと聞くけどどうなんだろう?
2024/01/21(日) 03:14:48.63ID:t3S6ML7u
MacのVBEの中だけ、
controlキーを使ったショートカットが無効になってるんですが
仕様ですか?
カーソル移動のショートカットが使えないので困ってるのですが
Macの方はどう対応されてますか?
2024/01/21(日) 08:52:16.21ID:M95x8PfE
>>406
逆に今32bit選ぶ理由って何?
2024/01/21(日) 11:25:30.02ID:6T/txFD4
2021年以降は32bit版のWindowsが原則販売されなくなったんで、Officeも64bit化が急速に進んでると思われる
410400
垢版 |
2024/01/21(日) 12:07:31.28ID:FTr5VFHF
https://i.imgur.com/h1EsLS7.jpg
https://i.imgur.com/QL7Cbdy.jpg
ここまで作った。 ほめて〜
2024/01/21(日) 13:35:45.91ID:HjVkmv/J
>>410
あんたすげえなマジで。
2024/01/21(日) 21:54:39.11ID:cfaA1lc6
>>408
まだまだ32bit使って所が多いから

以前64bitにしたら客先で原因不明のエラーでまくったことがあってトラウマに
そのころはMSも32bitを推奨してた

ただ自分の周りくらいしかしらないから世間一般ではどんな感じなのかなと思って
ちなみに取引のある某測定器メーカは外に出すファイルは未だに「xls」に変換するなんてルールが残ってる
2024/01/21(日) 21:55:41.57ID:cfaA1lc6
>>409
そうなんだ、混在によるトラブルが少なくなってきてるなら自分も64bitに変えたいな
2024/01/21(日) 22:45:54.49ID:FYICgzZP
取引先が無数にあると、とんでもない環境が残ってるところがあるもんなあ
うちの下請けにもWinXPのとこがあるし
業務用アプリと機器がVista以降サポート外で、それを作ってた会社もなくなってリプレースできないそうだ
2024/01/21(日) 23:16:41.24ID:HjVkmv/J
64bitの方が高速なんでしょ。わ
2024/01/22(月) 13:22:08.13ID:A+cdLUDz
32bitのほうが省メモリなので場合によっては32の方が速い
2024/01/23(火) 13:00:26.55ID:TWMJRKR5
>>416
もしかして、まだWindows95使ってる?
それならその意見も一理あるね
2024/01/23(火) 23:11:52.95ID:p5vRgsqV
64はパターセーフしろって言われるんだけど、そのくらいエクセルのほうで面倒見てくれんものか
スタート直後に羽根を外そうとしても警告してくれないBウイング並みに気がきかん
419デフォルトの名無しさん
垢版 |
2024/01/24(水) 00:26:00.94ID:SDekNUM/
PtrはPointerの略
PtrSafeはポインタセーフ
2024/01/24(水) 07:28:58.42ID:jPeFRyU8
パターセーフからそれ読み取れるのすごいわ
脳が勝手にptrをポインタと変換してしまうから、
何言ってんだコイツとしか思えなかった
2024/01/24(水) 09:04:52.24ID:aGyCqA0L
>>418
データイーストw
2024/01/24(水) 09:35:36.07ID:kKiVyROU
酔って書き込んでそう
2024/01/24(水) 13:07:54.28ID:4H3THdR1
>>417
意味不明だな
Win95はメモリ8MBでも動作するように設計されたOSだが64bitアプリはサポートしていないぞ
2024/01/26(金) 10:50:59.48ID:HmDFTXOY
時代は64bit
425デフォルトの名無しさん
垢版 |
2024/01/27(土) 00:55:42.82ID:t7pPpNfJ
32ビット版のExcelをやめられるところはまだ少ない。

ようやく64ビット版に置き換えられる大企業が出てきた程度。
426デフォルトの名無しさん
垢版 |
2024/01/27(土) 06:28:48.80ID:0SBBADg4
Dim i as long と宣言してたのに
i = なんちゃらかんちやら とかいうコードで
iの価が32000程度を、超えるようなとき、over flowという
エラーになることがあります。

Dim i as long なら、32000を少し超えてもover flow
しないのに不思議です。

なんちゃらのとこには定数3とかの数式なのですが
ヤケクソで定数3を、 3# にしたらoverflowせず正常に動作しました。

なんでoverflowしたのか、憶測でも構わないので
誰か教えて下さい

ま、おそらくintegerと見做されたのでしょうが
どうして、Dim i as long 宣言したのに、なんか腑に落ちません
2024/01/27(土) 07:28:24.81ID:TVHASdZo
なんちゃらかんちやら を正確にここに書いて
428デフォルトの名無しさん
垢版 |
2024/01/27(土) 07:38:44.57ID:5pa6Aq5E
>>426
数式中に使っているそれぞれの定数がIntegerの範囲内で、その合計がIntegerの範囲を超えるとオーバーフローするらしい。
定数もあらかじめ変数に入れたりして対策するみたい。
https://www.bold.ne.jp/engineer-club/vba-overflow
2024/01/27(土) 11:56:53.89ID:bKl8GlI9
そういや32bitから64bitにしたら、
Adoで取得したレコード数をlong型の変数に入れる時に型がおかしいとかいうエラーが出たことあるな。
longlongにしても駄目で、clng()したら動いた。
ワケわからん。
2024/01/27(土) 12:15:04.39ID:ltTMqvHO
>>429
型ぐらいマニュアルに書いてなかったか?
2024/01/27(土) 16:54:02.91ID:bKl8GlI9
>>430
マニュアルなんてあるの?
VBなら電話帳より分厚いのがあったけど。
2024/01/27(土) 16:59:10.82ID:vdIbcaGJ
ADOを使うにあたって適切な参照設定が選択されているか
2024/01/27(土) 17:06:20.98ID:CH7ruCqI
>>431
今どき紙とか光学メディアなんか使うわけないだろ
マニュアルと言ったらWEB上のオンラインマニュアルのことだよ
2024/01/27(土) 18:28:22.44ID:qMJDUKYO
リファレンスとマニュアルは別だぞ
2024/01/27(土) 19:18:08.00ID:KybuIZx4
同じ意味合いで使うこともあるよ
2024/01/27(土) 21:10:11.38ID:tuLNWDY3
バカが混同してるだけ
437デフォルトの名無しさん
垢版 |
2024/01/27(土) 21:49:32.99ID:kM+lvGOz
いやハゲが光ってるだけだろ
438デフォルトの名無しさん
垢版 |
2024/01/27(土) 22:06:36.73ID:t7pPpNfJ
>>434
そんなの文脈次第だろw
2024/01/28(日) 09:17:03.35ID:0xzGzgK7
AutoFilterもしくはAdvancedFilterで行を抽出する
条件が2つまでしか指定できないので、3つ以上のときは条件を配列変数へ代入するというのがまずよく分からんが
条件にワイルドカードを指定するときは配列要素の3つ目以降は無視されるという制限を知らずに、1日ハマった
440デフォルトの名無しさん
垢版 |
2024/01/28(日) 09:25:58.21ID:P/o+j6FX
Excel VBAの嫌なところはUTF-8のテキストファイルを扱うときだな

UTF-8とは相性が最悪で入力して出力するときになぜか一部がどこかに消える
2024/01/28(日) 14:12:49.59ID:GlU8zkf4
>>426
iがintegerだとされたんじゃなくて、右辺がintegerだと判定されて、右辺の計算でオーバーフローしてる
>>428
定数の値じゃなくて、定数の型できまるはず

結論はConstにもちゃんと型指定しろ、ってことだ
ちなみに#は倍精度浮動小数点数らしいぞ

>>429
ADOのバージョンは?
一部バージョンでライブラリがばぐってたはず
2024/01/28(日) 15:58:37.92ID:FpdhcBpS
>>425
やっぱりそうだよね?自分の周りでも64bitに置き換えてる企業ってほぼないので
しかしここでは64bitが当たり前みたいだし、この手の質問を過去にもしたけどまともな回答得られたことないしで、自分の知らないところでは64bitが当たり前な業界もそれなりにあるのかな?と思ってしまった
64bit移行は取引先が多ければ多いほどハードルが高そう

世間一般的に32bitを切り捨てられるタイミングはいつ頃になるのかな
「xls」ですら切り捨てられない企業を見てると、そんなのは当分先になりそうなイメージ
もしくはMSが完全互換を達成してくれるか
443426
垢版 |
2024/01/28(日) 16:52:07.92ID:v9jfp3rb
イロイロ、ありがとう
さて、ま、念の為、何というか、

Dim i as long
Dim x as long
Dim y as long
Dim BDATA(約25000000) as BYTE

For x = 0 to 3840 - 1
For y = 0 to 2160 - 1
i = 3840 * 3 * y + 3 * x
BDATA(i) = 255
BDATA(i+1) = 0
BDATA(i+2) = 0
next
next

は、モチロン、駄目なプログラミング
さて、いや。呟きです。
とにかく、ありがとう
2024/01/28(日) 19:19:46.49ID:oSgnhTDB
Doevents 入れないのか
2024/01/28(日) 19:53:30.89ID:PqCzO7aX
>>442
いわゆる大手企業だけど64bit導入済みだよ
元々アドイン禁止だから影響もほぼなし
一部VBAを多少手直ししたくらい
446デフォルトの名無しさん
垢版 |
2024/01/28(日) 19:54:43.44ID:I0zbqNbd
Doevents 入れないのだ
これでいいのだ
バカボンのパパなのだ
447デフォルトの名無しさん
垢版 |
2024/01/28(日) 21:08:37.59ID:v9jfp3rb
Do

Dim i as long
Dim x as long
Dim y as long
Dim BDATA(約25000000) as BYTE

For x = 0 to 3840 - 1
cells(1,"A") = x
DoEvents '''✦✦DoEvents 入れてみた \(^o^)/
For y = 0 to 2160 - 1
i = 3840# * 3# * y + 3# * x
BDATA(i) = 255
next
next

って感じでやると A1のセル、すなわちセルA1が
xの値がドンドン更新表示され、面白いです。
面白いから、これで、良いのだぁぁぁぁぁぁ
448447
垢版 |
2024/01/28(日) 21:15:24.83ID:v9jfp3rb
>>447 自己スレ
でも、DoEvents なくても
xの値は表示されるな🤔 なくてもヨイのだ。
少しギコチナイ動きになる気がするが、
気のせいなら、気にしなくてヨイのだ。🥳
2024/01/28(日) 21:19:00.87ID:09VyNDQR
Excel VBAでDVDドライブをオープンさせることはできますか?
部署内のPC端末のDVDドライブを一斉にオープンさせるドッキリをしたいです
2024/01/29(月) 05:09:16.17ID:XzFB+619
>>441
型指定しないと、値によって型が決まる
32767以下の整数だと自動的にIntegerになる
2024/01/29(月) 05:16:06.75ID:XzFB+619
業務アプリをVBAで書いてるとこがあってな
明治時代に創業してみんなも知ってる一部上場企業だよ
膨大な古いアプリを今さら改修とかできないから、なかなか64bitに移行できないんだよ
452デフォルトの名無しさん
垢版 |
2024/01/29(月) 05:53:44.09ID:evC8W0zb
んー、?
Dim b(40000) as byte
Dim i as long

─途中 省略─

for i=0 to 40000
b(i) = 128
b(i+1) = 128
b(i+2) = 128
next

は、上手くいく予感を感じます。
もしかして、b(i+1) = 128で
iが32000一寸超えたあたりで
なんかある気もしますが、杞憂のような気もするし
実験するのも面倒だな
だってOSや実行環境やバージョンで、
実験結果に再現性がない気もするし
てか、64bitのEXCELにすれば、
配列の要素数的に動画も丸ごとメモリに読み込ませられる
ぢゃーーーん。メモリが、なくなって
障害が、発生が、するなんてことは、アリエナイ❓
b(i+clng(1)) = 128 にしなくてもOkかな
b(i+1#) = 128 にしようかな それとも
b(i+1&) = 128 にしようかな
&は文字連結だけどこの場合は
ま、1をlongで解釈というか
んー、まぁいいや。
453デフォルトの名無しさん
垢版 |
2024/01/29(月) 06:03:43.33ID:evC8W0zb
東証一部というか東京一部というか
東証プライムというか東京プライムというか
とにかく、変な名前に変更するのは、反対
64bitにするのは、反対の反対の反対の…なのだ

というか、東証一部なら名門だね。
というか、富士通とかNECとか東芝とかパナソニックとか
社内のは、まだ32ビットのエクセルなのかな❓
これらも、一部を除いて東証一部上場だな
454443
垢版 |
2024/01/29(月) 06:14:49.65ID:AKFLgh7s
ん、いろんな人による
いろんなアドバイス、ありがとう

i = 3840 * 3 * y + 3 * x
でオーバーフローエラーになったら
今度は、
i = 3840 * 3 * y + 3 * x + 32768 - 32768
って、修正してみようかな❓
ゼッタイ、上手くいくハズだよね❓
でも、面倒だし、次回も3は3#にしゃおうかな
by 姑息な対応するデバッグプログラマでした
455454 自作自演ぢゃありません。∵自己レビュー
垢版 |
2024/01/29(月) 08:04:04.78ID:AKFLgh7s
>>0454 1h40min前の自分に返信してあげる。
いま、1h40min前の自分の通り実験したけど、
❌ i = 3840 * 3 * y + 3 * x + 32768 - 32768
オバーフローエラーになっちゃたよん。
ちなみに、#とか定数にヤケクソでつけてもいいけどさ
やっぱり、&の方がヨイ
🙆 i = 3840& * 3& * y + 3& * x って感じでバッチリだ
でも、
❌ i = 1& - 1& + 3840 * 3 * y + 3 * x
の様な気もする。∵イロイロやってみた感触

というか、#とか&を定数の後にくっつけるのってヤヴァイ
様な気もするが、とにかく、珍しく、EXCELがバッチリ動いた\(^o^)/
456455
垢版 |
2024/01/29(月) 08:12:40.14ID:AKFLgh7s
>>455 5min前の自分に返信してあげる
その数式ないの定数 3とか3840とかの全て、全て、全部に
Clng(3)とかClng(3840)に置き換えなさい。

神からお告げなのだ。ていうか、今実験してみた結果ぢゃ
でも、&とか#の方が短くて見易い
2024/01/29(月) 08:31:12.61ID:yN7n5dLr
>>451
64bit問題生じて何年経ってると思ってるんだよ
流石に後手に回りすぎ
458デフォルトの名無しさん
垢版 |
2024/01/29(月) 10:01:16.80ID:AKFLgh7s
VBAには、on error goto という、
エラーが発生しても、エラー発生の行でエラー発生せず
処理を続行させちゃう ウレピィー機能が存在がするようぢゃ、

i = 3*なんちゃらかんちゃら数式 ……🐌
BDATA(i) = 128
というコードで🐌の行でオバーフローエラーに
なってももしかするとErrをトラップ💃
BDATA(i) = 128 を実行させれるコードも可能ぢゃ
モチロン、配列BDATAの内容はメチャクチャだが
気にしなければ、これでヨシ(๑•̀ㅂ•́)و✧

だって、エラー発生しちゃったらやだろ😎

いや、それより、ドンドン64ビットのエクセルに
移行して、ドンドンバグを潰そう。
テーブルが壊れてバグ発生させても、キニシナイ
ていうか、その方が、バグ対策のノウハウが
バッチリになって株価急上昇の予感がしてきました。
東証プライムどんどん📈しろっう。
てか、そうだ今日は、平日だっけ?
株価をチェックしなければいけないので、では
また今度だ
459デフォルトの名無しさん
垢版 |
2024/01/29(月) 10:08:59.28ID:eJ6L0Jkg
>>451
改修できないのは能力不足なだけでは
2024/01/29(月) 11:00:49.76ID:L9ToZbOs
>>454
i = 32768 + 3840 * 3 * y + 3 * x - 32768
2024/02/01(木) 09:50:16.10ID:qkLEEfNI
>>453
NECはLANPLAN、LANWORDだよ。
462デフォルトの名無しさん
垢版 |
2024/02/06(火) 21:11:58.14ID:tk+LFJYg
以下のコードで構文エラーになる、ならない区別がつかなくて質問します。

クラスモジュール
Function 背景色(ByVal range1 As Range, ByVal range2 As Range)
Dim lng_color As Long
lng_color = range2.Interior.Color
range1.Interior.Color = lng_color
End Function

標準モジュール
Sub test()
Dim rng1 As Range
Dim rng2 As Range
Dim mc As New Class1
Set rng1 = Range("C3") 'C3の色を
Set rng2 = Range("A3") 'A3に適用する
Dim str As String

str = mc.背景色(rng1, rng2)

End Sub

これで、str=の部分をなくすと構文エラーになってしまうのはなぜでしょうか?
2024/02/06(火) 21:29:12.00ID:rCver0bK
うちではならない
464デフォルトの名無しさん
垢版 |
2024/02/06(火) 22:51:37.41ID:8QVr9gKs
Functionだから? callで呼んだり、Subに変えては。
2024/02/07(水) 00:03:31.59ID:/C0r4gOv
>>464の言うとおりだと思うけど、Subにしても Call はつけないとダメかな
それか引数を囲うカッコをつけないか
466465
垢版 |
2024/02/07(水) 00:06:06.47ID:/C0r4gOv
ごめん、クラスモジュールだとどうだか分からないや
>>465は撤回します
ごめんなさい
2024/02/07(水) 05:24:58.93ID:ptzdB5MT
>>462
VBAの謎な仕様の一つ

Functionの戻り値を受け取らない時、Functionは関数ではなくステートメントの一種と解釈されてしまう(らしい)
ステートメントの書き方が、VBAでは「命令と引数を空白で区切る」というルールになっているから

ステートメントの具体的な例を挙げると、
Dim a, b
これを
Dim (a, b)
と書くとエラーになるのと一緒

Callで呼んだときに挙動が変わるのは、こんどは関数がCallステートメントのパラメータになるから、構文の解釈が変わる

さらにややこしいことに、引数が1つだとエラーにならない
これは、カッコが演算子とも解釈できてしまうから

a = b

a = (b)
と書いても、無意味だけどエラーにならないのと同じで、カッコが必要なケースではそのまま解釈され、必要ないケースでは演算子とみなすことが可能なので結局エラーにならない
468デフォルトの名無しさん
垢版 |
2024/02/07(水) 05:54:42.53ID:TWD16jEo
皆様ありがとうございます。
VBA学習を始めて間もないので、RangeがなぜStringに入るのだろう?
などと考えて悩んでいました。
とりあえず空白にすればいいのかな?と思い、

mc.背景色 rng1, rng2

としたらエラーなく実行できました。
2024/02/07(水) 08:03:51.30ID:2Cso54Y+
>>467
謎も何もパーサの都合
470デフォルトの名無しさん
垢版 |
2024/02/07(水) 10:12:34.77ID:p6WTk8Ln
カッコ悪っ
2024/02/07(水) 21:43:51.95ID:rJek+uci
(悪)
472デフォルトの名無しさん
垢版 |
2024/02/08(木) 15:06:23.74ID:AG84sVu5
workbookとworksheetsを両方変数で繋げるにはどうしたらよいのでしょうか?
それぞれsetでwb, wsとした場合、

ws.cells(n,n)やwb.worksheets(n).cells(x,x)なんかは問題なく動くのですがwb.ws.,,,,とするとエラーが起きてしまいます
2024/02/08(木) 16:06:23.33ID:5OVFjneR
ワークシートの親ワークブックは特定されるので指定は不要
wsだけで使えば良い

相互参照したいなら
set ws = wb.Worksheets(n)
set wb = ws.Parent
2024/02/08(木) 17:26:16.95ID:EcJUi253
>>472
Setしたwsにはwb要素も含まれてて変更できない
複数のブックでシート名を共通にしたい時はWorksheetオブジェクトじゃなくて文字列にシート名を入れる
Dim stnam As String
stnam = "Sheet1"
wb.Worksheets(stnam)
みたいに書く
475デフォルトの名無しさん
垢版 |
2024/02/08(木) 19:08:54.01ID:AG84sVu5
出来ました!ありがとうございます!
2024/02/08(木) 20:49:29.84ID:szZI865F
ListBoxの要素をクリックしても枠線が表示されるだけで
青色に反転しないことが時々あるのですが、何故でしょうか?
2024/02/09(金) 12:00:32.11ID:VUVEy040
エスパーするとデザインモードになっていたりマクロ禁止状態だったりするから
478476
垢版 |
2024/02/09(金) 21:03:02.70ID:Essi4uO7
どうもListBoxの端っこをクリックするとListBox自体がアクティブになり
前回選択していた要素にフォーカスが当たるようです(フォーカスするだけで選択はしない、青色にも反転しない)
2024/02/10(土) 12:07:45.28ID:oVCg53lr
プロパティウィンドウで何か設定イジったとか?
480デフォルトの名無しさん
垢版 |
2024/02/10(土) 22:18:00.43ID:3oPB1Oyo
VBAベーシック合格したから、スタンダードも挑戦したい。
その前に 「日商プログラミング検定 STANDARD VBA」をAmazonで買って読んでみたけど、
載ってるプログラムが糞すぎて話にならない。
俺が10行で書ける奴を40行ぐらいでやってる。
買って損した。
481デフォルトの名無しさん
垢版 |
2024/02/10(土) 22:52:32.27ID:3oPB1Oyo
>>180
ChatGPTで教えてもらった。
これからやってみるw


Sub GetVegetableInfo()
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim lastRow As Long
Dim i As Integer

' 「Sheet1」と「Sheet2」を取得
Set sheet1 = Worksheets("Sheet1")
Set sheet2 = Worksheets("Sheet2")

' 「Sheet2」のA1:B5を順番に処理
For i = 1 To 5
' 「Sheet1」で条件に合う最後の行を取得
lastRow = sheet1.Cells(sheet1.Rows.Count, "A").End(xlUp).Row
Do While lastRow > 1 And (sheet1.Cells(lastRow, 1).Value <> sheet2.Cells(i, 1).Value _
Or sheet1.Cells(lastRow, 2).Value <> sheet2.Cells(i, 2).Value)
lastRow = lastRow - 1
Loop
482デフォルトの名無しさん
垢版 |
2024/02/10(土) 22:52:57.45ID:3oPB1Oyo
続き


' 購入年月日と価格を「Sheet2」に記入
If lastRow > 1 Then
sheet2.Cells(i, 3).Value = sheet1.Cells(lastRow, 3).Value
sheet2.Cells(i, 4).Value = sheet1.Cells(lastRow, 4).Value
Else
sheet2.Cells(i, 3).Value = "条件に合うデータが見つかりません"
sheet2.Cells(i, 4).Value = "条件に合うデータが見つかりません"
End If
Next i
End Sub
483デフォルトの名無しさん
垢版 |
2024/02/10(土) 22:59:51.09ID:3oPB1Oyo
一発でできたw
ChatGPTはすごいww
484デフォルトの名無しさん
垢版 |
2024/02/10(土) 23:03:48.85ID:3oPB1Oyo
こういう文を自分で分かるようになるまで1行づつ勉強していけば良いのかな。
485デフォルトの名無しさん
垢版 |
2024/02/11(日) 00:18:22.77ID:gsh865m+
>>484
こんなのがわからん人には一生無理だよ
486デフォルトの名無しさん
垢版 |
2024/02/11(日) 08:41:00.98ID:4jVVlROf
Excel2019だから仕方ないけど、2021や365ならワークシート関数で簡単に出来る内容だね。
2024/02/11(日) 10:25:34.29ID:ectqOeXX
んなこたーない
千里の道も一歩から
488デフォルトの名無しさん
垢版 |
2024/02/11(日) 11:10:11.68ID:KVjYyEwK
>>487
賛成
2024/02/11(日) 13:11:20.60ID:Uyf5FkAB
構造体の項目名を取ってくることって可能
Type type社員
  番号 As Long
  氏名 As String
  所属 As String
  住所 As String
  電話 As String
End Type

こんな風になってる場合、
「番号」、「氏名」とかの項目名を取ってきたい
2024/02/11(日) 13:13:40.26ID:ODGSF/9t
Chatgptに頼るとそれが癖になりそうでよ。
2024/02/11(日) 13:31:41.97ID:RI7D2x7j
>>489
VBAでは無理
VB(.net)ならできるんだけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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