Excel VBA 質問スレ Part57

■ このスレッドは過去ログ倉庫に格納されています
2018/09/10(月) 21:42:39.57ID:K1uuwFLt
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part56
http://mevius.5ch.net/test/read.cgi/tech/1534976724/
2018/09/18(火) 23:12:46.57ID:/U1cQ/02
独りよがりの二―トならいるが。
190デフォルトの名無しさん
垢版 |
2018/09/18(火) 23:19:04.19ID:3Z5SLW4f
vba出来なくてイキられとるプロさん達w
2018/09/18(火) 23:32:08.88ID:dgXQ4G2s
>>188
そりゃ事務作業がほぼ0になるんだからイキってもいいよ
2018/09/18(火) 23:57:53.79ID:J2IpRlny
VBAは作ってからが本当の地獄だぞ
2018/09/19(水) 06:01:57.35ID:S2C8yCMr
おっと野田工房さんの悪口はそこまでだ
https://qiita.com/nodakoubou/items/1c92d33855cfd09ccc57
194デフォルトの名無しさん
垢版 |
2018/09/19(水) 06:47:53.78ID:wCu+CcEF
office.tanakaのコードには俺も前から疑問持ってた。vbaにクソコードが多い原因とまで言っちゃうのはちょっと言過ぎだが。
vbaの場合、入門書にロクなのが無いってのが大きいと思う。
2018/09/19(水) 08:11:46.01ID:3pMh17++
少なくともオブジェクトが解放されてないとか文句言ってるのは別言語に移行すれば解決するな
2018/09/19(水) 08:16:58.74ID:Q3mSx79m
他人のせいにしちゃいかんな
モダンな文法や機能の導入
Excel.Applicationのインターフェース改善
洗練されたIDEの導入
これらを怠った結果でしょう
特にIDEの影響が大きいと見たね
インテリセンス、サジェスチョン、ワーニング、リファクタリングツールが充実してると大分変わる
2018/09/19(水) 08:27:16.54ID:qT/e110f
すくなくともVBEは変えるよな
素人マクロじゃなくて業務開発ならば
2018/09/19(水) 08:30:56.76ID:LVCMaoiR
>>163
それでもスレに来るのは何なの
2018/09/19(水) 09:05:12.30ID:eB9Wvzp/
>>198
とにかくVBAをけなして自分のチンケなプライドを満足させたい、その一点のみ w
2018/09/19(水) 09:07:56.31ID:hRx0sgGQ
啓蒙してユーザー需要を減らせれば、皆がハッピーになると信じている…のかも
201デフォルトの名無しさん
垢版 |
2018/09/19(水) 11:59:42.56ID:9eFLiOtU
暇つぶしの問題
あるセルとその下のセルに数値データが入っている
この2つのセルの中身を他のセルを使わずに入れ替えてください
2018/09/19(水) 12:11:03.24ID:3D7E1PKU
○○では××できない!糞!って騒ぎ立てることで
いや○○でもこうすれば××できるんやでという回答を引き出すメソッドや
2018/09/19(水) 12:13:54.07ID:3D7E1PKU
なおVBAの場合ほんとにできないのであまり効果的でない模様
2018/09/19(水) 12:39:07.72ID:f2RidzcJ
>>201
Dim Rng_Target As Range
Dim Val_Target As Long

