Excel VBA 質問スレ Part60

■ このスレッドは過去ログ倉庫に格納されています
2019/03/16(土) 20:39:09.64ID:6HWXzj9o
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part59
https://mevius.5ch.net/test/read.cgi/tech/1549692750/
2019/04/07(日) 22:50:29.75ID:IY2XTri8
>>507
それは数百個貼るような状況の場合の話。
そういう場合なら、その時考える話だ。

例えば、それなりに組める奴ならScreenUpdatingなんかを使っても速度が速くなることは無いだろう。
俺の場合も当然そうだ。
だからと言って、普段そんなに速度を重視して組んでいる訳じゃ無い。
しかしだ、状況により速さが必要になったら当然それ用に変わるだろう。

いつも速度を重視して組んでいるならご苦労なこった。
2019/04/07(日) 22:54:24.63ID:AvqFg232
>>510
> マクロ呼び出し用のボタンだけShapeRangeから除外して
どうやってやるつもり?
2019/04/08(月) 02:30:49.49ID:OEfF6P+m
オブジェクトを直接比較すれば済む話じゃね
なんでわざわざ.Name呼び出して文字列比較するのかわからん
オブジェクトの比較なら何千あっても大して遅くならんし
馬鹿ばっかかよ
2019/04/08(月) 02:33:33.22ID:OEfF6P+m
そもそもshaperangeコレクションにアイテムをremoveするメソッドがあれば済む話なのにな
やっぱVBAって糞だわ
515デフォルトの名無しさん
垢版 |
2019/04/08(月) 06:39:30.33ID:2IBrjRoX
やっと気付いた?
2019/04/08(月) 08:39:44.42ID:HwCnDiL+
20年進歩なければな
2019/04/08(月) 09:10:46.62ID:5f7aEGaE
>>503
ありがとう!
2019/04/08(月) 10:38:02.22ID:20rc9alP
>>513
オブジェクトを直接比較の何を比較するんだよ
全てのオブジェクトは代入で使ってるもの以外
違うんだけど
2019/04/08(月) 10:40:14.98ID:qrhOu38P
vbaは===がない上にisで比較できないパターンがあったはず
ユニークな名前で比較するやり方は正解
2019/04/08(月) 10:59:09.00ID:f4XbMpJ6
>>518
オブジェクトの参照を比較するに決まってんだろ素人か?
>>519
このユースケースで試してからほざけ
2019/04/08(月) 11:00:40.34ID:20rc9alP
>>519
名前なんて好きに変えられるだろ
そんなもんでユニークって言っても筋悪いって言われるんだよ
2019/04/08(月) 11:02:06.10ID:20rc9alP
>>520
素人でございます、具体的に提示してください
2019/04/08(月) 11:06:10.01ID:r5MC5DWh
うむ
2019/04/08(月) 11:28:59.16ID:cNRL9eDF
Application.Caller と比較するのかな?
2019/04/08(月) 11:34:02.89ID:20rc9alP
>>524
これは、プロフェッショナルな>>520 様が明快なお答えを出してくれるので
黙っておけよ
2019/04/08(月) 11:44:28.64ID:f4XbMpJ6
ObjPtr、ポインタ、参照渡しあたりでググれカス
煽りが下手すぎて説明する気にもならん
2019/04/08(月) 11:44:45.29ID:qrhOu38P
>>487
Sub foo()
For Each img In ActiveSheet.Shapes
If img.Type <> 8 Then
img.Delete
End If
Next
End Sub

ここ数日見てなかったけど何やってるんだお前ら
プロパティ比較すればいいだけだろう、一体何日かかってるんだ
https://i.imgur.com/B5lcGn9.png

