Excel VBA 質問スレ Part66

■ このスレッドは過去ログ倉庫に格納されています
11000
垢版 |
2020/05/10(日) 13:43:45.00ID:Nkoph0aj
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part65
https://mevius.5ch.net/test/read.cgi/tech/1584430040/

※デフォルト設定
2020/06/10(水) 20:30:18.07ID:O8L9L3qt
>>694
本当にありがとう。。言い訳やめて素直に全部頂いたら完成しました…
正直コードは何も理解しとらんですが…
https://i.imgur.com/guqSVVU.jpg
2020/06/10(水) 20:43:31.30ID:O8L9L3qt
なるほど、普段XとYの図面値が両方0な事も結構多い
そういうときはTextboxの1と3(XとYの図面値)のValueを0に設定しとけばいいのか
こういう事を本で基礎から学ばずスマホで調べて小ずるく終わらせるのが自分の学習性の無さ
、本当に駄目ですわ…
教えてくれた人への感謝と自分への落胆が酷い
もう生産部署に飛ばしてくれよ
2020/06/10(水) 21:27:00.27ID:r05FbU6w
フォームボタンを置いてそのシートで矢印押し続けるとセル移動が飛び飛びになるんだけど対処法ありますか?
とりあえずマクロ登録した図形にしたら発生しなくなったけど押した感ないから気持ち悪い
2020/06/10(水) 21:32:19.71ID:2cEQGA3C
>>699
理解する気が無いからな
2020/06/10(水) 21:34:24.10ID:2cEQGA3C
>>701
本当に飛び飛びになってるかカーソル位置をdebug.printとかで確認してみろ
2020/06/10(水) 22:01:15.35ID:zJ0W6AlK
>>702
そう、それがあかんわ
ちょいちょいと細かなとこばっか弄るくらいしかできない
とりあえず位置度の数値をアクティブセルに反映されるボタンを追加して完成です
失礼しました本当に
2020/06/10(水) 23:43:02.56ID:r05FbU6w
>>703
もちろん実際に移動が飛ぶわけではありません
表示上の問題です
706デフォルトの名無しさん
垢版 |
2020/06/11(木) 02:06:11.07ID:l/gRHUK3
馬鹿はこうやって厚かましく聞きだそうとする
2020/06/11(木) 04:35:21.72ID:upd9DdGd
俺はあのおっさんはハゲで臭いけどできるやつだって思ってるわ
しゃちょーの器だ
頑張ったな、おっさん
2020/06/11(木) 05:50:14.88ID:p+d7/Y3X
>>706
質問スレで何を言ってんだ?
2020/06/11(木) 07:33:56.10ID:Ppd1dcd+
馬鹿って言いたいだけの人の相手しちゃダメ
2020/06/11(木) 12:31:19.92ID:9UX6mR7k
いや、学ばない俺でも流石にセルに反映されるボタンくらいは聞かずに作れたのでそこまでは聞いてないですよ
ボタンに
アクティブセルとテキストボックスのvalueを=の動きつけるだけだし
2020/06/11(木) 14:46:24.05ID:xmZccwT9
その「だけ」の組み合わせなんだよなぁ
2020/06/11(木) 15:47:31.15ID:fXLeDjMq
算数の問題で答えだけ合っていても計算式がないと正解にはならない
カンニングとみなされるって知らんのか
そうやって問題から逃げている初心者に教えることはない
2020/06/11(木) 15:50:35.95ID:fXLeDjMq
ちょっと言いすぎたかな
2020/06/11(木) 15:56:00.83ID:G1l0Tewu
いや、それでいいんだよ
2020/06/11(木) 16:13:44.92ID:HN+bic0j
エクセル初心者はVBAなんて触らんし
VBAやマクロ禁止の部署もあるからなぁ
パートさんには入力欄とクリックのみだったりとか
まー初心者がこのスレ見ることもないか・・
2020/06/11(木) 17:23:40.82ID:9UX6mR7k
いやもう完成しました
感謝もしたし謝罪もします
計算式はPCないところで関数電卓使ったりするから嫌でもわかっとります
√( xズレ^2+yズレ^2) *2