Set Rng_Target = 目的のセルを取得するexpression
Val_Target = Rng_Target.Value
Rng_Target.Value = Rng_Target.Offset(1, 0).Value
Rng_Target.Offset(1, 0).Value = Val_Target
2018/09/19(水) 18:17:37.52ID:r5xYEE0l
If Not RangeA Like RangeB then
RangeA = RangeA Xor RangeB
RangeB = RangeA Xor RangeB
RangeA = RangeA Xor RangeB
End If
2018/09/19(水) 18:40:15.75ID:AVetNhWj
xor交換て数値型全部に使えるんだっけ
2018/09/19(水) 18:41:10.33ID:5nElZyy0
>>198
確認だけど日本語は読めるよね?
VBAの使い道を探してるって書いてあるけど見えなかったのかな
2018/09/19(水) 18:52:28.00ID:0/ft7j2l
>>207
いや、必要もないのに探す意味がわからないし
暇なの?
2018/09/19(水) 18:58:31.13ID:5nElZyy0
>>208
ん?
高い金出して買ったExcelを使いこなさなきゃもったいないだろ
2018/09/19(水) 19:21:40.70ID:0/ft7j2l
>>209
プライベートで有効に活用できないかってことね
趣味にもよるしなあ
211デフォルトの名無しさん
垢版 |
2018/09/19(水) 23:25:17.18ID:J1A7PsDE
プロも実はエクセル使えないの悔しいんやなwプロさんのくせにw
212デフォルトの名無しさん
垢版 |
2018/09/19(水) 23:28:02.58ID:xLP4ypV2
プロはセルで関数つかっても
vbaはつかわない
2018/09/19(水) 23:34:32.23ID:f2RidzcJ
ワークシートでユーザー定義関数使いたいときはVBA使う
2018/09/19(水) 23:47:39.17ID:3pMh17++
>>193
なんやかんや言いつつ文句の対象がVBAだけなの草
2018/09/20(木) 00:20:27.12ID:EYF8wRp8
頭の悪い人がVBA覚えると数式でも工夫すればできることもVBAでやろうとするよね
VBAは所詮「実行できる操作手順」だから、慣れてしまえば頭が弱くても分かりやすい
数式の方が論理的な思考が必要で突き詰めれば難しい
2018/09/20(木) 00:23:10.21ID:5+Hsdig+
ハイハイ偉い偉い
2018/09/20(木) 00:37:45.52ID:grTR8BoD
まるでVBAで数式を表現できないみたいじゃないか
変なこというヤツだな
218デフォルトの名無しさん
垢版 |
2018/09/20(木) 00:41:53.76ID:zLqp8E23
むしろ数式の途中結果を使いながら何列もつかって最終結果にたどりつく
途中で確認するからな
複雑な数式を一行やろうとなんか考えない
2018/09/20(木) 01:26:44.94ID:SZObeV+C
語彙力、たぶん関数って書きたかったんだろ
2018/09/20(木) 01:42:01.91ID:iN76uuvx
VBの組み込み関数とワークシート関数のどっちの話をしてるんだか
2018/09/20(木) 05:12:33.95ID:We2hiCPZ
Visual Basic Editorは20年前に発売されてとっくに引退したVB6のIDEの流用?で
なぜか20年間全く変わらないままだな、もうアホかと

Visual Studioで言うところの「すべての参照の検索」ぐらいできないと不便でしょうがない
2018/09/20(木) 08:13:11.22ID:nFH62DW3
そりゃMSにとってはVBAはもはやレガシーもいいとこであり滅ぼしていきたいものだからだ
君の愛する Visual Studio にも昔はExcel VBAと同様にCOMオートメーションによるマクロ機能とその専用開発環境が付属してたけど、いつの間にか消えただろ?
完全に時代遅れの死んだ技術なんだよ
Excel VBAを削除したら大量の自称プロが露頭に迷って電車のダイヤに多大な影響が出るから踏み切れない、
でも車内のポリシー的にレガシー技術への新規投資はできない、というわけで放置するしかないわけ
2018/09/20(木) 11:47:27.86ID:lix+OrrW
プロなんてものの数に入らないだろう
圧倒的に多いのは一般のオフィスワーカー
なくなったらむしろプロの側はビジネスチャンスじゃん
224デフォルトの名無しさん
垢版 |
2018/09/20(木) 12:03:27.50ID:xZtTWzui
質問です

タブ区切りtxtファイルを複数読み取り,指定の場所に貼り付けるVBAをMacOS上で制作したいのですが,ファイルパスの仕様?などの関係でうまくいきません

どなたかMacOSでのVBAに詳しい方はいらっしゃいませんか?
2018/09/20(木) 12:07:06.97ID:liPfzeAw
>>224
まずコードを貼れよ。話はそれからだ
226デフォルトの名無しさん
垢版 |
2018/09/20(木) 12:24:51.29ID:xZtTWzui
>>225
恥ずかしながら,コードはまだ完成していないのです.
そもそも他ファイルの読み込みすらままならないので・・・