>>520
無能の頂天っすね
2019/04/08(月) 11:45:39.84ID:20rc9alP
>>526
具体的に提示できないのですか(笑)
必死でググったか(笑)
2019/04/08(月) 11:49:55.04ID:f4XbMpJ6
>>528
捨て台詞も下手くそだな
2019/04/08(月) 11:51:20.33ID:qrhOu38P
>>528-529
俺から見ればお前ら両方雑魚やぞ
2019/04/08(月) 11:54:16.26ID:f4XbMpJ6
>>530
>>494 で示されてることをかなり遅れてドヤ顔で書き込んだ奴がいるらしい
無能かな?
2019/04/08(月) 11:56:32.80ID:20rc9alP
>>530
ボタンはフォームコントロールとActiveXコントロールがあるけど
大丈夫か? 酒飲みながら茶化してるんですまんな
2019/04/08(月) 11:57:35.69ID:qrhOu38P
>>531
終わってんのかよwww知るかwwwwじゃあ何の話してるんだよwwww
2019/04/08(月) 11:58:24.09ID:20rc9alP
>>529
でも、お前(笑)
2019/04/08(月) 12:01:13.75ID:20rc9alP
>>533
茶飲み話に決まってるだろ・・酒か・・
2019/04/08(月) 12:04:25.33ID:cNRL9eDF
ObjPtrだろうがなんだろうが「消しちゃいけないこのオブジェクト」を最初にどうやって指定するのかと
2019/04/08(月) 12:04:58.54ID:f4XbMpJ6
酒飲んでるから!本気じゃないから!
はいノーダメ!

思考がテンプレすぎる
2019/04/08(月) 12:07:53.61ID:20rc9alP
>>537
いやいや、具体的にかけない君が何言っても
笑い話
2019/04/08(月) 12:24:06.89ID:KL9iMO+X
>>526
そこじゃないと思うぞw
比較するためにはボタンをオブジェクトとして取得しなきゃならん。

どうやって取得する?

>>527
俺もこのやり方をするだろうね。
でも名前でも全く問題無いと思うぞ。
2019/04/08(月) 12:35:47.16ID:20rc9alP
>>537
結局、ググってもそんなコード内から泣いてるのか?
思いつきで、引きこもりのカスが書き込むよなこのスレも
541480
垢版 |
2019/04/08(月) 13:06:22.74ID:cVIHdDyE
>>481
名前などどうでもいいではないか。
https://pds.exblog.jp/pds/1/200808/06/80/b0003180_19511656.jpg
542480
垢版 |
2019/04/08(月) 13:11:52.02ID:cVIHdDyE
>>481
>>482
>>485

理解するコツを聞いているのに
いろいろ使ってみろ、みたいな回答はおかしくないか?

そんなこと承知の上で、理解するコツ、つまり心がけることやこんなことに注目したら理解がスイスイスーダラダッタスラスラスイスイスイっとできるかを聞いているのですが。
2019/04/08(月) 13:17:44.71ID:20rc9alP
>>537
まあ、引きこもりのカスだからノーダメ・・全ダメ(笑)
2019/04/08(月) 14:13:07.53ID:qrhOu38P
>>535
納得した
話題のループやグダグダ言う点は確かに酒の関の会話レベル
シラフで話してる奴はすげぇわ

>>539
thisかMe無いんだよな
callerでオブジェクトの取得するには、
名前を取得してforeachで名前と一致するオブジェクトを探して・・・
になると思う。超面倒くさい

>>542
ピボットに限らずEXCELは使わない機能が膨大にある
やりたいことを決めて、機能を使いこなすのが一番早い
2019/04/08(月) 14:58:52.26ID:9sVYCwmO
質問者はShapesコレクションのFor Eachで消えるボタンだって言ってますよ
2019/04/08(月) 16:07:16.94ID:20rc9alP
>>542
>理解するコツ
それこそ、マニュアルを読めよまたはググれよ
例えば以下でもいいけど、他にもいっぱいある
https://www.becoolusers.com/excel/pivottable.html
だけど、頭の構造によって読んでも分かんない奴も多いからな
必要な時に使うんじゃわからんバカには無理って言ってるんだよ
普段から使えよ
2019/04/08(月) 16:21:30.00ID:20rc9alP
>>544
お前「caller」の意味わかって書いてる?
今回の場合に使うべきかもわからんのか?
2019/04/08(月) 16:32:09.53ID:qrhOu38P
>>547
そう真剣になるなよ、本題についてはもうとっくに>>494で終わってる

