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/01/27(月) 20:35:24.91ID:2ZMm50820
>>408
あ、すいません
プログラム上ではなくて、excelの画面上でボタンの名前を確認、変更したいのです
ちなみにボタンは「開発」タブの「コントロール」で「挿入」から選べるものを使ってます
2020/01/27(月) 20:37:54.19ID:KoUrFee7x
>>409
だから、フォームコントロールとActiveXコントロールのどっちなの
2020/01/27(月) 21:01:21.61ID:2ZMm50820
>>410
失礼、フォームコントロールでした
2020/01/28(火) 07:51:36.53ID:C+B4t99Kx
>>411
名前を調べるなんて煩瑣な処理にしなくても、フォームコントロールだけを消さずに画像だけを消したいなら下のようにやれば良いのでは

Public Sub pics_delete(sname As String)
Dim delShape As Shape
For Each delShape In Worksheets(sname).Shapes
With delShape
If .Type <> msoFormControl Then
If .Type = msoPicture Then .Delete
End If
End With
Next delShape
End Sub

delShape.Typeで取得できる図形タイプを表す定数値がMsoShapeType.msoFormControlだったらフォームコントロール、MsoShapeType.msoPictureだったら画像だと判断するようにする
他にも消したいタイプの図形があるなら削除判定の箇所で任意のMsoShapeType列挙体に当てはまるかType属性を持っているかどうかを判定させたら良い
2020/01/28(火) 09:01:31.91ID:Ft5XlNEA0
>>411
ホームタブ右端の検索と選択→オブジェクトの選択と表示
からシート内オブジェクトリスト出てくるけどこれが名前だったかな
2020/01/28(火) 09:48:07.01ID:9/9sPnJua
終わりの鐘は鳴り響いた
https://ascii.jp/elem/000/004/000/4000725/
2020/01/28(火) 10:02:58.52ID:Nfh+nWpkM
あとは新しいVBAウィルスが出てセキュリティ業者が騒いだらVBAは本当に終わりだな
2020/01/28(火) 10:46:16.03ID:ih37tboE0
>>414
それ前にも貼られたけど、今までのとの違いが分からんのだが
2020/01/28(火) 15:16:34.29ID:oKycYjGsM
>>414
VBAでもできる範疇なら全く覚える気起こらん
2020/01/28(火) 17:56:01.82ID:WltGdJqx0
覚えてないことはできるかどうかも判断できない
2020/01/28(火) 18:12:38.87ID:OkfjSvr+0
>>412
本来はこれがやりたかった、shapeのプロパティをちゃんと調べていなかったので
出来なかった処理でした
他にも似たような処理があるので、コード使わせていただきます

>>413
私の質問に対する回答は、これが求めていたものでした
開発タブしか見ていなかったんですが、ホームタブでいけたんですね

お二人共ありがとうございました
2020/01/28(火) 18:28:16.91ID:jS595giQM
>>417
そうか?
俺はVBAの代わりにTypeScript使えるなら乗換えるよ
2020/01/29(水) 10:51:07.25ID:QiJT1T/Bd
>>420
どの程度使えるかだな。
全く同じことができるなら乗り換えるだろうな。
2020/01/29(水) 20:53:08.43ID:WcpQW9dq0
まったく同じことしかできないなら乗り換える要素がない
2020/01/29(水) 21:53:26.65ID:QiJT1T/Bd
全く同じことができるなら、新規に憶えるだけじゃん。
それはこっちの労力だけで済む。
今後移行していくとすればその程度大した問題じゃない。

今まで他言語では出来なかったり、不便だったからVBAを使っていたわけでね。
2020/01/29(水) 22:24:20.41ID:PCXIkBj+0
>>422
同じことが楽にできるなら乗り換える理由になるでしょ?
2020/01/29(水) 23:05:27.98ID:vXudwKK20
今までと同じことをするだけなら、今までに書いたコードをそのまま使い回すのが一番楽だよな
わざわざ書き直す手間はだれが負担するんだ
2020/01/29(水) 23:12:48.36ID:KmqvK0eda
>>425
いうてVBAなんて実質的には大したことやってないのが大半だろ
資産価値なんかゼロだよゼロ
コーダーの能力が低すぎて驚くほど冗長なコードになってるのは多いけど
2020/01/29(水) 23:27:08.67ID:/IekKsgr0
sheet("sheet1").select!
さよか〜

個人的にはjQueryが一番嬉しい
あれ、記述が超絶楽ちんなんだよ。cssセレクタとかExcel vbaと感覚的にかなり似てる部分があると思う
$("sheets!").cell(1,2).backgroundcolor("red")
とかね
と書きながら思ったけどこれ別に言語買える必要ないな