VBAでもまず覚えようと思ったので

Xズレ→B列 Yズレ→C列 位置度→D列のデータの時
Dim s As Long

Do While Cells(s, 3) <> ""
Cells(s, 4) = Sqr(Cells(s, 2) ^ 2 + Cells(s, 3) ^ 2) * 2   
Cells(s, 4) = Format(Cells(s, 4), "0.000")
s = s + 1
Loop
エンドサブちゃん
高卒には荷が重すぎ
高学歴でしょここの人達
2020/06/11(木) 17:29:15.93ID:/dMXe1DS
その言い訳がましいフレーズをレスに入れるから良くないって、今後は書き込む前に考えたほうがいいよ
ここはもう来なくてもいいから
718デフォルトの名無しさん
垢版 |
2020/06/11(木) 17:34:53.28ID:Gg4t4WTy
俺は計算系は答えられんがここは質問スレだからどんどんこい。
煽ってるだけの奴は何の目的でこのスレにするんだ。芸能人の話題待ちでもあるまいし。
自分の決め事があるならいいけど初心者は変数は後でわかるようにとにかく宣言すべし。
日本語だけはあまりお勧めしない。
719582
垢版 |
2020/06/11(木) 19:31:53.23ID:lwV9wV8Y
>>716
何で、そのループが必要なのかな?
あと、いきなりCellsで始まるのはあまり良くない。
ブックなりシートなりから書いた方が良い。

でも、それだと長くなるからWithやSetを使う。
2020/06/11(木) 20:34:47.38ID:upd9DdGd
特定の行・列を表示・非表示にするボタン使ってるんだけどさ
この行・列にActiveXの他のボタンがあったりなんかするこ、たまにこいつらが消滅するんだよなぁ
debug.printとかで位置確認すると確かにそこにいるんだけどHeight=0とかになってる
んで適当にSubプロシージャ作ってHeight=200とかに設定するんだけどだめ
ならない
エラーはかないけど、debug.printで確認してもぜぃろぉのまま
Deleteも効かない
てかエラー出る
オブジェクトの選択と表示からみると存在してる
再起動してもだめ
てかたまに開けなくなるw
しゃーないから、新しいシート作って、そこにシート全選択でこぴぺすると
表示されてるボタンはコピーされるが
消滅したボタン群だけはコピーされない
コピーされないってのは、オブジェクトの選択と表示にそいつらが出なくなることから判断してる
消えたやつは新しく作り直してる
まぁそうすると元に戻るんだけどさ