で、
>ボタンをオブジェクトとして取得
これについて俺も知りたい
callerは他言語で言うthisみたいなもんで、通常はオブジェクトで飛んでくる。もうちょい正確に言うとオブジェクトの参照だな
これがオブジェクトで飛んでこないからめちゃくちゃ使い勝手が悪い
オブジェクトで取得する楽な方法あるの?
2019/04/08(月) 16:59:10.82ID:eHXY0QFN
お前らもしかしてわざと無能演じてんの?
だったらすげえや全然気づかなかった

set b = ActiveSeet.Shapes(Application.Caller)
For Each x in ActiveSeet.Shapes
If Not x Is b Then x.Delete
Next
550デフォルトの名無しさん
垢版 |
2019/04/08(月) 17:02:54.81ID:cVIHdDyE
>>546
「いろいろ使ってみろ」とか「マニュアル読め」じゃないんだよ。
自分の言葉で説明してほしいということ。

具体的にはこれはデータベースを扱っているのだから
「フィールド」とか「グループ化」とか「集計」とかそういう具体的な用語を使ってだ。
551デフォルトの名無しさん
垢版 |
2019/04/08(月) 17:08:22.50ID:9eoJzmPe
VBAの特徴
内部抗争が酷いが外敵には一致団結して退治する
2019/04/08(月) 17:08:40.67ID:lpvwS4NY
>>550
それこそスレチだわ 初心者質問スレでも池よ
2019/04/08(月) 17:12:22.10ID:qrhOu38P
>>551
仲良く喧嘩してるんだよwwww
2019/04/08(月) 17:15:00.42ID:lpvwS4NY
>>549
確認してないが、それ複数ボタンで動くか?
フォームコントロールとActiveXコントロール有るけど
2019/04/08(月) 17:20:52.07ID:ccKDHzfP
>>542
他人に期待しすぎ。
それが出来たら今頃は、サイト立ち上げたり、本出したり、どこかで講師やっとるがな。

MSからも含め、VBAよりもピボットテーブルの情報は少ないし、
パーツ、パーツで区切れるVBAよりも、
広範囲で漠然とした「自分のやりたいこと」に使えるかどうか、
試行してみないとなんとも言えない。
2019/04/08(月) 17:26:33.08ID:eHXY0QFN
>>554
押されたボタン以外は消える
ボタン1つと画像複数っていう質問なので削除ボタン以外のShapeを一括削除する仕様だと勝手に読み取った
少なくともNameで比較はありえねーよカスというサンプル
557デフォルトの名無しさん
垢版 |
2019/04/08(月) 17:28:02.25ID:cVIHdDyE
こんなとき図星の決まり文句言わなきゃなんないのかぁ。
「 み ん な 理 解 で き て い な い 。」

理解できてる人なら竹を割ったようにスッキリと解説できるはず。
使いまくれとか、サイト見ろとか、試行してみないとなんとも言えないとか、全部言ってる人がピポットテーブルの本質を理解できていない決定的な証拠じゃないか。
2019/04/08(月) 17:39:46.71ID:qrhOu38P
>>557
当たってるよ。理解する必要ないからね
ピボットで作るデータの9割ぐらいは基本機能で瞬殺だから「使って覚えろ」としか言えない
複雑な事をしたければ作業列でパーっと作った方が早い、深く理解して得るものが少なすぎる

そもそも大事なことは目標の設定の仕方だから、このスレでどうこう言えない
2019/04/08(月) 17:52:36.06ID:TKIMwKN2
>>549
ShapeRangeコレクションにRemoveメソッドがない以上これが最適解だな
2019/04/08(月) 19:14:24.14ID:P0CHcdLi
>>556
なんでName で比較しないの?
2019/04/08(月) 19:33:54.35ID:V7WRm0mr
foreach列挙中に対象コレクションから要素消すなよ
2019/04/08(月) 20:31:30.66ID:r03ED/xX
VBAの演算子で一方だけ評価するのってありますか
i < 100 OR data[i] = x みたいに境界超えてないか先にチェックしたい
2019/04/08(月) 20:33:46.80ID:r03ED/xX
i < 100 AND data[i] = x
逆でした
2019/04/08(月) 20:45:56.01ID:lSCOP8uB
>>562-563
> VBAの演算子で一方だけ評価するのってありますか
ない
If i < 100 Then If data(i) = x Then ...
ってやるしかない
2019/04/08(月) 21:11:16.19ID:KL9iMO+X
>>549
???
それって、固定の名前でやるのに比べてどの程度メリットが有るの?