練習として,同じフォルダ内にあるEXCELファイル(Sample.xlsx)を開くだけのコードを描いてみたのですが,それすらうまく回りません.
同様のコードでwindowsでは問題なく回ったのですが・・・

Sub Sample()
 Workbook.Open Filename:=ThisWorkbook.Path & "./Sample.xslx"
End Sub

この問題の解決法から教えていただけるとうれしいです.
初心者で右も左も分からず,基本的な質問になってしまい申し訳ありません
2018/09/20(木) 13:02:40.95ID:liPfzeAw
>>226
ドットが不要。マックは知らんけどWindowsは本来パスはバックスラッシュ、拡張子はxlsxな
2018/09/20(木) 13:09:09.59ID:SZObeV+C
今開いているファイルが
/boot/hoge/fuga.xlsm
だとして同じ階層の
/boot/hoge/Sample.xlsx
を開きたいなら
相対指定では../Sample.xlsx
.ではだめ。
2018/09/20(木) 17:49:38.92ID:lix+OrrW
グローバルなRangeプロパティへの参照を機械的に検知するアイディア
https://qiita.com/nukie_53/items/4e9226ac8f747e772afd

なるほどこの発想はなかった
2018/09/20(木) 18:03:18.90ID:hYohggeS
>>222
むしろプロは喜ぶね
Vbaそのものが目的化してるアマチュアのほうがきついんちゃう?
2018/09/20(木) 18:30:13.49ID:5eDdLMhs
VBAが使えるのを売りにしてる事務員は多いからね
さすがにそろそろVBEは標準では付属しなくなって、
MSのサイトの分かりにくい場所から別途ダウンロードが必要になるくらいの弾圧施策は打ってくるんじゃないかな
2018/09/20(木) 18:36:30.44ID:49SYfM/r
事務員にそんなもの期待してない
2018/09/20(木) 19:29:49.01ID:lix+OrrW
冷静に考えたらプロは喜ばないか
営業が喜ぶかもしれないってだけだな
2018/09/20(木) 20:28:39.42ID:qGj9TL9d
>>222
2019にPythonが実装されるという噂だが…
結局COMやらないと駄目、ってなったら旨味がほぼゼロ。
Excelが.NETに完全対応するんならVBAとか今すぐ無くなっていい。
2018/09/20(木) 21:44:20.01ID:MjJalB6Y
>>234
ん?
Excelに搭載するならVBA並みに使えるようにするだろ
COMで使うなら今でも使えるし
2018/09/20(木) 21:59:37.62ID:whO82xMw
マルチプラットフォーム、クラウドに注力してるのに
わざわざローカルのOSベッタリの技術にリソースは割きたくないでしょ

というかVBAの前にIEが消えると思う
2018/09/20(木) 22:42:00.54ID:oVrOG/N2
IEはガチのオワコンだからしゃーない
2018/09/20(木) 22:54:11.74ID:tLKfXY5t
>>234
そんな噂はねーよ
とっくの昔に否定されてる
239デフォルトの名無しさん
垢版 |
2018/09/21(金) 01:31:15.05ID:MqKbhYRD
ところがここだけの話そうでもないんだよねーあんまり詳しくは言えないけどね
2018/09/21(金) 02:38:37.17ID:ITZv+Gmc
>>239
負け惜しみ言ってるんじゃねーよ、死ねよ
2018/09/21(金) 09:35:36.97ID:mvgA0QsA
どんなのが搭載されても関係無いだろ。
それに合わせるだけだ。
逆に待ち望んでた奴らはまたコレジャ・・・がダメとか言い出すんだろう。