なんだか半分死んでて半分生きてるような感じなんだろうなぁ
お前らこういうことある?
2020/06/11(木) 20:43:48.25ID:9OB4DptL
ActiveXはサポート終了でしょ
2020/06/11(木) 20:47:39.72ID:upd9DdGd
だってぇ・・・右クリで移動されちゃうボタンとかいやだもん
2020/06/11(木) 21:20:07.19ID:v1OJq4JH
Active S○X
724デフォルトの名無しさん
垢版 |
2020/06/11(木) 21:49:44.43ID:Pc/1Hill
txt123 = objIE.document.all.tags("table")(2).outerText
でテキストを取得しました。
txt123 の中に授業表が入っています。
体育という単語が含まれていれば、A列のセルに〇、国語という単語が含まれていればB列に〇、
算数はC列・・・
という具合に特定の文字列が含まれていれば指定の列のセルに〇を入れたいのですが、
どうしたらいいでしょうか?
特定の文字列は国語、算数、体育、社会、理科の5つです。
2020/06/11(木) 21:52:07.03ID:DFKeKDYT
>>724
馬鹿は死ねば治るかもよ
2020/06/11(木) 21:55:51.11ID:fTevQdJs
>>724
文字列を検索する関数とIf文を使えば?
727デフォルトの名無しさん
垢版 |
2020/06/11(木) 22:00:18.32ID:vUhEmjDF
>>724
こんなこともわからない頭の悪い奴に教えられる子供がどうなるか
2020/06/11(木) 22:05:40.83ID:S8xfnPZH
>>724
色々無理だと思うぞ。やめとけ。
2020/06/11(木) 22:28:34.49ID:Pc/1Hill
>>726
ありがとうございます!
If InStr(txt123, "国語") > 0 Then
こんな感じに値が返ってきたら〇と入力する仕組みになりました
2020/06/11(木) 23:19:34.07ID:fXLeDjMq
まさかと思うがテキストボックス123個とか作ってるんじゃないよな
2020/06/11(木) 23:44:22.39ID:52kheZTp
何でそれでいきなりIE制御・・・。
2020/06/12(金) 00:13:44.58ID:Y0E/tOto
授業表をIEで見るって社内システムがそれなのか?
2020/06/12(金) 00:33:39.25ID:cWAZHeBV
IE制御とかレガシーにも程があるだろ。。
2020/06/12(金) 00:43:49.91ID:V6O8I1+o
WebページのテーブルってエクセルのVBAで
IE以外にどうやって取得するの?
2020/06/12(金) 01:56:00.71ID:MW3IhN88
test
2020/06/12(金) 02:10:15.74ID:MW3IhN88
選択した範囲のセル色を変えたいです。

If Intersect(Target, Range("B1:B5")) Is Nothing Then Exit Sub
色変更処理

変更可能なセルはB1:B5のみとしたいですが、
これだとB6が一緒に選択されている場合に一緒に色が変更されてしまいます。