固定の名前でやる方がまだましだと思うんだが。
2019/04/08(月) 21:11:26.99ID:AlMdksUV
>>560
文字列型プロパティの比較判定は重い処理だし、オブジェクト命名の運用に処理結果が依存してしまう
組み込みの列挙定数やオブジェクトポインタで比較判定した方が安全なのは事実
2019/04/08(月) 21:13:41.55ID:ARCkkcA0
・プログラムとして危険
vs
・vbaだしどうでも良くね

ファイッ
2019/04/08(月) 21:15:36.62ID:KL9iMO+X
>>566
ほう。
画像が100個あった場合、
文字列で比較と比べてどれくらい速くなるの?

まったくアホらしいと思うんだが。
2019/04/08(月) 21:40:37.98ID:besmAe1s
なんでわざわざ名前で比較したがるの?
2019/04/08(月) 21:48:14.01ID:r03ED/xX
>>564
ありがとうございます

発狂する
2019/04/08(月) 21:48:31.68ID:besmAe1s
ぶっちゃけ1000回比較しても体感できる差は無いけど
ならどちらがいいかは完全にセンスの問題になるわけで

オブジェクトを比較したい場面でオブジェクトそのものを比較できるのにわざわざ名前みながら比べるとか

頭の中どうなってるの
2019/04/08(月) 22:07:24.49ID:4iOzxu9L
>>569
>>571
別に、名前で比較したいわけじゃ無い。
俺は最初から、こんなのどれでやっても良いだろ派だ。

最初からパフォ−マンスに大きな差が出ないと思ってたし、センスの問題はかなり気にする方だが、今回の問題ではどれでやってもセンスが悪いとも思わない。
2019/04/08(月) 22:17:03.71ID:besmAe1s
>>572
Is知らなかったからって取り繕わなくてもいいよ
2019/04/08(月) 22:26:49.07ID:4iOzxu9L
>>573
ハァ?
そんな初心者のわけねえだろ。

それに、
>>549って俺に言わせると名前でやってることになるんだがw

>>539で、「どうやって取得する?」って書いたのは、結局名前で取得することになるんじゃね?って意味で、名前でってのはApplication.Callerみたいに名前を取得したら結局同じじゃね?って意味なんだがw
2019/04/08(月) 22:36:44.56ID:lpvwS4NY
>>573
だから、それは対象のボタンオブジェクトが分かってる場合だろ
最初のお題と違ってボタンがいくつあるかも分からん条件で効率よくってはなし
俺はNameプロパティは変更出来るだろ
だからTypeプロパティだろって言っているだけ
2019/04/08(月) 23:06:03.11ID:AlMdksUV
質問者そっちのけ
2019/04/09(火) 00:18:47.52ID:8HUOoxmg
>>549はデバッグ時に疲れからかモジュールにカーソルをあわせてF5を押してしまう
2019/04/09(火) 00:44:23.79ID:cuTyECFJ
この中で一番重いのはShapes.Delete
それ以外をどんだけ工夫しても、逆にどんなタコなコーディングしても、体感できる差は出ないから
579デフォルトの名無しさん
垢版 |
2019/04/09(火) 01:51:44.81ID:flshAmjZ
【12日まで】500円を貰える春のばらまきキャンペーン開催中です 
     
@ スマホのApp Storeから「プリン(pring)」をインストールする  
A 会員登録を済ませる     
B 下図の通りに進む  
https://pbs.twimg.com/media/D3pRtQiUwAQLMUR.jpg    
C コードを登録 [5gAYSz]  