googleのapps scriptは冗長でかなりめんどくさい 
強制的にアドイン扱いだしタイプが長い
2020/01/30(木) 01:32:32.11ID:OC7VpsKDd
>>425
書き直す必要は無いでしょ。
これからの話。
2020/01/30(木) 01:33:34.48ID:OC7VpsKDd
>>426
君のコードは大したことやってないの間違いじゃね?
2020/01/30(木) 08:06:07.77ID:c+cMZ6b7a
ぶったけインテリセンス次第なんだよなぁ
javascriptでインテリセンスが優秀なら移らない理由ないし
インテリセンスが不自由ならVBAやめないし
2020/01/30(木) 08:13:50.21ID:wtwPJonTM
>>429
VBAに大したことやらせなきゃいけないなら設計ミスだよ
2020/01/30(木) 18:17:30.68ID:Pn/eUKFJM
VBAで大したことやっちゃいかんでしょ
2020/01/30(木) 18:33:44.35ID:dbuen9v3a
自分の仕事の範囲で統計解析とかやるけどな
2020/01/30(木) 18:53:21.09ID:wB7TmKf3M
それがPythonだったら同じことやってても倍の年収貰えるのにもったいない
2020/01/31(金) 00:09:52.88ID:vDcmNEzT0
jQueryももう大分レガシー扱いだぞ
2020/01/31(金) 02:51:37.91ID:5fr2LAkld
Pythonでも無能は収入低いぞ。
437デフォルトの名無しさん (ワッチョイ 6a94-rlSO)
垢版 |
2020/01/31(金) 02:57:44.63ID:My55hBAe0
VBAのセキュリティは大問題
まともな会社は使用禁止
あんたの会社は禁止されてるよね?
2020/01/31(金) 03:12:26.11ID:5fr2LAkld
今まで、銀行、通信大手D社、保険、金融で働いたが禁止になってる所なんて無かったがね。
寧ろ、他アプリのインストールは基本禁止だったけど。
2020/01/31(金) 03:14:49.50ID:5fr2LAkld
そういやあ、某電気メーカーとかも2ヶ所有るけどどっちも禁止じゃ無かったな。
2020/01/31(金) 19:54:00.67ID:tTpxWp9S0
>>437
VBA にどんなリスクがあるというのですか?
2020/01/31(金) 20:31:33.67ID:3L7hmACM0
アスタリスク
2020/01/31(金) 20:37:16.44ID:z8AuaM8Bd
フリスク
2020/01/31(金) 20:38:06.28ID:cFUtKE40d
バジリスク
2020/01/31(金) 20:58:33.01ID:HqJxIhd9a
VBAはブックを開いただけで何でもやりたい放題で、脆弱性とかそういう以前の問題なの
例えるなら、訪問者に対してインターホン越しに応対するなどの身の安全を守る手段が何もなく、
無視するか家に上げるかの選択肢しかない
2020/01/31(金) 21:01:57.72ID:cFUtKE40d
古いExcelしか使ったことないんだろうね
2020/01/31(金) 21:05:51.22ID:tTpxWp9S0
>>444
その例えは例えになっていないと思いますよ
具体的にどういう危険性があるのか、それがごく普通の Windows アプリ by win32api & MFC と比べてどのように危険になったのか、それを示していただけませんかね
2020/01/31(金) 21:11:45.14ID:qTFRZrOJ0
>>444
そんなのアプリも一緒じゃん
バカなの?
〉無視するか家に上げるかの選択肢しかない
あぁ、真正バカですね
2020/01/31(金) 23:14:09.09ID:3L7hmACM0
俺も知らんが、Excel脆弱性でググると色々出てくるってことは、そういうことなんじゃないの?
2020/01/31(金) 23:17:05.34ID:A6FbBq7w0
シート1のA行を1列目から右にセルに入ってる文字を配列に順番に入れるにはどうしたらいいですか?
2020/01/31(金) 23:23:17.84ID:3L7hmACM0
 1 2 3
A
B
C