B1:B6を囲ってしまった場合でも、B1:B5までの色のみ変更させたい場合どうしたらいいでしょうか。
737デフォルトの名無しさん
垢版 |
2020/06/12(金) 02:51:45.45ID:KALz8/u9
また馬鹿か
2020/06/12(金) 03:29:37.08ID:IFmaagGk
>>736
選択した範囲は選択されているのか?
2020/06/12(金) 06:26:26.47ID:u23pgbjD
>>736
intersectした結果とTargetを比較したらいけないかな
2020/06/12(金) 07:59:23.12ID:d1Ad7gfn
>>720
シートに配置したボタンでよく遭遇するよ。そんなもんだと思ってるから、ボタン押下時のコードに自分自身の位置とサイズを初期化するコードを書くようにしてる。
2020/06/12(金) 08:22:21.81ID:F5wzc1/2
>>737
分からないからそれしか言えないのか?
742582
垢版 |
2020/06/12(金) 08:32:29.25ID:KgwnUKnv
>>734
俺が知ってる方法で4〜5種類の方法がある。
MSXMLとかWinHttpとかhtmlfileとか。
743582
垢版 |
2020/06/12(金) 08:34:43.74ID:KgwnUKnv
>>720
どっかのリボンにオブジェクトのリスト出せるボタンが有ったと思うが、表示されなかったっけ?
744582
垢版 |
2020/06/12(金) 08:36:08.69ID:KgwnUKnv
>>740
サイズ変わって見えなくなってるだけだよなあ。
2020/06/12(金) 12:46:47.02ID:HqN3pHW3
>>720
セルにあわせて移動やサイズ変更するかどうかの設定があったはずだが
2020/06/12(金) 13:13:42.59ID:1+2Rgw6z
>>745
バージョン2010以降「セルに合わせてサイズ変更や移動しない」の設定になっていても
サイズが変わってしまう事例を多数経験しています。(2007は経験なし)
ボタンだけでなく、コメントの位置も極端に移動すること多数。
2020/06/12(金) 13:14:30.95ID:hxFv/xna
>>742
ヘェ〜そんな関数あるんだ、IEオブジェクトだけかと思ってた、ありがとう
2020/06/12(金) 17:49:02.54ID:aQA9YYrW
>>740
エクセルに任せるんじゃなくてコード上で配置の指示だしておくってのは解決策になるのかもしれんね。ちっこくして非表示切り替えと関係ない安全な場所に退避させておくみたいな
>>743
それが「オブジェクトの選択と表示」
リストには出てるんだわ
>>745
まぁその辺もやってるんだけどね
むしろその辺でバグってるんだと思う
>>744
おれの書いた内容読んでないのかもしれんけど
VBAからサイズを再指定して表示させようとしてもバグってて指定を受け付けてくれないってことな
そもそもサイズの問題だけならシートコピーで他の正常なボタンと一緒にコピーされるはずじゃん
2020/06/12(金) 23:01:56.39ID:FlbnSBZd
Windows10に変えたら、クロマキー合成みたいなのが出来なくなっちゃったんだけど、
何か方法ない?
750デフォルトの名無しさん
垢版 |
2020/06/12(金) 23:29:11.20ID:KALz8/u9
また馬鹿が来た
2020/06/12(金) 23:57:17.59ID:FlbnSBZd
>>737
>>750
一体どんな無様な人生を送ったら、そんなコメントが出来るようになるのかな?
生きててつまんないだろう?
ここの住人にかまってもらえるのが唯一の楽しみかい?
2020/06/13(土) 00:29:59.36ID:0QXppYe5
クロマキーはWin7まで。
ていうかクロマキーて・・。
確かにクロマキーだが。
2020/06/13(土) 01:18:01.22ID:l5EmusQW
一旦あきらめて、真の目的を違う方法で達成することを考えましょう
754デフォルトの名無しさん
垢版 |
2020/06/13(土) 03:31:14.05ID:d/IEOBZf
>>751
自分が言われたという自覚があるんだ?
2020/06/13(土) 06:33:26.28ID:iOfV/qX/
>>750
実は自分もわかってないからここで勉強してるんだろ
でマウント取りたいからそのコメント
2020/06/13(土) 07:35:38.54ID:gm1IvgiV
質問スレなんてどこでも、マウントとって承認欲求を満たそうとする奴らばかりだよ。
特にVBAスレは、プログラミング板の他のスレでは相手にされないレベルの奴がここなら俺でもマウントとれるだろと集まってくる。
2020/06/13(土) 10:49:08.95ID:hwBvm+CU
VBA始めて1週間
結構できるようになったけど、俺ってすごい!?
2020/06/13(土) 11:02:28.88ID:iOfV/qX/
>>757
どうやって勉強した?どこまでできるようなった?
2020/06/13(土) 12:54:09.65ID:l5EmusQW
VBA完全に理解した

VBAなにもわからない

VBAチョットデキル
2020/06/13(土) 13:53:12.35ID:sXc2xmOg
何を以て「できる」と判断したのか?
2020/06/13(土) 13:57:01.18ID:k9PzEFx9
初心者の頃に書いたコードみるとマジナンだらけでチョベリバだわ
2020/06/13(土) 14:05:41.14ID:GFk/ON+H
編集ができるってことじゃね
763デフォルトの名無しさん
垢版 |
2020/06/13(土) 14:17:20.43ID:Ft3NByW3
 ダニングクルーガー効果とかいうやつじゃね
2020/06/13(土) 15:41:58.59ID:9rN9x/HV
VBAに限らないコーディング全般の話になるかと思うんですが、
For文のカウンタ変数に対してそのブロック内で加減算するのはいわゆる「お行儀が悪い」ものですか?

For i = min To min Step -1
  For j = i + 1 To max
    〜処理〜
    If 条件 Then
      〜処理〜
      Let i = i + 1 '←ココ
      〜処理〜
    Else
      〜処理〜
    End If
    〜処理〜
  Next j
  〜処理〜
Next i

