Excel VBA 質問スレ Part52

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/

※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/
2018/04/19(木) 18:39:40.27ID:ml4EPJfx
初歩的な質問で恐縮なんだが
もしかしてマクロってやりたい事をコードでできる要素に分解するのが難しいのか?
俺はてっきり文法的な難しさが勝ると思ってたが、
実務に落とし込もうとした時に、この作業をどうやってコードに起こそう?ってフリーズしたわ
2018/04/19(木) 18:44:14.89ID:rUVJgjTn
何を言っているのか分からないw
815デフォルトの名無しさん
垢版 |
2018/04/19(木) 18:51:50.57ID:Z28Cxj5J
おいおい笑っとる場合とちゃうでそりゃ
2018/04/19(木) 18:55:32.33ID:vrFoPp38
そうだよ
VBAはエクセルを使った作業を助けるちょっとした拡張を書く分には適してる
でもそれ以外のエクセル関係ない処理を書くのにはお世辞にも向いてるとは言えん
そんで業務上で実用的な処理って殆どはエクセル関係ないんだよね
2018/04/19(木) 19:01:06.47ID:4+we2EIF
はいはい、他の言語勧めるならVBA使う職場でIDE入れる許可取る方法も合わせて紹介してくださいね
2018/04/19(木) 19:22:27.76ID:vrFoPp38
IDEなんていらんよ
WindowsならPowerShellが使えるからね
2018/04/19(木) 19:30:43.32ID:4+we2EIF
インテリセンス無しで書くって状況を効率的と称するのはちょっと現実見えてないどころの話じゃないな
2018/04/19(木) 20:15:01.48ID:FhTBU56j
>>818パワーシェルでスクリプト走らすための設定をするのが面倒っていうか、いちいち覚えてらんない
スクリプトを走らすための設定をするスクリプト無いのかなぁ
821デフォルトの名無しさん
垢版 |
2018/04/19(木) 20:28:26.88ID:Z28Cxj5J
またパワー系バカかいなw
2018/04/19(木) 20:48:34.30ID:srwk8Yrs
>>812
理解力無さすぎ

(ファイルの内容を)更新する必要がないのに(ファイルの更新日時が)更新されてしまったら

って話な
823デフォルトの名無しさん
垢版 |
2018/04/19(木) 21:23:11.71ID:Z28Cxj5J
>>822
理解力無さすぎ

タイムスタンプが変わるのはファイルの更新ではない

って皮肉やぞw
2018/04/19(木) 22:01:03.55ID:srwk8Yrs
ちょっとなに言ってるのかわかりませんな
皮肉の意味も知らなさそうw
825デフォルトの名無しさん
垢版 |
2018/04/19(木) 22:03:43.71
所詮VBAエンジニアだもん
2018/04/19(木) 22:10:03.54ID:vrFoPp38
エンジニアって言葉に違和感がある
VBAユーザーとかにしてくれ
827デフォルトの名無しさん
垢版 |
2018/04/19(木) 22:16:42.11ID:Z28Cxj5J
悲報、VBAエンジニアさん皮肉を理解できないwww
2018/04/19(木) 22:51:03.97ID:NI/UICUh
これはさすがに恥ずかしい
2018/04/20(金) 01:10:17.00ID:ZSD8J3qj
エクセル関数で出来る事は全てマクロでも出来ると思っていいのかな

今VLOOKUPを大量に使って元データのシートを4,5枚のシートに分けて転記してる作業があって、
このブック自体、ある意味完成されてるから業務上特に問題はないのだが
セルの中身を見ると酷く不恰好でな
背中がムズムズするから改善したいと思ってる
2018/04/20(金) 02:51:15.64ID:750RsbNY
転記と参照は異なるイメージ
2018/04/20(金) 06:26:22.33ID:Z/hF/kR3
>>829
関数はVBAで組まれているので、十分な理解の元でマクロを組めば同処理同時間になる。
それにマクロの方が無駄な機能を省くなど最適化しやすいので、処理時間は普通、 関数≧マクロ になる。

最近のバージョンだと関数はSIMD使ってたりセル単位で並列処理してたりと、
マクロで出来ない事やってるとは聞くんだけど実際問題処理時間に反映されてないんだよね。
2018/04/20(金) 07:16:10.06ID:DDZisBas
>>831
> 関数はVBAで組まれているので
そんな珍説初めて聞いた
2018/04/20(金) 07:34:56.30ID:Z/hF/kR3
>>832
珍説も何もMSDNに書いてあった事だからなぁ
最近のバージョンだと違うのかもしれないけど
2018/04/20(金) 08:02:16.85ID:DDZisBas
>>833
ソース出してみ
2018/04/20(金) 08:46:12.64ID:0VrNppPf
共同ツール 1