これで五百円を貰えます  
スマホでセブンATMからお金を下ろせたり(キャッシュカード不要)便利なアプリですのでよろしければご利用下さい
2019/04/09(火) 06:47:19.14ID:WguqqX2K
>>576
>>488-489で解決してるからいいんじゃん
あとはよくあるチンケな知識でのマウント合戦だからスルーでオケ
2019/04/09(火) 08:39:46.28ID:mg+oftxD
マウントやめたら色々な方法見れて役に立つんだけどな
何故一番になりたがるのだろう
582デフォルトの名無しさん
垢版 |
2019/04/09(火) 08:43:42.22ID:sTjNwrNP
そうさぼくらは世界にひとつだけの花
583デフォルトの名無しさん
垢版 |
2019/04/09(火) 08:45:37.14ID:sTjNwrNP
小さい花や大きな花
ひとつとして同じものはないから
No1にならなくてもいい
もともと特別なonly one
2019/04/09(火) 11:49:39.06ID:4ZugEZRH
まあ、なんだな久しぶりに実際に使ってみた
ルーチンの仕様
1.フォームコントロールとActiveXコントロールで作成したShapeオブジェクトは全て残す
2.それ以外のShapeオブジェクトは全て消す
3.対象ShapeオブジェクトはActiveSheetのみ
3.フォームコントロールとActiveXコントロールどちらでも動作する

Public Sub コントロール以外のイメージ削除()
Dim shape1 As Shape
For Each shape1 In ActiveSheet.Shapes
'MsgBox (shape1.Name & ":" & shape1.Type) 'これは確認用です・・・コメントアウト
If shape1.Type <> msoOLEControlObject And shape1.Type <> msoFormControl Then
shape1.Delete
End If
Next
End Sub

実際に作成してみて感じたこと
Nameプロパティは全て違うものが振られていく・・追番が付く
フォームコント―ロールを使ってる人がやっぱいるんだ・・俺はActiveXコントロールしか
普段は使わない
2019/04/09(火) 13:45:14.72ID:4ZugEZRH
追記しておくけど
目的・仕様をハッキリさせなきゃどんなルーチンも価値評価が難しいな
定義済み定数は定義名を使えよ普通に、ウォッチ式で確認できるから
>For Each x in ActiveSeet.Shapes
誤記スンナ ×ActiveSeet ○ActiveSheet
2019/04/09(火) 16:00:23.87ID:v/sKiq9O
>>480
俺がどうしてもexcel捨てられない理由が唯一
ピボットテーブルがあることなんだけどな
(その他のオフィス製品にも近ごろは
載っているようだが
VBAからの操作に慣れきってると
なかなか乗り換えきれない)

手放せなくなるまで使ってみてください
2019/04/09(火) 22:54:10.35ID:SAQnN0sI
>>569
hashCodeがないから
2019/04/10(水) 10:58:53.58ID:6J3r6J/I
全部プロシージャで集計と報告系のマクロ書いてるけどグラフ出力とか一部は指定サイトの結果取得とか機能増えすぎて9モジュール1800行とかになってる
なんちゃってプログラマの俺にはもうお辛い…
2019/04/10(水) 11:28:22.21ID:UESsnIOi
動きゃいいよ
要件がリッチになりすぎたなら、それはもう技術的に何とかしようとするより外部のSaaSを導入することを検討すべき
2019/04/10(水) 11:37:22.82ID:Y1e0LUUu
>>588
スマンが君の書いてる機能はマクロを使わずにできるものだが
>集計と報告系のマクロ書いてるけどグラフ出力とか一部は指定サイトの結果取得
集計と報告系・・・当然簡単だろ、場合によってはワードも利用する
>グラフ出力
ピボット使えよ、何が不足してるんだ?
>一部は指定サイトの結果取得
こんなのクエーリーの標準機で、起動時に読み込むとか、一定時間おきに読み込めよ