こ、こうか?
画面が横になってないかそれ。
2020/01/31(金) 23:34:43.97ID:XWsoxoln0
>>449
WorksheetFunction.Index(取得したい範囲or取得した二次元配列,1)
2020/01/31(金) 23:35:50.05ID:Y35MubRb0
>>449
dim ary as variant
ary = シート1.range(A行1列目から右のセル).value
2020/01/31(金) 23:42:44.02ID:XWsoxoln0
それだと二次元配列になって使い勝手悪くないか?
イテレータで回すならいいんだろうけど・・・
2020/01/31(金) 23:57:41.94ID:XWsoxoln0
ミス
WorksheetFunction.Index(取得した二次元配列,1,0)
だった
455デフォルトの名無しさん (ワッチョイ 397c-wdG2)
垢版 |
2020/02/01(土) 00:00:37.73ID:7UP4LFJm0
>>453
「A行1列目から右」が一次元か二次元か判断付かん
2020/02/01(土) 00:45:50.64ID:/851YuNs0
>>449
Excelでは、縦の並びが列、横の並びが行
普通はA列1行目みたいな表現になる
2020/02/01(土) 01:30:43.62ID:vD0VjYxE0
配列って言われたら普通はVBAの話だと思うが、実はシート関数の話をしているんじゃないか?
2020/02/01(土) 11:40:24.75ID:6d1xNKB7d
>>446
まあ、マクロウィルスは作成が簡単というのはあるな。
VBAのプログラムを作成するプログラムが簡単に作成出来るので。

但し、Excelもそれを封じる為にセキュリティーセンター内で、そういうプログラムの実行をするための設定としての「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックがデフォルトで外れている。
このチェックを付けて運用するのは危険だな。

でもここでチェックが付いてるとVBAが無くても勝手にVBA組まれちゃうんで、VBAの有る無しにかかわらずExcel自体が危険だな。
従って>>444のVBAの危険には該当しない。

>>444の言う危険って何だろうな?
所詮、よく知らない奴が知ったかぶりで語ってるだけ?
2020/02/01(土) 11:46:35.95ID:RZeoMljp0
他の言語で業務を仕組化するって要は自分の価値を切り売りしてるようなもんだからな。
自分への属人性を排除して誰でも自分と同じ作業ができるようにする。
そんなんで金もらっても用がなくなれば切られるだけ。一時的に給料が上がるだけで自分にとって何のメリットもない。
それよりVBAで自分の仕事をブラックボックス化して属人化しといたほうが得。
2020/02/01(土) 12:24:16.95ID:JknOw5Wd0
>>459
転職後にそういうカスを追い詰めるのが趣味です
徹夜でプログラム読み切ってバグとミスを指摘し続けて「え、ここじゃないんですか?みた瞬間にわかりますけど・・(大嘘)」
で大概の人はイライラMAXでデバッグが手につかなくなるwざっこwww
2020/02/01(土) 12:39:36.37ID:6d1xNKB7d
>>459
ん?
他の言語ってWeb系の話?

普通は、コンパイルでコード見えなくなる他言語よりVBAの方が属人性は無いと思うけど。
2020/02/01(土) 12:41:37.55ID:6d1xNKB7d
>>460
簡単なプログラムばかり見てきたんだね。
俺が扱うコードでは他人が書いたもの含めてそんな大変なことしたくない。
2020/02/01(土) 12:56:41.71ID:vD0VjYxE0
Test(ByVal a As String)
Test(ByRef a As String) ← こっちって型指定する意味ある?

Test(ByRef a) か Test(a) だと何かまずい?
2020/02/01(土) 12:57:29.84ID:JknOw5Wd0
>>462
そりゃvbaなんてどう書いてもベタ書きにしかならんよ
ラムダ式やコールバック関数ほかなーんにも無い、順番に読むだけ
2020/02/01(土) 13:02:40.39ID:JknOw5Wd0
>>463
型が違う場合、コンパイル時点でエラーに出来る
けど型がふわふわのvbaでやる意味は薄いとは思う

Sub foo()
a = 1
Debug.Print Test(a)
End Sub