https://seleck.cc/685

https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり

共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/

共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://sketchapp.com/extensions/plugins/
ttp://photoshopvip.net/103903

ttps://goodpatch.com/blog/sketch-plugins/
2018/04/20(金) 15:24:43.31ID:RP9oZBhW
VBA マクロを外部 dll にて記述することは可能ですか?
VBA マクロから外部 dll を呼び出すことは可能ですか?
VBA の関数を外注したいのですが
2018/04/20(金) 16:34:17.47ID:3Cb8dXo7
>>836
VBAのdll化ってのは聞いたことがないな
同等の機能をC++とかで書ければそれをdll化すりゃいいけど
2018/04/20(金) 17:22:24.62ID:fJgzb4WI
sheetオブジェクトさわれないと不便だろうからc#+OpenXML でdll作れば?
2018/04/20(金) 18:28:12.60ID:hyGn+NWp
>VBA マクロから外部 dll を呼び出すことは可能ですか?

圧縮用に unlha32.dll を使ってる。セキュリティがどうのこうの言われてたりしたけど
まぁ自分用途に使う分には問題ないし外部dllを呼び出せるか?って質問に呼び出す
例としてあげただけなんで。
2018/04/20(金) 19:43:37.08ID:P2bCm2Cm
>>836
Module1.bas のまま納入してもらえばいいじゃん。
841デフォルトの名無しさん
垢版 |
2018/04/20(金) 21:11:48.80ID:TsjxvbIu
>>836
なぜVBAで作らせたいのか?
2018/04/20(金) 21:51:00.88ID:/f4SVs1l
だからさ、そういうのはVBAの仕事じゃねんだよ
2018/04/21(土) 00:19:32.87ID:6+H6buOa
VBAの仕事って何だよ
エロ画像の整理とかで圧縮ファイル扱うしun*32.dll系はむしろよく使うんじゃないの
2018/04/21(土) 03:17:59.36ID:C12WZHgI
>>841
投資分野における RSIインディケーターをexcel 数式で使いたいのです
845デフォルトの名無しさん
垢版 |
2018/04/21(土) 06:32:49.84ID:cZjOaU/p
>>844
それはファンクションプロシージャでラッピングすればいい話で、VBAの話ではない。
2018/04/21(土) 07:36:11.37ID:g3Kr5e2D
>>843
そんなんVBAでやる理由が皆無やろ
847デフォルトの名無しさん
垢版 |
2018/04/21(土) 07:43:23.30ID:lPKh0fp6
>>844
そんなんだったら関数本体はVBAもExcelも関係ない汎用的な言語で処理を書けるから、
VBA用のインタフェースを備えたDllを作るのは割と簡単な仕事だろうね。
2018/04/21(土) 07:57:41.71ID:g3Kr5e2D
VBAerは世界感が狭いからなんでもVBでやろうとするなぁ
849デフォルトの名無しさん
垢版 |
2018/04/21(土) 07:59:35.52ID:nwm3yYwa
>>848
VBAエンジニアって呼べや
2018/04/21(土) 08:37:53.75ID:wT5HHzfo
開発環境をインストールできない環境では
VBAぐらいしか選択肢がない
2018/04/21(土) 08:38:57.92ID:GXQ98g1T
エクセルは統計に使う関数が一通り揃ってるんで投資分野は使いやすいぞ
インジケータならMT4とか使った方がいいような気はするけど
2018/04/21(土) 08:59:09.12ID:8eWDHGAr
>>807
88世代でもそこはN-BASICと言って
ジジイっぷりを発揮するべき
2018/04/21(土) 09:58:30.23ID:C12WZHgI
>>847
エクセルで指定されたシートの範囲を dll にて取り出す方法がわかりません
2018/04/21(土) 10:09:46.33ID:FdDi/Wma
>>851
むしろエクセルはまともに統計に使える関数少ないだろ。重回帰くらいしかない。
相関行列や時系列分析なんかないし。自分で作るしかない
しかもエクセルじゃビッグデータは重すぎて、全体的な見通しも悪い。
2018/04/21(土) 10:14:19.71ID:g3Kr5e2D
他の選択肢を知れば知るほどもうVBAはねえわってなるよね普通
VBAに執着する人ってどんだけ勉強嫌いなんだろう
856デフォルトの名無しさん
垢版 |
2018/04/21(土) 10:14:56.03ID:lPKh0fp6
>>853
VBAでシートから配列に変換してdllに渡す
計算結果は配列でVBAに返す