前任者が使っていた20行にも満たないコードですが、1行目に違和感がありました。
Do While/Until文で書き直せるものの、単に自分の理解度が低いだけかもしれず・・・
2020/06/13(土) 15:59:50.04ID:sXc2xmOg
>>764
俺ならforにしないな
2020/06/13(土) 16:03:06.99ID:hwBvm+CU
データ用のシートからデータをコピーできるようになったぜ

ところでクラスモジュールにはどんなメリットがありますか?
functionの意味は分かりましたが、クラスとの違いなどがよく分からず
今本屋で色々探してきましたが、解説が見当たりませんでした。
2020/06/13(土) 16:04:33.27ID:HDBeOIwd
>>764
forにせずif文で条件抜けさせる方が読み手に伝わるし良いと思う…
stepで減算してるのに条件次第でi加算するのは処理の流れが分かりづらくなる
2020/06/13(土) 16:05:08.13ID:ll49+YlL
一般的に、for nextの方が理解しやすいから、for 文ありきで書いてるだけなんじゃないかな。
感覚的にも可読性やメンテナンス性からも、do loopなどで書く方が良いと思います。
2020/06/13(土) 16:14:12.41ID:lPN2rvMv
>>766
VBAのクラスはCOMとの相互運用のために存在する
普通に使う分には全く必要ない
というか並のVBAerのスキルではメンテ不能になるからむしろ有害
クラスを使いたくなるレベルの高度な抽象化が必要になるようなら、
そもそもそんなことをVBAでやらなければならないシステム設計が間違っていると考えるべき
2020/06/13(土) 16:49:04.82ID:9rN9x/HV
>>765, >>767-768
やはりそうですよね。Do〜に書き直そうと思います。ありがとうございました。
2020/06/13(土) 16:50:17.97ID:hwBvm+CU
>769
ありがとうございます。
そこまでの説明が探しきれなかったので助かります。
2020/06/13(土) 16:52:28.00ID:69sGe9cG
>>764
Forの使い方を間違ってる
途中で1足して、最後にまた1引くんなら、Do LoopとIfなどを使って条件をはっきり書くべき

プログラミング全般の話となると、コンパイラによっては最初にStep値で割り算して回数を求めてしまうコードを吐くやつもあるので、正常に動かなくなる
2020/06/13(土) 18:20:23.36ID:gmb5Wcnr
ブックのなかに、シートがたくさんあって、
マクロ利用者毎にマクロで動かしたいシートが違う。
だから、マクロの実行中に、利用者にシートを選択させて、それをactivesheetにさせたい。
そういうの、できる?
2020/06/13(土) 18:31:43.88ID:sXc2xmOg
できる
2020/06/13(土) 18:35:00.95ID:Q06gyfKt
>>773
ロジック的に変
Webページやスマホアプリでも最初にログインするのとかあるでしょ?
後から選択するくらいなら最初に分けた方が良いのでは?
2020/06/13(土) 18:38:57.44ID:gmb5Wcnr
>>775
できれば、そうしたんだけど。
何人もの利用者が共通で使っているブックなので、シートを分けられないんだ。

シートがゴチャゴチャの状態から特定シートを利用者に選ばせたい。
2020/06/13(土) 18:42:11.92ID:ejIEXNUq
>>773
https://qiita.com/rrryutaro/items/b8bdc6d16bdf8c66a190
この辺コピペしたら動くんじゃない?
2020/06/13(土) 18:54:40.10ID:Q06gyfKt
>>776
ごめん参りました_| ̄|○>>777
2020/06/13(土) 18:56:13.87ID:gmb5Wcnr
>>777
回答サンクス。
でも、もっとコードをシンプルにしたい。
2020/06/13(土) 18:56:56.64ID:gmb5Wcnr
>>779
マクロを途中で止めて、利用者にシートを選択させることによって(そのシートのどこかのセルを選択させる)、activesheetにさせたいんよ。
781デフォルトの名無しさん
垢版 |
2020/06/13(土) 19:11:25.34ID:Ft3NByW3
自分でシートを開いてその後マクロを実行する形じゃダメなの
2020/06/13(土) 19:20:55.22ID:gmb5Wcnr
>>781
今は、苦肉の策でそうしてるんだけどね。
諸事情により途中でactivesheet を選ばせたいんだ。
2020/06/13(土) 19:50:08.25ID:mObNCAEc
これでいい気がする
https://qiita.com/yosatonet/items/b7083d7c95d2d81b1ffa
2020/06/13(土) 20:02:21.69ID:gmb5Wcnr
>>783
サンクス
ありがとー。