結局今と変わらない。
自分の能力の低さを言語のせいにするような奴らなんだから。
2018/09/21(金) 16:53:09.50ID:Qvv9rksr
事務仕事でVBA使えると業務効率すごく良くなるの?
作業自動化とか見て心がわくわくするけど、うちの会社誰もVBA使えなくていまいちどんな感じなのか想像できない
2018/09/21(金) 17:42:59.81ID:CSX4ORRK
>>242
自分でやってるExcelの仕事を、この部分を自動で出来たらどうなるかって考えてみたらよろしいやん。
出来るところ出来ないところ色々あるだろうけどさ。
244デフォルトの名無しさん
垢版 |
2018/09/21(金) 17:54:42.09ID:r3aTV2Xy
まだ始めたばったりで基本もまだまだだけど、実際の業務で自動化できそうな簡単な課題を考えて試行錯誤してるんだけどこんな感じで身につくかな?
2018/09/21(金) 17:56:20.06ID:xQShnEjp
>>242
今からやるならdotnetやpythonがいいよ
どの言語でもエクセルを処理できる
業務はエクセルだけじゃない
だからどうせなら簡単で色々できてパワフルな別の言語を使ったほうがいいというわけ
2018/09/21(金) 18:04:23.10ID:liVyxOie
メモ帳でC#組めるし.NETはオススメだね
2018/09/21(金) 18:06:59.84ID:2TZ1ouJm
VBAスレまできてPythonのステマとか
やっぱりPython信者は一味違うな
2018/09/21(金) 18:11:58.90ID:mvgA0QsA
dotnetもpythonもExcel上で使うには力不足。
VBAが一番都合が良いんだね。
2018/09/21(金) 18:16:59.14ID:xQShnEjp
エクセルはビジネスのごくわずかな領域でしかない
なのでエクセル依存のVBAはビジネスではイマイチなんだね
2018/09/21(金) 18:29:31.75ID:liVyxOie
やっぱり.NET、Python、PowerShellで決まりだよ
2018/09/21(金) 18:33:05.98ID:MQAmc69g
ユーザー定義ワークシート関数作れるようになってから出直せ
2018/09/21(金) 18:35:03.52ID:uQKWYjQl
>>242
凄く良くなるかは分からん
業務の種類と自分が出来る自動化のスキルによる
うちはシステム化ダメダメだったから日報を2時間掛けて作ってたらしいそれを2分で出来るようにした
土日も作ってるらしいからそこそこになった
253デフォルトの名無しさん
垢版 |
2018/09/21(金) 18:40:23.75ID:Qvv9rksr
なるほどー。普段の業務考えてみたらルーチン作業ばっかしてるし自動化できそう


>>252
まさにそんな感じで日報も作ってるわ。部署ごとにわけて〜で2時間は余裕でかかってる
これがもし2分で終わったりしたら夢あるなぁ
2018/09/21(金) 18:44:00.14ID:liVyxOie
C#あたり使ってVBEのコードペインにユーザー定義関数用のVB6コードを差し込むようにすれば大丈夫だと思うの
2018/09/21(金) 18:46:12.21ID:MQAmc69g
>>254
で、そのファイルは他の人が開いたらどうなるんや
2018/09/21(金) 18:50:57.60ID:liVyxOie
ブックのコードペインに差し込んでスタンドアロンなVBAプログラムとして保存すれば他のユーザーがそのブックを開いても普通に関数として使えるじゃん
2018/09/21(金) 18:56:13.68ID:xQShnEjp
>>251
何に使うの?
ユーザー定義関数を定義する事が目的化してない?
2018/09/21(金) 19:01:09.32ID:MQAmc69g
>>257
標準関数で書くと低速になるような式のとき、VBAに移す事で大幅に高速化できる。
必要になった時にその場で作るものだから、c#の場合VS起動してコンパイルしてとか論外。
その後、計算書完成したから後よろしくって上司に渡すとかよくある
2018/09/21(金) 19:17:25.97ID:FvpQrvJK
計算書なんて何度も計算するものじゃないだろ?
それに経過の計算を残すことが重要な書類じゃないのか?