dll側はシートなどのExcelオブジェクトと切り離す
2018/04/21(土) 10:15:29.17ID:a1jne6cy
>>855
そんな事言うためにこのスレに留まってるの?
2018/04/21(土) 11:33:54.73ID:C2C7Ud8C
フォルダAにある現在開いているファイル以外のファイルをフォルダBにコピーし、
その後、フォルダAにある現在開いているファイル以外を削除する方法を教えていただけますでしょうか。
よろしくお願いします。
2018/04/21(土) 12:13:41.84ID:g71h8OPL
>>858
Dim fn as String
fn = Dir(ThisWorkbook.Path & "\")

Do While Not fn = ""
 If Not fn = ThisWorkbook.Name Then
  Name ThisWorkbook.Path & "\" & fn As "フォルダBのパス" & "\" & fn
 End If
 fn = Dir()
Loop

これでどうかな
実験してないのでこけるかも知れない
2018/04/21(土) 12:20:05.75ID:C2C7Ud8C
>>859
ありがとうございます。
理想としていたことができました。
2018/04/21(土) 12:28:03.91ID:7+Um7Y8b
>>848
ヴィーバアーって読むん? それともビーバー?
2018/04/21(土) 12:55:33.20ID:ERfeW7nP
ブック1のシート1とブック2のシート2を開いてシート2がアクティブの時、
シート1の選択範囲を取得する方法はありますか?
2018/04/21(土) 14:20:03.89ID:qaO+nC3q
切り替わるタイミングでアクティブなセルの番地を拾っておけばできるんじゃないか。
2018/04/21(土) 17:05:31.81ID:wAQUEkyG
>>862
同一EXCELアプリケーション内なら
865デフォルトの名無しさん
垢版 |
2018/04/21(土) 22:31:31.47ID:nN/toUY2
エクセルのことわざわざ英語でEXCELって書くやつなんなん?
866デフォルトの名無しさん
垢版 |
2018/04/21(土) 22:34:09.27ID:dFQ+pJAQ
そこはさすがにエクセルのほうが違和感あるわ
2018/04/22(日) 04:13:47.20ID:g5wVKO/X
地味な違いだけど
ローマ字綴りの方がタイプしやすいと感じてる
2018/04/22(日) 04:46:55.12ID:5gwwyGqC
ekuseru
2018/04/22(日) 05:22:32.39ID:L4UjA6aN
ブイビーエー
2018/04/22(日) 05:56:17.23ID:5gwwyGqC
ヴィービーエィ
2018/04/22(日) 09:06:19.18ID:AipipDzh
あーあー Eきもーちー♪


いや、思い出したんでついな(´・ω・`)b
872デフォルトの名無しさん
垢版 |
2018/04/22(日) 09:21:51.06ID:KfecN0Qu
JIS(?)っぽい思想だとカタカナでエクセルなんだろうなぁ、とか
2018/04/22(日) 09:46:56.02ID:Z8CuG080
>>865
こういうつまらないことにこだわる奴って気持ち悪いよね
2018/04/22(日) 10:20:16.74ID:G5t9FUHp
複数シートの中で売上という文字列が入っているシートがいくつかあり、
そのシート内のB列にデータがないシートのみを削除する方法を
教えていただけますでしょうか。
宜しくお願い致します。
2018/04/22(日) 10:21:28.91ID:CtyzUBhW
なんか質問する人、同じ人ばっかり??
876デフォルトの名無しさん
垢版 |
2018/04/22(日) 10:23:26.90ID:Ilmcglgl
>>862
マクロの記録でどう出るか確認したら?
877デフォルトの名無しさん
垢版 |
2018/04/22(日) 10:24:40.29ID:Ilmcglgl
>>875
宿題か何かだろうね。
878デフォルトの名無しさん
垢版 |
2018/04/22(日) 10:25:45.97ID:Ilmcglgl
>>874
そのまえに、そんな乱暴にシートを削除してよいのか?
2018/04/22(日) 11:37:43.72ID:kYJUlnih
>>874
ディテールの書き方が少し甘い
売上という文字列はシート名に入ってるの?
それともシート上のどこかのセルとかコメントに入ってるの?
2018/04/22(日) 12:07:27.96ID:G5t9FUHp
>>879
わかりづらくてすみません。
シート名に「売上〇〇月」と入っております。
2018/04/22(日) 12:15:10.53ID:bQIDMX1u
その程度も書けないようじゃマクロ使わない方がいい。特にシート削除は理解してないと危険。
2018/04/22(日) 12:26:25.19ID:5gwwyGqC
「B列にデータがない時」ってマクロの記録じゃ無理と違うか?
2018/04/22(日) 12:29:32.98ID:g5wVKO/X
マクロの記録でヒントでも掴んでみろって事じゃないの
みんなトライエラー繰り返してる中、トライもせずに質問投げるのは印象良くない
2018/04/22(日) 15:01:52.07ID:jW53Gcv8
>>874
・for each で全シートをなめます。
・シート名に「売上」が含まれている場合、さらにB列の値を数えます。
・条件に合致したらシートを削除します。

上2つはGGればいくらでも情報でてきます。
一番下はマクロ記録でわかります。
動作上不都合な挙動があれば、その挙動を潰す方法を調べます。
基本的な動作の羅列なので、がんばって。
885デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:40:59.16ID:Ilmcglgl
シートを削除するのではなく、新しいファイルを作成する方向でやってくれないかな?

こういう素人が増えると困るんだよ。

一般人はファイルのバックアップもしないし、削除してゴミ箱まで空にして、ファイルを復元しろと言い出すから迷惑。
2018/04/22(日) 16:15:38.56ID:T8IjF/fs
フォームやら速度が必須でない処理はVBSとかでやった方がいいね
2018/04/22(日) 16:20:44.69ID:n6LuIpRE
コレクションのforeach処理内で
コレクション削除したらヤバイんじゃないの
888デフォルトの名無しさん
垢版 |
2018/04/22(日) 16:30:45.70ID:Ilmcglgl
>>874 を見直すと「売上」という文言が入っているシートと解釈した方が自然。

各シートのどこかに「売上」と入力されていたらという条件は不自然。
2018/04/22(日) 16:39:52.54ID:T8IjF/fs
そうだね
一旦配列とかのコンテナに入れといて
for each アイテム in コンテナ
Worksheets(アイテム).Delete
next
が安全かな
2018/04/22(日) 16:44:25.17ID:jW53Gcv8
>>887
あらそうだっけ? じゃぁアプローチ方法かえないとね。
削除の度に再評価とか?
ワークシート数で回せばOK?
先に調査して配列格納したシート名で削除しにいくのが安全か。
どんな方法がスマートだろう?

>>885
ファイルのバックアップはそりゃやっておいた方が無難でしょうね。
それは作り手本人が実際に困ってその必要性を痛感した時点で
学べばいい。
元データが何かのシステムからExcel形式で何度でもサクッと出力
できるもので、その一次加工の工程ならなくてもいいと思う。
891デフォルトの名無しさん
垢版 |
2018/04/22(日) 17:48:00.30ID:Ilmcglgl
質問者がいないのに、
2018/04/22(日) 18:19:48.56ID:u/gXMUne
B列にデータがないのを効率よく判定する方法はなんだ?
背景色とかついてても空白セルならデータがないとすべきか
数式が入ってても結果が空白セルならデータがないとすべきか
半角スペースはデータがあると判定するのか
NaNやError Valueはデータがないとみなすか
考え出すと思ったより難しいなこれ
893デフォルトの名無しさん
垢版 |
2018/04/22(日) 18:22:08.85ID:PsQCMKRd
>>892
そもそもお前が悩む必要が皆無な件w
2018/04/22(日) 18:34:56.15ID:lFCngtN7
>>892 B列最終行から上に向けてxlupして
データがあったら何行目か分かるから、
それで判定したらいいんでない?
と、俺は思った
2018/04/22(日) 18:47:49.33ID:5gwwyGqC
>>894
それで大丈夫かどうかは質問者にしか分からないので
896デフォルトの名無しさん
垢版 |
2018/04/22(日) 18:56:09.26ID:Ilmcglgl
そんな自動化しなくてはいけないほど、シートの数が多いExcelファイルがあるなら、B列に値が入っていると決めつけているのも怖いよな。

そんなExcelファイルを作る職場だとExcelファイルのフォーマットが変更されていないかどうかのチェックも必要。
897デフォルトの名無しさん
垢版 |
2018/04/22(日) 19:09:33.32ID:PsQCMKRd
>>896
だからお前が心配する必要が皆無な件w
2018/04/22(日) 20:10:15.74ID:8Z9OLZMo
条件が曖昧ならここでうだうだ考えずに質問者に明確に書くよう言えば良いだろ。
それが出てこないなら質問の体をなさないということで却下するもよし、回答したい人間が自分の想像で
回答するもよしで。
質問に書かれていないバックアップがどうこうってのも、そんなもん質問者が考えれば良いことであってこっちが
どうこう考えることじゃない。
2018/04/22(日) 20:39:48.94ID:CtyzUBhW
countaで対象範囲拾うだけだと思ったけど、データ有り無し判定。
900デフォルトの名無しさん
垢版 |
2018/04/22(日) 21:42:52.36ID:Ilmcglgl
>>898
下手な回答を書かれると第3者が参考にしてしまう。
901862
垢版 |
2018/04/22(日) 22:40:57.74ID:QxU3gWrv
>>864
同一EXCELアプリケーション内でも良いので教えていただけますか

>>876
Activeではないシートの選択範囲を取得するには、どのように記録を取ればいいでしょうか
2018/04/23(月) 00:55:13.87ID:sU1qXEfT
>>900
頭がおかしくて草
そんなもん参考にする奴の責任だろw
903デフォルトの名無しさん
垢版 |
2018/04/23(月) 02:23:36.29ID:sEcyfSnM
>>901
やったことがないけど、ワークブックオブジェクト変数を使えばできるかな。
904デフォルトの名無しさん
垢版 |
2018/04/23(月) 13:20:01.73ID:7NmKhRsO
ちょっと教えて下さい
列挙型の項目に数字が先頭に来ると表示が変になるのですが、なんとかなりますか?
2018/04/23(月) 13:49:02.96ID:bp7TOG8C
何がどうなってるか具体的な事一切説明せずにおかしい!おかしい!って言うのがこのスレの質問者のデフォ w
2018/04/23(月) 16:09:56.14ID:jyC8yCZ+
>>901
アクティブなシートをコードで切り替えていけばSelectionで取れる
たとえば

Workbooks("Book1.xlsx").Worksheets(1).Activate
Debug.Print Selection.Address

Workbooks("Book2.xlsm").Worksheets(2).Activate
Debug.Print Selection.Address

これで両方ブックの選択中のセルアドレスが出力されるはず

選択範囲という概念はActivateされているシートにしかないので
これ以外の方法でやるなら>>863のようにどっかに書き出しておく必要があると思われる
2018/04/23(月) 20:16:07.45ID:o4ACymGu
>>906
それだとAddressプロパティを持たないオブジェクトがSelectされてるときにエラーにならないか?
TypeName(Selection)で"Range"が返ってきたときだけ番地を拾うようにするとか、Shapeオブジェクトの場合はTopLeftCell.Addessを拾うようにするとか
2018/04/23(月) 22:29:47.83ID:jyC8yCZ+
>>907
たとえばーなので、あとは>>862の好きにしてってことで

そもそも2つブックを開いてセルを選択するという操作を人間がやる必要性があるのか
自分だったらそこも自動化したいと思いましたとさ
2018/04/24(火) 01:52:45.14ID:lbZwsvg0
興味本位で触り始めて面白かったから本腰入れて勉強してるんだが
教本レベルから実務までのハードルが結構高いな
これ、基本的なコード覚えてしまえばほとんどパズルだよね?
上手になるとまた別の見え方ができるんかね
910862
垢版 |
2018/04/24(火) 04:06:55.23ID:nqJXgBuC
>>908
ありがとうございます。
ひとまず、ワークブック切り替えで対応してみます。
2018/04/24(火) 06:45:33.52ID:ineULIRb
>>909
実務レベルで使えるようになってから自分で作ったプログラムを見てみると確かに基本的なコードや基本的なアルゴリズムのパズルでしかないと思えるが、教本を読まないとコードが書けない初心者のうちからそのように侮っていても実務レベルに到達することはない
パズルの組み方そのものが問題になるからだ
実務で行いたい処理があるという前提で、そのためにVBAで実現する機能はどのようなものか、どのようなコードを書けば安全かつ確実に期待通りの機能を実現できるか、というベクトルの思考を繰り返して試行錯誤する以外に近道はないぞ
2018/04/24(火) 18:46:56.86ID:g60rXxGt
現在、入力ファイルAの体裁を整えてファイルBとして出力するツールをVBAで作成しています。
その中で、入力ファイルAではS-JISになっている文字コードを出力ファイルBではJISにしてほしいと頼まれています。(先方でのファイル取り込み時の都合のようです。)
自分で調べたところ、文字列を1文字ずつVBAのAsc関数でS-JISコード(10進数)にして、さらにHex関数によりS-JISコード(16進数)に変換するところまではたどり着きました。
さらに、ここからS-JISコード→JISコード変換のアルゴリズムに当てはめればJISコード(16進数)までは取得できると思います。

そこで質問なのですが、JISコード(16進数)から日本語文字列を復元する方法はあるのでしょうか?
Chr関数ではS-JISコード(10進数)には対応していてもJISコードには対応していない?ようでした
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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