でも、もっと簡単にできんかな。
どうやら、無理っぽいな。
2020/06/13(土) 20:08:18.16ID:Q06gyfKt
マクロの途中で>>777で作ったUserForm1.Showすりゃ良いでしょう
2020/06/13(土) 20:23:03.52ID:mObNCAEc
じゃあこれ
https://www.relief.jp/docs/excel-vba-select-cells-application-inputbox-methot.html
2020/06/13(土) 20:28:03.66ID:sXc2xmOg
>>780
途中でセル選択ダイアログでも表示すりゃいいじゃん
2020/06/13(土) 20:36:43.64ID:gmb5Wcnr
>>786
ありがと。

それやってみたけど、ちょっと面倒だった。
もう一回やってみる。
2020/06/13(土) 20:42:30.13ID:gmb5Wcnr
>>786
やっぱ、いけるかも。
2020/06/13(土) 20:42:48.59ID:gmb5Wcnr
>>787
ありがと。いけるかも。
2020/06/14(日) 08:41:44.12ID:ffGowWaR
>>788
よく分からんがモードレスにすりゃ良いんじゃねえの?
2020/06/14(日) 11:14:04.92ID:uWyGdyFQ
>>766
複数の自作関数をセットにして使いまわしたい時とか、
取得した値をプロパティとして保持しておきたい時とか、
自作関数でインテリセンスを使いたい時とか。
2020/06/14(日) 11:20:05.40ID:ZfTKHz7W
>>792
モジュールと構造体でいいよねそれ
794デフォルトの名無しさん
垢版 |
2020/06/14(日) 11:21:47.96ID:435IzS7y
VBA歴まだ1ヶ月
でtxtデータから全て数値をシートに引っ張り出す事は成功したけどそれをVBAで計算させるスキルはないからエクセル関数使ってる
もっとスキルが欲しい
2020/06/14(日) 12:36:35.03ID:PywPq9gj
関数でできることは関数でやりましょう(例外あり)
2020/06/14(日) 12:52:53.71ID:UBYu/Pyg
関数ばかりでもいかんですう
797デフォルトの名無しさん
垢版 |
2020/06/14(日) 13:01:56.80ID:435IzS7y
引っ張り出した数値を
ABS関数
ROUND関数
MAX、MIN関数
IF関数
でだんだんフィルターを通す感覚で
で本来の数値に対応させてる
VBAでそれをやる力を得るには5年はかかるな
俺じゃ
2020/06/14(日) 13:26:59.00ID:0qngbhsm
限定的な使い方になるが、連想配列でユーザ定義型使いたい時に代わりにクラスモジュール使うって手がある
2020/06/14(日) 13:44:32.79ID:attwzNFV
質問ですが、列が3つありそのうち2つが検索用ワードで
これを元に検索し3つ目のセルにあるワードを配列に収めていく処理を行いたいです。

例えば、こういったテーブルがあります。
すずき、いちろう、170
すずき、じろう、171
たなか、さぶろう、172

検索条件を1列目「すずき」2列目「条件なし」とした時、170,171を配列に収める
検索条件を1列目「すずき」2列目「いちろう」とした時、170を配列に収める

と、やろうとした時どういった処理が考えられるでしょうか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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