面白がってVBAにしないで、標準の機能で出来ることはExcel様に任せるよ
2019/04/10(水) 12:02:10.37ID:P1T0QVnr
そこまで作り込む能力があるなら素直にPS, Python, Ruby, node.jsあたり学んだほうが幸せになれるぞ
2019/04/10(水) 12:06:33.25ID:UESsnIOi
SIerすらメンテできないようなものを作ると後々自分の首を締めることになるよ
ずっとお守りに時間を奪われて出世は閉ざされ、そのうちシステム刷新でクビよ
2019/04/10(水) 12:13:08.23ID:Y1e0LUUu
ってか、Excelの標準機能も満足に使えないのに無理やりVBAを使うのは
やめた方が良い、標準機のでできることはコードにしないな
2019/04/10(水) 12:26:08.65ID:HiznTzOg
>>588
別に多くも無いだろ。
普通の量だよ。
2019/04/10(水) 12:36:37.12ID:UESsnIOi
規模的にスケールするような作り方を理解した上でなら全然大した量ではないけど、
なんちゃってプログラマのアドホックなコーディングはだいたい1000行を超えたあたりで限界が来る
俺は絶対お守りしたくない
2019/04/10(水) 12:43:15.27ID:HiznTzOg
>>595
そういうののお守りもしたことあるよ。
いやー大変だった。

基本、デバック実行で、何の処理をしているのかを類推することになる。
2019/04/10(水) 12:54:25.06ID:Y1e0LUUu
>>596
それ、楽しいだろ?
2019/04/10(水) 13:43:17.52ID:Fi06WKE0
>>593
そうなのか?
自分はほぼOffice共有マクロでやっていてExcel固有の機能とかは最低限しか使ってないな
599デフォルトの名無しさん
垢版 |
2019/04/10(水) 13:45:51.76ID:ZITKsaEc
>>592
開発者ならそうだろうけど
開発者じゃなくて業務をしてるだけ
みたいな人がついでに使うのがexcelvbaって感じだから
その人が首になる事はないんじゃないかなぁ?
それにそんな本格的なシステムを組むほど予算が無い
みたいな会社規模だとどのみちどうしようもないし
そういう界隈用って有る様で無いし
表計算
という点では予想外の使われ方だとは思うけど
なんかそういう小零細向けのアプリが有った気がしたけど
2019/04/10(水) 13:54:38.83ID:Y1e0LUUu
>>598
それが、組織内での共通認識ならいいんでないの
マクロは俺は基本的に避けるが、好みだよ
でも、「Excel固有の機能とかは最低限」じゃあExcel使う意味あるの?
2019/04/10(水) 14:02:44.70ID:Y1e0LUUu
まあ、勘違いするバカ多いんだよな
プログラムは自分で作ってるとか、俺が考えたとか(笑)
2019/04/10(水) 14:16:50.81ID:sSiaigIF
俺が育てた AA略
2019/04/10(水) 16:17:57.40ID:Fi06WKE0
>>600
ExcelはUIとしては優れていると思うよ。
操作するユーザーとのデータのやりとりとかグラフ出力とかね。
でもSQLでやるようなクエリーはもちろん不向きだし、途中段階のデータ加工処理にも不向きだと思うんだがね。
2019/04/10(水) 16:30:55.55ID:Y1e0LUUu
>>603
でも、そんなの君の好みだろ
不向き気なら使う必要ないな
ってか使えるとこだけうまく使うんだろ
なのに文句だけいゆうのな
2019/04/10(水) 16:34:40.21ID:Y1e0LUUu
まあ、何も使いこなせない奴って文句しかないんだよな
2019/04/10(水) 16:43:58.33ID:Y1e0LUUu
>>603
まぬけは返事も出来んか?
2019/04/10(水) 18:36:25.41ID:Fi06WKE0
>>604
文句なんか言ってないだろ?単に不向きなことはExcelにやらせてないというだけのことじゃないか
そもそも>>593がそっちの趣味主観から始まっているわけだしな
2019/04/10(水) 18:38:22.55ID:Fi06WKE0
>>606
そっちこそ俺の書いた

「SQLでやるようなクエリーはもちろん不向きだし、途中段階のデータ加工処理にも不向きだと思う」

に具体的な反論があるなら言ってみてはどうなのか
2019/04/10(水) 20:18:31.42ID:+T6khn6s
>>608
PowerPivotとPowerQuery使えば楽勝だぞ
2019/04/10(水) 22:29:11.86ID:Y1e0LUUu
>>608
>「SQLでやるようなクエリーはもちろん不向きだし、途中段階のデータ加工処理にも不向きだと思う」
>に具体的な反論
お前は不向きの内容も具体的に書き込んでないのにどのようなアドバイスが欲しいのかな?
処理速度かな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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