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/09(火) 21:41:34.61ID:hYyeR2h+
プログラミングの基本も知らないレベルの人がコピペでツール作って業務に使用するって大丈夫なのか?
2020/06/09(火) 21:45:05.79ID:FZrbGc0Z
少数以下の計算結果を同じにするのは、Excelでは一番難しい分野の一つ
たとえば銀行の利息とか、素人が作った数式だとまず合わない
2020/06/09(火) 21:56:09.99ID:khiSZY25
この先も苦労するだろうし、もし重大な問題が起きた場合周りが迷惑するんだよな
686デフォルトの名無しさん
垢版 |
2020/06/09(火) 21:59:00.39ID:I+ooWyO2
馬鹿に教えても何かあるとまた頼るだけ
馬鹿に教えてもろくなことにならんぞ
その場で形だけ低姿勢にしてるだけで本音は違うからな
2020/06/09(火) 22:01:59.19ID:0Bu4FXEm
より正確な計算するのってcurrency型だっけ?
double使うより
2020/06/09(火) 22:10:25.08ID:OFRsK1Sh
向き不向き以前に学習する気が無い
2020/06/09(火) 22:26:28.10ID:1rtAHViu
少数の計算はどの言語でやってもやっかい
なので普通は名の知れたライブラリを呼ぶ
自分で書くのは最後の手段
690デフォルトの名無しさん
垢版 |
2020/06/09(火) 22:27:34.95ID:I+ooWyO2
>>687
違いがわからない馬鹿はコメントしなければ良いのに
2020/06/09(火) 23:36:40.87ID:KturEXme
スレチかもしれないけど他の方法も・・
>>651
VBA使わずにフォームコントロールのリスト選ぶだけで表示
https://i.imgur.com/SHqygJ1.png

>>661
HTAのVBSciptで
https://i.imgur.com/rvwycaA.png
692デフォルトの名無しさん
垢版 |
2020/06/10(水) 01:20:22.09ID:aAKpfJRW
学べない俺には刺さるわ、言い訳だが…
これだけは!っていう心臓部になるコードだけはネットで見つけて何とか繋げて作る
どこ弄ればどう変わるかだけ後で見ても絶対わかるようにコードより丁寧なコメントを残す
それさえ完成するともう安心して終わり

あとは簡単な挙動はテンプレがネットにあるからひろってくる
ユーザーフォームのボタンはで黄緑、黄色、水色を多用する
プロシージャ当てはめるだけで職場じゃパソコンの先生扱い

android端末やiPhoneの扱いならなぁ
近所でおばちゃまたちのスマホ教室を副業でやってるくらい詳しいのにっくそっ!
2020/06/10(水) 05:20:40.78ID:9S1ZPIsx
趣味や勉強中ならわかるが仕事頼んだら理解してないネットのコピペもって来るような人にはもう頼めんだろ
694582
垢版 |
2020/06/10(水) 06:37:22.19ID:h6488s/K
>>680
そういう言い訳は良いから。
いつも思うことだが初心者はわざわざ問題を難しくする。

先ずは>>669の最後の
TextBox5 = ResultPosition

TextBox5 = Round(ResultPosition,3)
にするだけだ。

それに、TextBox1~4の3桁をど一にかしたいなら>>674を利用した方が簡単。
それぞれのchangeイベントで自分を3桁にした後で>>674のtest呼び出すだけ。
2020/06/10(水) 08:27:35.36ID:ZDdhDfGU
あいつは禿げたおっさんで体臭臭そうだけど、俺からみるとなかなか頑張ってると思うぜ
簡単な書籍買って一冊読んである程度まとまった知識得るといいわ
一年後にはここでふんぞりかえってレスしてると思うね
2020/06/10(水) 16:06:12.58ID:alb8qwRt
買った本開いたの最初だけで、今は枕になってるぞ
2020/06/10(水) 16:45:17.85ID:zxOaMDTC
>>696
メルカリへ
2020/06/10(水) 17:48:53.56ID:GhRRuhdi
>>696
くれ
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 を選ばせたいんだ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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