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/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が台頭してきましたが
これにもマクロは使えるの?
2020/02/04(火) 22:37:40.55ID:QPddTA8md
>>505
ごめん。
元の質問が値貼り付けしてるから大丈夫だ。
2020/02/05(水) 00:55:11.04ID:6fUVVF1Va
>>508
GASがある
VBAよりは遥かに優れてるよ
2020/02/05(水) 15:59:16.28ID:N1BYfKU30
なんかVBAの実効速度が今日から急に早くなったんだけどなんでだろう?
2020/02/05(水) 19:22:41.84ID:yswtwGvQ0
使うデータ同じで速度が変わったんなら裏でなんか重い処理でも動いてたんじゃないの
2020/02/05(水) 19:37:41.90ID:GjIRsdly0
windowsのアップデートで妙に早くなることはたまによくあるな
2020/02/05(水) 20:42:09.91ID:ljVFwt830
>VBAよりは遥かに優れてるよ

言い過ぎ。
というか、シート内で出来ること以外は機能が殆どかぶってないと思うが。
2020/02/05(水) 22:14:16.66ID:QzJPWqba0
>>510
Excelでいう「マクロの記録」みたいな機能ある?
だったら乗り換えたいかも
2020/02/05(水) 23:05:17.88ID:ljVFwt830
マクロの記録はあるが、乗り換えって・・。
使い分けだろう。
517デフォルトの名無しさん (スプッッ Sd3f-5XTe)
垢版 |
2020/02/06(木) 10:38:54.91ID:Lc0GjY0Ud
エクセルは多人数で同一ファイルの同時使用が出来ないからgoogleの方が遥かに便利
2020/02/06(木) 11:40:29.55ID:W5BIAByhM
ローカルのExcelブックからDBに上げる・DBからブックに落とすだけのマクロは非常に多いからな
VBAマクロの代替以前に、Googleスプレッドシートに移行した時点で不要になるゴミはとても多い
2020/02/06(木) 18:57:22.24ID:QU3mlgEx0
excelブックをメールで行ったり来たりさせてメールボックスパンパン
→消した後に悲鳴

何度見たことか
520デフォルトの名無しさん (ワンミングク MM7f-DTjJ)
垢版 |
2020/02/06(木) 19:11:07.60ID:FEAB4c07M
>>510
win32api使えるのかよ?
2020/02/06(木) 19:33:40.30ID:W5BIAByhM
>>520
どうしてもWinAPI叩きたかったら、C#とか好きな言語で書いてWebAPIでスプレッドシートに反映させればよい
帳簿に手足は必要ない
2020/02/06(木) 19:38:03.11ID:S5nSkDf80
面倒臭いじゃないか
2020/02/06(木) 19:43:08.95ID:W5BIAByhM
普通はその結果をDBなりに同期させる仕組みを考える方が面倒臭いと思うけど、仕事したことないんだろうね
2020/02/06(木) 19:47:10.12ID:QU3mlgEx0
VBAとGASだとさすがにVBAの方が上かな
GASはローカルファイルへのアクセス権がなさすぎるのと、他スプレッドシート扱うのがかなり面倒くさい。まぁしゃーないっちゃしゃーないんだけど
さっとスクリプト組みたい時はVBA+Excelシート以上にお手軽な環境は無いと思う

>>523
webに対しては確実にgoogleスプレッドシートの方が上だが・・・

どっちが上ってのは無いと思う。使い方次第だろう
2020/02/06(木) 20:18:44.88ID:S5nSkDf80
>>523
DBならaccessとodbcでいいや
2020/02/06(木) 20:23:02.70ID:5wTMgkbk0
DB接続してないエクセルとか糞だろw
GAS?情報共有が楽なだけで話にならん
2020/02/06(木) 20:50:55.98ID:S5nSkDf80
>>523
そもそもexcelやaccessならADODBで簡単にデータベース連携できるし
2020/02/06(木) 21:01:17.75ID:QU3mlgEx0
そもそもみんなどういう風に使っているんだ?
俺は・・・
・メインシステムはweb上にあり、ベンダーに開発してもらっている。csvを吐き出すシステムがある
・csvの元になるSQL部分は自作(しょっちゅう変わるから自分で作ったほうが早い)。
・後はそのcsvに対してvbaでちゃーっと加工して配布(順序変えたり見やすくしたり)
・ローカルネットワークにもファイルを置く

こういう使い方だとVBAの方が楽なんだよね。GASを使う理由があまりない。データが必要なら、都度csv落とせば良い
ODBCとかめんどくさくない?
php直接書いたほうが遥かに早いし楽だし、データの劣化を最小限に抑えられると思うんだけどなぁ
2020/02/06(木) 21:12:09.33ID:S5nSkDf80
>>528
前のプロジェクトvbaのコード少し書くだけでDB連携してたぞ
そこのプロジェクトはなんでもできる系が多数いたけどな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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