無意味に速度なんて気にして誰も解読できないオナニー関数とか使うなよハゲ
2018/09/21(金) 19:22:37.61ID:xQShnEjp
え?それだけ?
定義した関数をデリゲートとして渡してコレクションをソートしたり
メタデータを取得してデコレーターを生成したり
再利用可能なモジュールとしてシステムに登録したり
とかできないの?
使い捨てのシートに表示するのを高速化するだけのために重いエクセルとVBEを開いてVBAで我慢強くコーディングして動作確認とか辛いんですけど
2018/09/21(金) 19:30:10.67ID:liVyxOie
必要になったときに手軽に使うのはPowerShell
2018/09/21(金) 19:31:16.07ID:MQAmc69g
そういうのが作りたいなら好きにしてくれ。
VBAが適している場面もあるって話や
あと数秒で計算終わるなら必要ない。物によっては諸元入力のたびに再計算に1分かかる場合とかあるんよ。
エクセルエアプには分からなくても仕方がないが。
2018/09/21(金) 19:35:55.04ID:FvpQrvJK
どうせSUMPRODUCTとか使いまくって悦に浸ってんだろ
エクセルプロ()さんは凄いですね
2018/09/21(金) 19:42:04.04ID:xQShnEjp
リアルタイム更新はエクセル弱っちいよね
非同期処理のサポートが残念だから
入力するたび重い計算を同期で待ちってユーザーが激怒する典型的なパターンだよ
2018/09/21(金) 19:54:44.02ID:liVyxOie
大容量データをエクセルで扱うならパワーピボット使おうよって思うし、ワークシートで行列計算の評価を何重にも行うならそれ全部外部の高速なプログラムにオンメモリでやってもらおうよって思うの
2018/09/21(金) 20:16:40.40ID:4Tb64i1X
>>260
お前、VBAに何やらせようと思ってるの?
VBAはあくまでOfficeアプリケーション上で使える便利機能でしかないんだよ?
お前が言ってることはデカいシステム作ることに対応した言語持ってきて
アレが出来ないコレが出来ないと騒いでいるに過ぎない。

そもそもそういうことをやるならそれなりのフレームワークを使ってEXCEL吐き出させろ。
2018/09/21(金) 20:23:25.18ID:+w5W7Qw1
>>258
標準の関数ってスピードすごい早いプログラムじゃないの?
自作のほうが上回るとかあるんか
2018/09/21(金) 20:28:26.36ID:dSxNadcR
>>267
VB6標準の組み込み関数じゃなくてエクセル組み込みの標準的なワークシート関数のことを言ってるんじゃないかと理解してたんだけど違うのか?
2018/09/21(金) 20:33:56.46ID:xQShnEjp
>>266
デカイシステム?
日常的な規模のツールもC#やパワーシェルのほうがいいよ
小規模ならまあほとんどパワーシェルだな

エクセルはスケールデカイときは論外だけど
便利で基本的なクラスや言語機能がないからスケールの小さいちょっとした物にも実はそんなに向いてないんだな

外部コマンドの出力結果をパースして並び替えてフィルターしてエクセルに出力してファイルをwebサーバーにHTTPポスト
これぐらいの簡単な作業ですら着手に躊躇してしてしまう
2018/09/21(金) 21:47:31.39ID:c6u7OXiZ
>>268
いやワークシート関数で合ってると思うけどあれを超えられるユーザー定義関数を作る自信はないわ
2018/09/21(金) 22:47:22.07ID:oOcVj6Vd
上で言ってるような重い処理じゃないけど、文字列操作系は自作したほうが便利なことが多いよな。

たとえばSplit関数がワークシートに無いのでパスをバラすときとか糞めんどい。
A1:C:\hoge\fugafuga\piyo