Sub Test(ByRef a As String)
End Sub
2020/02/01(土) 13:06:17.87ID:/851YuNs0
まあ、たまにタイプミスを発見できるとか、時間が経ってからコードに手を入れたい時に型が書いてあれば確認しなくてすむとか、そういう薄いメリットはあるかな
2020/02/01(土) 13:21:19.67ID:RZeoMljp0
パスワードかけてるのにどうやって見るんですかねぇ、犯罪者さん。
2020/02/01(土) 13:22:06.87ID:6d1xNKB7d
>>465
型定義してないコードなんてよっぽどだな。
そんな所は碌なもんじゃねえw
2020/02/01(土) 13:23:10.13ID:6d1xNKB7d
>>467
VBAのパスワードは基本的に解除できる筈だが。
俺の知識が古い?
2020/02/01(土) 13:25:52.77ID:RZeoMljp0
技術的に可能だから不正アクセスするのか
犯罪者は発想が違うな
2020/02/01(土) 13:31:03.95ID:6d1xNKB7d
>>470
俺のまわりでは普通はパスワード掛かってないがw
お前が自らの知識の無さを披露したから指摘しただけだよ。
2020/02/01(土) 14:50:58.68ID:RZeoMljp0
まぁ3流プログラマじゃ数字の流れは盗めてもその数字が意味するところまでは汲み取れないのが現実
相手がプログラミングができないと思い込んで知識窃盗を試みて数値の流れを盗んだところで自己満足
それをどう使うかなんて役員に対して説明もできんだろ
そんな奴はプログラミングできるぼくちゅごい!で思考停止してるアホだな。
2020/02/01(土) 15:24:51.88ID:JknOw5Wd0
>>467
プログラムは会社の資産だから別に不正アクセスでもなんでも無いよ?
自分の家の鍵を自分の鍵で開けてるだけだよ
それにvbaのパスワードとか秒で破られるもので防ごうってのも変な話
2020/02/01(土) 15:27:07.32ID:JknOw5Wd0
>>472
そんな誰にも分からないような高等な知識をわざわざパスワードかけて、毎回パスワード解除してるの?なんの意味があるの?手間なだけでは?
2020/02/01(土) 15:40:01.24ID:RZeoMljp0
凄くなくてもお前には無理だよ
2020/02/01(土) 16:05:04.46ID:6d1xNKB7d
負け惜しみが酷い。
パスワード解除出来ることも知らない程度の奴の高度なプログラムなんて、こっちにとっては初心者コードじゃねーの?
精々、中級者までだろうよw
2020/02/01(土) 16:20:23.93ID:RZeoMljp0
で、コードがかけたから何?
結局実務からseが要件定義しないとお前らは何もできないし、要件定義された内容を分割して指示通りにコード化してるだけだろ。
それのどこが偉いの?偉いのは実務だよ。
それにパスワードは外せて簡単に内容見れるとか言うなら俺が自分で計算やDB用ののdll書いてブラックボックス化を進めればいいのか
いくらでもブラックボックス化はできるけど信用の上に立って簡単なvbaで処理してるにすぎんよ
プログラマーが偉そうにするなら俺は協力しないし、会社命令でも手を抜くね
まるで属人化排除が印籠かなんかで相手の気持ちも考えず従えとか言ってくる勘違い馬鹿に協力するわけねぇわ
2020/02/01(土) 16:45:45.26ID:JknOw5Wd0
>>477
あぁ、何か変と思ったらこのスレの人をプログラマーと思っていたのか
このスレの大半は事務の人間だよ
俺は両方の経験者だけど

あんたは自分でレベル高いと思っているかもしれないけど、それほどでも無いって自覚だけはしておいたほうが良いぞ
2020/02/01(土) 16:48:36.87ID:RZeoMljp0
教養レベルのことを書いたらレベル高いって主張してるように見えるならお前も大したことないな
気をつけろよ
2020/02/01(土) 17:08:00.96ID:JknOw5Wd0
虚空に向かって喧嘩してるアホに言われたくないわw
2020/02/01(土) 17:09:16.56ID:RZeoMljp0
あれれ〜>>460でからんできてそれ言うの?頭大丈夫?
2020/02/01(土) 18:04:50.41ID:RZeoMljp0
他人のエクセルファイル盗み見るとか公然と言うカスは教えてくんにも劣る犬畜生だという自覚すらないからな
教えてくんならググレカスで済むけどおしえてくれないならファイル盗むわとかほんと頭いかれてるわ
2020/02/01(土) 18:20:25.98ID:6d1xNKB7d
>>482
随分な言い様だな。
パスワード解除出来ることを知識として知っているかどうかの問題だろ。

俺の場合はかなり昔、といってもOffice2007が出て少しした頃だが、社内マクロのメンテナンスの仕事した時に、既に会社辞めた奴の作ったVBAにパスワード掛かってて、会社に了解を取って解除したことあるけど、実際に解除する奴なんてそんなにいないだろ。

だいたい、何が楽しくて解除なんてするんだよw
パスワード掛かってるコードが糞コードじゃないなんてこたあねーぞ。
2020/02/01(土) 18:23:48.41ID:6d1xNKB7d
>>482
教えて君てw
そんなレベルか?
2020/02/01(土) 19:30:50.72ID:1yr2tbu5M
他人のファイルって、、
勝手に個人のファイルを会社に持ち込むな
2020/02/01(土) 19:46:14.96ID:JknOw5Wd0
しゃべるほどアホが露呈してて草
2020/02/02(日) 06:03:03.69ID:7y4L711k0
イチゴの苗を盗んでうちのイチゴは世界一とか言う人たちがいたなぁ
他人のエクセルファイルを盗んで一般化して得意になるって同じ精神構造なんだろうなぁ
日本の民度もここまで下がったらもうブラックボックス化して自衛するしかないね
2020/02/02(日) 07:54:10.43ID:+yWqX/mnx
コモディティとしか言いようがないVBAでコードを盗むだの何だのと言ってることが笑える
2020/02/02(日) 09:18:18.30ID:cGh+eVsA0
公表してもどうせ誰も読めやしないから、パスかけてないわってのが殆どだと思う。
490デフォルトの名無しさん (スプッッ Sdea-rlSO)
垢版 |
2020/02/02(日) 09:38:02.33ID:CPvk3cGFd
パスワードで保護する価値はないだろ
価値があると思ってるのは自分だけ
VBAは20年前に終わった古いコードでもう出尽くしてるから今更目新しいのはない
あると思ってるのは誰かがもう採用済み
2020/02/02(日) 10:05:41.35ID:+yWqX/mnx
パワークエリとかスピル関連でVBAのオブジェクトモデルにもどんどん新しい機能が追加されているぞ
目新しいものがないと言い切るのはおかしい
2020/02/02(日) 11:49:30.13ID:jXfyVbWx0
>>489
他人が作った、他人の仕事専用のコードなんか読む意味がない
2020/02/02(日) 11:55:17.84ID:cGh+eVsA0
>VBAは20年前に終わった古いコード

さすがにそれはないわ。
新しいバージョンから使えるコードがあるから。
2020/02/02(日) 19:10:02.86ID:mYIZG7DM0
>>490
コードをコビーされたくない財産と思っているのではなくて、書いた人の責任、管理を外れて、コードが勝手に変更されない為に保護するのが一般的。
2020/02/02(日) 19:14:37.59ID:mYIZG7DM0
他の言語では、変更可能な形で、実務者に配布なんてありえないからな。
2020/02/02(日) 19:26:59.62ID:mYIZG7DM0
オープンソースの歴史が示している通り、ケチケチするよりオープンにして仲間を増やしたほうが、自分の得になる。
2020/02/02(日) 20:14:04.59ID:hngL1FZE0
列をコピーする際にクリップボードを使わずにコピーをする方法ってないでしょうか?
Columns("A").Copy
Columns("B").PasteSpecial (xlPasteValues)
こんな感じでコピーをするとwindows10標準の「クリップボードの履歴」という機能が使われるらしく、負荷がかかってエクセルブック自体が強制終了してしまいます
数行のデータなら何も問題ありませんが数十万行くらいあると落ちます
「クリップボードの履歴」機能をオフにすれば問題なく処理されるのは確認済みですがオンの状態で作業をしたいです
よろしくお願いします
2020/02/02(日) 20:21:49.04ID:mYIZG7DM0
>>497
Columns("B").Value=Columns("A").Value
2020/02/02(日) 20:22:47.88ID:OwB/30gMM
Columns("B").Value = Columns("A").Value
2020/02/02(日) 21:11:52.76ID:cGh+eVsA0
Columns("B").Value = Columns("A").Value

より

buf = Columns("A").Value
Columns("B").Value = buf

の方がいいって本当かよ。
2020/02/02(日) 21:51:07.65ID:vSAu5ol40
Columns(1).Copy Destination:=Cells(1, 2)
2020/02/02(日) 22:05:15.57ID:mKkHkkxd0
Destinationは厳密にはクリップボード経由だけど、履歴を残したくないって目的の>>497は達成できるな。
2020/02/02(日) 22:06:50.74ID:TNVAL2WHd
>>494
俺がメンテナンスしてた時もこれに関してパスワード掛けてたな。
そこは、みんなVBAを弄るので勝手に改変されていって管理出来ないという問題があった。
それであるフォルダにあるブックのVBA全てに有効期限とパスワード掛けるコードとかをその時作った記憶がある。
2020/02/02(日) 22:08:48.13ID:TNVAL2WHd
>>498
多分、数式消えるよ。
2020/02/02(日) 22:35:10.30ID:nUy+9nC9r
>>504
ん?
2020/02/02(日) 22:56:08.65ID:hngL1FZE0
返事が遅くなりましたが理想通りの結果を得られました
コピーしてからペーストという概念に捕らわれていましたがこんなこともできるのですね
ありがとうございました
2020/02/03(月) 07:20:26.91ID:la6dU8XN0
>>500
特にそう書く意味は無いよ
508デフォルトの名無しさん (ブーイモ MM81-yzQx)
垢版 |
2020/02/04(火) 22:29:38.52ID:w6oOKiy/M
ExcelのかわりにGoogle spreadsheetが台頭してきましたが
これにもマクロは使えるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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