C:・・・・・=MID(A1,1,SEARCH("\",A1,1))
hoge・・・=MID(A1,SEARCH("\",A1,1)+1,SEARCH("\",A1,SEARCH("\",A1,1)+1)-SEARCH("\",A1,1)-1)
fugafuga・・・=MID(A1,SEARCH("\",A1,SEARCH("\",A1,1)+1)+1,
SEARCH("\",A1,SEARCH("\",A1,SEARCH("\",A1,1)+1)+1)-SEARCH("\",A1,SEARCH("\",A1,1)+1)-1)

しかしこれを定義するだけでシンプルになる。
Function SPLIT2(v, deli, idx)
SPLIT2 = Split(v, deli)(idx - 1)
End Function

C:・・・・・=SPLIT2(A1,"\",1)
hoge・・・=SPLIT2(A1,"\",2)
fugafuga・・・=SPLIT2(A1,"\",3)

だから文字列変換が出てきたら大抵VBAで関数組むかな
2018/09/21(金) 22:52:30.61ID:oOcVj6Vd
>>271
書いてから思ったけど、パス分解するだけなら区切り文字で出来るから例が悪かったわ
上の関数は文字を数式で繋いでコネコネするときによく使う
2018/09/21(金) 22:53:01.55ID:/N0VzHQb
splitがめんどいのは同意だけどなんでワークシート関数にするの?
vbaで処理完結したほうが良いと思うけど
2018/09/21(金) 23:05:24.48ID:oOcVj6Vd
>>273
それも場合によるかと
帳票、単票みたいなのをササっと作るときは、セル毎に式を組まないといけないから適してる。
あと行・列挿入が多い表に埋め込むときとか。

たぶんPowerShellerが想像してる表から表に変換するような場合にはあまり適してないね。

あと元の値が頻繁に変化するものは、そのたびにマクロ走らせないといけないから更新漏れが起こるのが困る。
2018/09/21(金) 23:37:14.57ID:3Rh/KByq
考え方なんかなワークシートで式使われる方がめんどく感じる
大量にあったりすると重いしメンテしづらかったりするし
2018/09/21(金) 23:47:44.41ID:dSxNadcR
Lispの糞コードいじる気分になるよね
2018/09/21(金) 23:50:48.56ID:UZbX0jXb
ワークシート関数なら他にはマネ出来ない

データ処理するだけならPowerShell使えって奴も多いんじゃね
278デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:50:54.80ID:MqKbhYRD
盛りすぎプロさんw
2018/09/22(土) 00:01:13.95ID:96L85sWt
SPLITみたいなのはワークシート関数にする派だな
汎用的な関数をワークシート内で使ったほうが見通しがいい
他にもMAP、FILTER、REDUCEみたいなのも自作して使ってるわ
2018/09/22(土) 00:04:01.76ID:/LVptLz+
JSPやASPの失敗を繰り返しとるな
帳票にデータを埋め込みたいなら式じゃなくシンプルにセル参照を使うといいよ
参照先はプレーンなデータ専用シートね
こうしとけばセキュリティ監査的に面倒なマクロ付きにしなくていい、
データ供給元の言語に依存しなくなる、
データ供給元のコードがシンプルになる、
データモデルがわかりやすくなる、などなどメリットが多い
281デフォルトの名無しさん
垢版 |
2018/09/22(土) 00:17:31.94ID:T/6XWx9j
>>279
MAPやREDUCEに渡す無名関数はどうやってる?
2018/09/22(土) 02:18:36.18ID:niETRueG
ワークシート関数って”使う”のにかかる手間が少ないのがメリットだと思う。
関数の入力と出力だけ書いておけばVBA読めない人でもすぐに理解できる。

ワークシート関数使うのは使い捨ての帳票が大半だろうし>>280は全然違うものを想像してそう。
283デフォルトの名無しさん
垢版 |
2018/09/22(土) 02:24:34.84ID:FJlDOW+X
お前ら本当にもっと会社の利益になる事を頑張ってくれよ
やらせてるのは女の子がやる様な簡単な仕事なんだからこんなどーでも良い大して役に立たないVBAなんかに時間を使わずに他の人を手伝うとかちゃんと勤務中は仕事してね
分かったね?
2018/09/22(土) 07:40:51.79ID:z7BGc1C3
自作のワークシート関数作るとエラー処理とか面倒
特にエクセルの柔軟すぎる型変換は予想しない結果になってしまう

>>283
君はまずハローワークに行こうな
285デフォルトの名無しさん
垢版 |
2018/09/22(土) 08:08:03.84ID:T/6XWx9j
>>283
老害かな
2018/09/22(土) 09:49:40.55ID:/LVptLz+
>>282
使い捨て帳票ならそれこそ手入力で十分
デザインするついでにデータも入れればいい
プログラムするものは何度も繰り返し出力するもの、何人もの社員が出力するものだ
そういうのは先ほどレスした理由でセル参照を使ったほうがいい
2018/09/22(土) 09:55:14.40ID:MP8LoRbH
質問です
パワーシェルって.Net Freamworkの寄生虫みたいなもので
単体だとただのシェルと変わらないって本当です?
2018/09/22(土) 09:58:32.80ID:WimPZWqW
VBAがOffice製品の寄生虫なのと一緒
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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