ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part55
http://mevius.5ch.net/test/read.cgi/tech/1532236398/l50
探検
Excel VBA 質問スレ Part56
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/08/23(木) 07:25:24.98ID:Kh3D3mRW198デフォルトの名無しさん
2018/08/25(土) 23:45:22.40ID:t7aLMQyu >>195
私の書いたコードでは指定のブックを開く必要がありません
私の書いたコードでは指定のブックを開く必要がありません
199デフォルトの名無しさん
2018/08/25(土) 23:47:08.86ID:KMExyDFm >>197
そうとも限らないと思います
スクリプトを使うということは手作業での作業が煩わしく
それを効率化したいという欲求があるためです
スクリプトを書くとき、その時は常に手作業を躊躇する程の事態が発生している
状況と考えるべきで、ある処理がメモリを使んで離さなくて別の処理が
完了できないという経験を僕は山ほど経験してきました
メモリ管理を甘く見ると痛い目を見ます痛い目を見ます
そうとも限らないと思います
スクリプトを使うということは手作業での作業が煩わしく
それを効率化したいという欲求があるためです
スクリプトを書くとき、その時は常に手作業を躊躇する程の事態が発生している
状況と考えるべきで、ある処理がメモリを使んで離さなくて別の処理が
完了できないという経験を僕は山ほど経験してきました
メモリ管理を甘く見ると痛い目を見ます痛い目を見ます
200デフォルトの名無しさん
2018/08/25(土) 23:47:54.93ID:0r5h6/lL パワー系池沼シェル
201デフォルトの名無しさん
2018/08/25(土) 23:52:33.06ID:KMExyDFm202デフォルトの名無しさん
2018/08/25(土) 23:54:08.14ID:t7aLMQyu >>196
処理を適切に構造化して変数のスコープを無闇に伸ばさなければ、自然と不要な変数の参照は辿れなくなります
そして先ほども書いたようにスクリプトはプロセス全体の寿命も短くなりやすいので
変数のスコープはそれほど問題にはなりません
どうしても変数をクリアしたいならClear-Variableというコマンドレットがあります
個人的に使う機会がないコマンドレットですがスコープとワイルドカードを指定してまとめて変数を消去でるそうです
処理を適切に構造化して変数のスコープを無闇に伸ばさなければ、自然と不要な変数の参照は辿れなくなります
そして先ほども書いたようにスクリプトはプロセス全体の寿命も短くなりやすいので
変数のスコープはそれほど問題にはなりません
どうしても変数をクリアしたいならClear-Variableというコマンドレットがあります
個人的に使う機会がないコマンドレットですがスコープとワイルドカードを指定してまとめて変数を消去でるそうです
203デフォルトの名無しさん
2018/08/25(土) 23:55:26.38ID:Jrsn7acQ204デフォルトの名無しさん
2018/08/26(日) 00:02:52.04ID:MAEGr9r4 >>199
シビアなリソース管理が必要ならその時に適切なコードを書けばいいでしょう
なにもすべてのスクリプトを怠惰に書けと強制しているわけではないのですから
ですがほとんどの日常作業でそこまでシビアなリソース管理が要求されることはありません
それとリソースの不足は非決定的なリソース解放よりも非効率的なアルゴリズムが原因で発生することが多いということは知っておいた方がいいでしょう
シビアなリソース管理が必要ならその時に適切なコードを書けばいいでしょう
なにもすべてのスクリプトを怠惰に書けと強制しているわけではないのですから
ですがほとんどの日常作業でそこまでシビアなリソース管理が要求されることはありません
それとリソースの不足は非決定的なリソース解放よりも非効率的なアルゴリズムが原因で発生することが多いということは知っておいた方がいいでしょう
205デフォルトの名無しさん
2018/08/26(日) 00:05:13.99ID:MAEGr9r4206デフォルトの名無しさん
2018/08/26(日) 00:05:54.18ID:MAEGr9r4207デフォルトの名無しさん
2018/08/26(日) 00:07:41.89ID:MAEGr9r4 というか話を戻しますが>>79への解答はまだですか?
どうやら関係ないPowerShellの質問を繰り返して話をそらして逃げようとしているようですが忘れていませんよ
どうやら関係ないPowerShellの質問を繰り返して話をそらして逃げようとしているようですが忘れていませんよ
208デフォルトの名無しさん
2018/08/26(日) 00:12:16.95ID:IHxJX3F+209デフォルトの名無しさん
2018/08/26(日) 00:18:26.74ID:IHxJX3F+ >>204
アルゴリズムが大事なのは知ってますが
スクリプトでExcelを操作するときには計算量を気にしなければ
いけないほどのアルゴリズムを使うことはありません
やることはせいぜいシートの名前を変えて
コピーして集計して並べるくらいでしょう
問題はリソースリークなんです、関数を作りまくって
GCを呼びまくりますか? 僕の目にはそれは狂気と映ります
アルゴリズムが大事なのは知ってますが
スクリプトでExcelを操作するときには計算量を気にしなければ
いけないほどのアルゴリズムを使うことはありません
やることはせいぜいシートの名前を変えて
コピーして集計して並べるくらいでしょう
問題はリソースリークなんです、関数を作りまくって
GCを呼びまくりますか? 僕の目にはそれは狂気と映ります
210デフォルトの名無しさん
2018/08/26(日) 00:19:56.82ID:IHxJX3F+211デフォルトの名無しさん
2018/08/26(日) 01:39:01.53ID:LgI1E3BQ プロセス終了で必ず開放するんだから必要ならそういうスクリプト書けばいいんじゃないの
powershellに限らずリーク問題を解決するためにプロセスサーバ的な構成にしたりするけど
powershellに限らずリーク問題を解決するためにプロセスサーバ的な構成にしたりするけど
212デフォルトの名無しさん
2018/08/26(日) 01:45:08.66ID:L5No1MGJ >>189
あ、想定してたのはフェイスtoフェイスで相談かメールで相談する形式なんだけれど、そういうのはやってないかなあ?
あ、想定してたのはフェイスtoフェイスで相談かメールで相談する形式なんだけれど、そういうのはやってないかなあ?
213デフォルトの名無しさん
2018/08/26(日) 07:13:59.14ID:4dFHA/W/214デフォルトの名無しさん
2018/08/26(日) 07:57:33.17ID:w0D5YFHr PowerShell から、Excel, IE とかは、別プロセスを起動するだけだろ?
シェルって、別プロセスを起動するものだろ?
GC のやり方の違いなんて、関係あるか?
シェルって、別プロセスを起動するものだろ?
GC のやり方の違いなんて、関係あるか?
215デフォルトの名無しさん
2018/08/26(日) 08:36:31.73ID:2yDRx5ys VBAの質問です
指定フォルダを再帰的に検索してファイル名が*.csvにマッチするCSVファイルを列挙
各CSVからX列, Y列, Z列を読み取ってD := (X^2 + Y^2 + Z^2)^(1 / 2)を計算する
Dの大きい順に並び替えてX, Y, Z, Dを新規Excelブックに出力して
出力した全行をテーブルレイアウトに変更する
というプログラムを作りたいのですがどのように書けばいいでしょうか?
指定フォルダを再帰的に検索してファイル名が*.csvにマッチするCSVファイルを列挙
各CSVからX列, Y列, Z列を読み取ってD := (X^2 + Y^2 + Z^2)^(1 / 2)を計算する
Dの大きい順に並び替えてX, Y, Z, Dを新規Excelブックに出力して
出力した全行をテーブルレイアウトに変更する
というプログラムを作りたいのですがどのように書けばいいでしょうか?
216デフォルトの名無しさん
2018/08/26(日) 08:56:15.82ID:4dFHA/W/217デフォルトの名無しさん
2018/08/26(日) 09:04:51.11ID:Kp4FoNKX218デフォルトの名無しさん
2018/08/26(日) 09:05:46.45ID:4dFHA/W/ >>217
ごめんなさい、見落としてました。
ごめんなさい、見落としてました。
219デフォルトの名無しさん
2018/08/26(日) 10:12:36.02ID:H+C43I2p220デフォルトの名無しさん
2018/08/26(日) 11:26:25.25ID:uHGK9EwR 頭の悪さを全力で競い合ってるスレがあると聞いて飛んできた
どれも最底辺レベルで甲乙つけがたいな
どれも最底辺レベルで甲乙つけがたいな
221デフォルトの名無しさん
2018/08/26(日) 11:28:33.75ID:umld+6tZ 大昔何かの雑誌でBASICで一行ゲームとかネタでやってたのを思い出した
>>90 こんなの処理系にパイプ処理があるかないかだけの違いだろ
一行記述できるかどうかは、一行に記述できる最大文字数に加えて
パイプで記述できるか、一命令の区切り記号が設定してあるかくらいで決まる
区切り記号は、C系(C#)では;か}、昔のBASICでは:があったしLISPなんかは括弧で区切ればいくらでも書ける
ワンライナーなんて対話的に使う時に一々スクリプトを立ち上げたり面倒なので使うもの
可読性が悪くなるだけなのでプログラムで絶対に使うもんじゃない
昔のPCのメモリも少なかったのでそれなりに意味はあったんだけど捨てられた
今ではせいぜいネタ、言語のの優位性とは完全に無関係
>>90 こんなの処理系にパイプ処理があるかないかだけの違いだろ
一行記述できるかどうかは、一行に記述できる最大文字数に加えて
パイプで記述できるか、一命令の区切り記号が設定してあるかくらいで決まる
区切り記号は、C系(C#)では;か}、昔のBASICでは:があったしLISPなんかは括弧で区切ればいくらでも書ける
ワンライナーなんて対話的に使う時に一々スクリプトを立ち上げたり面倒なので使うもの
可読性が悪くなるだけなのでプログラムで絶対に使うもんじゃない
昔のPCのメモリも少なかったのでそれなりに意味はあったんだけど捨てられた
今ではせいぜいネタ、言語のの優位性とは完全に無関係
222デフォルトの名無しさん
2018/08/26(日) 11:30:23.98ID:IHxJX3F+ Excelらしくやるならインポートが先かな
1. インポート_CSV
2. 追加_数式列
3. ソート_数式列
4. 変換_テーブルレイアウト
Excelのパワーをフル活用したいものだね
1. インポート_CSV
2. 追加_数式列
3. ソート_数式列
4. 変換_テーブルレイアウト
Excelのパワーをフル活用したいものだね
223デフォルトの名無しさん
2018/08/26(日) 11:31:45.33ID:umld+6tZ >>220 ほんこれ
224デフォルトの名無しさん
2018/08/26(日) 11:35:30.27ID:MAEGr9r4 >>220
ここはVBAスレだぞ
ここはVBAスレだぞ
225デフォルトの名無しさん
2018/08/26(日) 11:45:34.46ID:IHxJX3F+226デフォルトの名無しさん
2018/08/26(日) 11:49:13.32ID:MAEGr9r4 >>221
流れるようなインターフェースとかパイプラインを使ったワンライナーはモダンなプログラミングでは常識的なテクニックだよ
太古の時代から時が止まってるVBAのユーザーは知らないかもしれないけど
例えばc#のLinqやJavaのstreamなどはもろにパイプラインから影響を受けてるよね
VBAしか使わないのかもしれないけど少しは興味もって知識をアップデートしたら?
流れるようなインターフェースとかパイプラインを使ったワンライナーはモダンなプログラミングでは常識的なテクニックだよ
太古の時代から時が止まってるVBAのユーザーは知らないかもしれないけど
例えばc#のLinqやJavaのstreamなどはもろにパイプラインから影響を受けてるよね
VBAしか使わないのかもしれないけど少しは興味もって知識をアップデートしたら?
227デフォルトの名無しさん
2018/08/26(日) 11:53:35.10ID:CIvHkKPl228デフォルトの名無しさん
2018/08/26(日) 11:58:27.72ID:4dFHA/W/ >>224
低レベルの先頭切ってるのはお前なんだけどw
低レベルの先頭切ってるのはお前なんだけどw
229デフォルトの名無しさん
2018/08/26(日) 11:59:00.96ID:MAEGr9r4 >>227
必要あるなしでいったらなにも必要ないよ
手作業だけでも仕事はできる
そうじゃなくて、より良い方法はないか?って模索していくことが大事なんだろ
つーか事務員がstreamを理解できないなんてのも決めつけでしかない
所詮は部品の組み合わせだから、手続き型のアルゴリズムを理解するよりずっと簡単だよ
簡単で効果的だから様々な言語が挙って似たような機能を導入したんだ
必要あるなしでいったらなにも必要ないよ
手作業だけでも仕事はできる
そうじゃなくて、より良い方法はないか?って模索していくことが大事なんだろ
つーか事務員がstreamを理解できないなんてのも決めつけでしかない
所詮は部品の組み合わせだから、手続き型のアルゴリズムを理解するよりずっと簡単だよ
簡単で効果的だから様々な言語が挙って似たような機能を導入したんだ
230デフォルトの名無しさん
2018/08/26(日) 12:01:32.97ID:MAEGr9r4 >>228
の割にはVBAコードが何にも出てこないよな
低レベルのPSerが息をするように簡単に書ける処理を
これだけ時間をかけて答えることができたVBAerがまだ一人もいないってちょっとレベル低すぎでしょ
の割にはVBAコードが何にも出てこないよな
低レベルのPSerが息をするように簡単に書ける処理を
これだけ時間をかけて答えることができたVBAerがまだ一人もいないってちょっとレベル低すぎでしょ
231デフォルトの名無しさん
2018/08/26(日) 12:03:51.56ID:4dFHA/W/232デフォルトの名無しさん
2018/08/26(日) 12:04:43.65ID:4dFHA/W/ >>230
どう言う意味だか教えて欲しいですよ!
どう言う意味だか教えて欲しいですよ!
233デフォルトの名無しさん
2018/08/26(日) 12:09:14.50ID:Kp4FoNKX ID:4dFHA/W/
こいつなんなの?誰にも無益なレスばかり
こいつなんなの?誰にも無益なレスばかり
234デフォルトの名無しさん
2018/08/26(日) 12:11:11.72ID:MAEGr9r4235デフォルトの名無しさん
2018/08/26(日) 12:13:53.71ID:CIvHkKPl 会社のPCにしかExcel入ってないから無理
236デフォルトの名無しさん
2018/08/26(日) 12:15:34.05ID:NdNCtt3a ユーザー系の仕事でVBAつったら、事務員のスプレッドを少し自動化したものから、業務知識鬼のベテランがプログラム ちょっとかじったものまであるけど、最近またRPAバブルで前者を移植することになった
このRPAっつー半分胡散臭いものが流行るおかげでワシらオッサンPGが食っていけるわけだが、いかんせん胡散臭い
このRPAっつー半分胡散臭いものが流行るおかげでワシらオッサンPGが食っていけるわけだが、いかんせん胡散臭い
237デフォルトの名無しさん
2018/08/26(日) 12:16:54.34ID:4dFHA/W/238デフォルトの名無しさん
2018/08/26(日) 12:17:40.69ID:4dFHA/W/239デフォルトの名無しさん
2018/08/26(日) 12:27:21.24ID:IHxJX3F+ >>234
これ一個ずつやってみたらどうだろ?
VBAの実装の仕方がわからないって質問ですよね
1. インポート_CSV
2. 追加_数式列
3. ソート_数式列
4. 変換_テーブルレイアウト
自分で調べてみてそれでもわからないことが
出てきたら具体的に聞いてもらうということで
これ一個ずつやってみたらどうだろ?
VBAの実装の仕方がわからないって質問ですよね
1. インポート_CSV
2. 追加_数式列
3. ソート_数式列
4. 変換_テーブルレイアウト
自分で調べてみてそれでもわからないことが
出てきたら具体的に聞いてもらうということで
240デフォルトの名無しさん
2018/08/26(日) 12:27:42.40ID:Kp4FoNKX 無能な味方が無自覚にバックファイアしてるようにしか見えん
241デフォルトの名無しさん
2018/08/26(日) 12:30:12.52ID:IHxJX3F+ 他人を値踏みするスレじゃないですし
他人と自分を比較して自信をつけるスレでもないと思うんですよ
Excel VBAでわからないことがあったら質問するスレということで
ご理解賜りたいと思う次第でございます
他人と自分を比較して自信をつけるスレでもないと思うんですよ
Excel VBAでわからないことがあったら質問するスレということで
ご理解賜りたいと思う次第でございます
242デフォルトの名無しさん
2018/08/26(日) 12:31:08.57ID:IHxJX3F+243デフォルトの名無しさん
2018/08/26(日) 12:38:03.33ID:gb73y82y >>536
dbからcsvでブッコ抜いた、300万件程度のレコードのなかから
〜って条件に該当するレコードをExcelで抜いてくださいと言われたことがあって困惑した
Excelじゃ無理だといったら「なんで出来ないのか、PGなんだからできるでしょ」みたいな言い方された
1週間あげるから、1週間でExcelであげて欲しいと・・
結局なんとか、Excelじゃなくてもいいと説得してその日のうちに
仕上げたら「早すぎるのじゃないか」「正確性が心配だ」と文句言われた
ことを思い出した
dbからcsvでブッコ抜いた、300万件程度のレコードのなかから
〜って条件に該当するレコードをExcelで抜いてくださいと言われたことがあって困惑した
Excelじゃ無理だといったら「なんで出来ないのか、PGなんだからできるでしょ」みたいな言い方された
1週間あげるから、1週間でExcelであげて欲しいと・・
結局なんとか、Excelじゃなくてもいいと説得してその日のうちに
仕上げたら「早すぎるのじゃないか」「正確性が心配だ」と文句言われた
ことを思い出した
244デフォルトの名無しさん
2018/08/26(日) 12:40:55.31ID:4ngh3oqJ だからなんで読んだ瞬間に組めると思うようなアホ臭い処理で比較してるんだよ。
頭悪いなあ。
そんなもんで比較してもVBAの優位性は変わらんぞ。
Excel上から実行出来るとか1ファイルで済むとか。
例えばフローレイアウトを使うことは無いと思うが、あれならまだ分かる。
あれはVBAじゃ無理だと思うからな。
見て組めると思うようなものをわざわざこんな所で披露するのはアホだと思う。
そんなもんは仕事でやれ。
そんなくだらないことをする時間がもったいない。
頭悪いなあ。
そんなもんで比較してもVBAの優位性は変わらんぞ。
Excel上から実行出来るとか1ファイルで済むとか。
例えばフローレイアウトを使うことは無いと思うが、あれならまだ分かる。
あれはVBAじゃ無理だと思うからな。
見て組めると思うようなものをわざわざこんな所で披露するのはアホだと思う。
そんなもんは仕事でやれ。
そんなくだらないことをする時間がもったいない。
245デフォルトの名無しさん
2018/08/26(日) 12:42:38.16ID:Kp4FoNKX 今のExcelって100万行/シートだから3つか4つのシートに分割して読み込んで処理すれば不可能ではないよな、65000行時代なら考えたくないが
246デフォルトの名無しさん
2018/08/26(日) 12:43:02.28ID:L5No1MGJ247デフォルトの名無しさん
2018/08/26(日) 12:45:59.62ID:MAEGr9r4 >>243
VBAにこだわる人ってそんなもんよ
VBAにこだわる人ってそんなもんよ
248デフォルトの名無しさん
2018/08/26(日) 12:46:25.60ID:4ngh3oqJ >>243
いや、仕事でやったことあるぞ。
もっとデータ多かったと思う。
それに引っこ抜くだけじゃなくて、それで演算もしてた。
今、計算してみたらデータは26280000以上だった。
正確には分からないけど多分倍以上だな。
いや、仕事でやったことあるぞ。
もっとデータ多かったと思う。
それに引っこ抜くだけじゃなくて、それで演算もしてた。
今、計算してみたらデータは26280000以上だった。
正確には分からないけど多分倍以上だな。
249デフォルトの名無しさん
2018/08/26(日) 12:48:32.93ID:MAEGr9r4 >>244
VBAだと組むのに多大な労力がかかるからレスバトルごときではやりたくないんですよね
その気持ちわかります
これがVBAでもスラスラ短く書けるものだったらほれみたことかと言わんばかりに嬉々として解答してくれていたのでしょうね
VBAだと組むのに多大な労力がかかるからレスバトルごときではやりたくないんですよね
その気持ちわかります
これがVBAでもスラスラ短く書けるものだったらほれみたことかと言わんばかりに嬉々として解答してくれていたのでしょうね
250デフォルトの名無しさん
2018/08/26(日) 12:52:38.54ID:IHxJX3F+ >>246
ホントだ受け付けてないんだね
ホントだ受け付けてないんだね
251デフォルトの名無しさん
2018/08/26(日) 12:53:11.08ID:IHxJX3F+ バトルだったのかー
252デフォルトの名無しさん
2018/08/26(日) 12:53:15.29ID:4ngh3oqJ 1000個所以上(多分倍以上)の場所から1時間毎に取得したデータ3年分だな。
これをある時間毎に平均をとって1日に24個の平均値を作り、その最大をその日のデータとする。
で、それを3年分の日数取ってきて・・・
みたいな。
これをある時間毎に平均をとって1日に24個の平均値を作り、その最大をその日のデータとする。
で、それを3年分の日数取ってきて・・・
みたいな。
253デフォルトの名無しさん
2018/08/26(日) 12:56:49.15ID:4ngh3oqJ >>249
いや、スラスラとか関係ない。
5分で出来るものが20分になっても大したことない。
出来ないものは出来ないし、
何とかして頑張って出来るというものだったら5分が10日とかになる。
そういう方が問題。
解決策がみい出せるかどうかの方がよっぽど重要だよ。
いや、スラスラとか関係ない。
5分で出来るものが20分になっても大したことない。
出来ないものは出来ないし、
何とかして頑張って出来るというものだったら5分が10日とかになる。
そういう方が問題。
解決策がみい出せるかどうかの方がよっぽど重要だよ。
254デフォルトの名無しさん
2018/08/26(日) 12:57:52.90ID:IHxJX3F+ /⌒ヽ
\ ⊂[(_ ^ν^) 決闘状を申し込む!
\/ (⌒マ´
(⌒ヽrヘJつ
> _)、
し' \_) ヽヾ\
丶_n.__
[I_ 三ヲ (
 ̄ (⌒
⌒Y⌒
\ ⊂[(_ ^ν^) 決闘状を申し込む!
\/ (⌒マ´
(⌒ヽrヘJつ
> _)、
し' \_) ヽヾ\
丶_n.__
[I_ 三ヲ (
 ̄ (⌒
⌒Y⌒
255デフォルトの名無しさん
2018/08/26(日) 12:59:13.59ID:4ngh3oqJ256デフォルトの名無しさん
2018/08/26(日) 13:07:54.88ID:TGlid3xa たとえスラスラ書けてもVBAじゃ1レスに収まらないでしょ
VBAerはpastebinとかgistとかのコード共有サービスの存在も知らなそうだし
VBAerはpastebinとかgistとかのコード共有サービスの存在も知らなそうだし
257デフォルトの名無しさん
2018/08/26(日) 13:21:54.43ID:MAEGr9r4258デフォルトの名無しさん
2018/08/26(日) 13:22:28.02ID:MAEGr9r4 >>255
なら誰も答えられないってことはできないってことなんだろうな
なら誰も答えられないってことはできないってことなんだろうな
259デフォルトの名無しさん
2018/08/26(日) 13:29:43.99ID:nkjaCm6A ワンライナーじゃなくてもいいけどイミディエイトウィンドウしか使っちゃいけないって趣旨ですね?
260デフォルトの名無しさん
2018/08/26(日) 13:35:01.25ID:2yDRx5ys >>259
もしできるならイミディエイトがいいけど
どうもVBAでは不可能って結論に落ち着きそうだから無理してイミディエイトを使わなくてもいいよ
普通にbasでもclsでも使ってください
とはいえレス分割するほど長くなると読む気がなくなるのでなるべくスマートに収めてください
もしできるならイミディエイトがいいけど
どうもVBAでは不可能って結論に落ち着きそうだから無理してイミディエイトを使わなくてもいいよ
普通にbasでもclsでも使ってください
とはいえレス分割するほど長くなると読む気がなくなるのでなるべくスマートに収めてください
261デフォルトの名無しさん
2018/08/26(日) 13:35:33.66ID:Kp4FoNKX >>243 よくよく考えると 1レコード分のバッファと条件一致したレコードの書き出し先さえ確保すれば
ReadLineの繰り返しで処理可能だから、レコードが何件あっても問題なさそう。
シートに取り込む必要なんてないわw
65000行時代でもできたと思うな
ReadLineの繰り返しで処理可能だから、レコードが何件あっても問題なさそう。
シートに取り込む必要なんてないわw
65000行時代でもできたと思うな
262デフォルトの名無しさん
2018/08/26(日) 14:09:05.11ID:gniZ58wi 下のコードでボタンを押すたびにAの値が増えていくのですが
グローバル変数ってプログラムが終わっても残るものですか
またプログラムが終わったときに消えるにはどうしたらいいです?
Option Explicit
Dim A As Long
Sub ボタン1_Click()
A = A + 1
MsgBox A
End Sub
グローバル変数ってプログラムが終わっても残るものですか
またプログラムが終わったときに消えるにはどうしたらいいです?
Option Explicit
Dim A As Long
Sub ボタン1_Click()
A = A + 1
MsgBox A
End Sub
263hoge
2018/08/26(日) 14:51:46.48ID:A6DnlFkA >>79,239
暇だから書いてみた。
素人が書いたコードだからワンライナー?ではないけど許してほしい。
[Module1]
Sub hoge()
Dim i As Long, k As Long
Dim data() As Variant
Dim cCsv As Collection
Dim csv As clsCSV
Dim fso As New FileSystemObject
Dim fn As Variant
'CSV読み込み
k = 0
Set cCsv = New Collection
For Each fn In FileFilter(ThisWorkbook.Path, "csv")
Set csv = New clsCSV
cCsv.Add csv.LoadCSV(CStr(fn))
k = k + csv.RowsCount
Next
'CSV合成・計算
ReDim data(1 To k + 1, 1 To 4)
data(1, 1) = "X": data(1, 2) = "Y": data(1, 3) = "Z": data(1, 4) = "D"
k = 1
For Each csv In cCsv
For i = 1 To csv.RowsCount
k = k + 1
data(k, 1) = csv.Table(i, "X")
data(k, 2) = csv.Table(i, "Y")
data(k, 3) = csv.Table(i, "Z")
data(k, 4) = (csv.Table(i, "X") ^ 2 + csv.Table(i, "Y") ^ 2 + csv.Table(i, "Z") ^ 2) ^ (1 / 2)
Next
Next
暇だから書いてみた。
素人が書いたコードだからワンライナー?ではないけど許してほしい。
[Module1]
Sub hoge()
Dim i As Long, k As Long
Dim data() As Variant
Dim cCsv As Collection
Dim csv As clsCSV
Dim fso As New FileSystemObject
Dim fn As Variant
'CSV読み込み
k = 0
Set cCsv = New Collection
For Each fn In FileFilter(ThisWorkbook.Path, "csv")
Set csv = New clsCSV
cCsv.Add csv.LoadCSV(CStr(fn))
k = k + csv.RowsCount
Next
'CSV合成・計算
ReDim data(1 To k + 1, 1 To 4)
data(1, 1) = "X": data(1, 2) = "Y": data(1, 3) = "Z": data(1, 4) = "D"
k = 1
For Each csv In cCsv
For i = 1 To csv.RowsCount
k = k + 1
data(k, 1) = csv.Table(i, "X")
data(k, 2) = csv.Table(i, "Y")
data(k, 3) = csv.Table(i, "Z")
data(k, 4) = (csv.Table(i, "X") ^ 2 + csv.Table(i, "Y") ^ 2 + csv.Table(i, "Z") ^ 2) ^ (1 / 2)
Next
Next
264hoge
2018/08/26(日) 14:52:20.01ID:A6DnlFkA >>263 続き
'XLSXへエクスポート
Dim WB As Workbook
Dim Sh As Worksheet
Dim Tbl As Range
Dim LO As ListObject
Set WB = Workbooks.Add
Set Sh = WB.Worksheets(1)
Set Tbl = Sh.Cells(1, 1).Resize(UBound(data, 1), UBound(data, 2))
Tbl.Value = data
Set LO = Sh.ListObjects.Add(xlSrcRange, Tbl, , xlYes)
LO.Sort.SortFields.Clear
LO.Sort.SortFields.Add Key:=LO.ListColumns("D").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
LO.Sort.Apply
WB.SaveAs ThisWorkbook.Path & "\hoge.xlsx"
WB.Close False
End Sub
'XLSXへエクスポート
Dim WB As Workbook
Dim Sh As Worksheet
Dim Tbl As Range
Dim LO As ListObject
Set WB = Workbooks.Add
Set Sh = WB.Worksheets(1)
Set Tbl = Sh.Cells(1, 1).Resize(UBound(data, 1), UBound(data, 2))
Tbl.Value = data
Set LO = Sh.ListObjects.Add(xlSrcRange, Tbl, , xlYes)
LO.Sort.SortFields.Clear
LO.Sort.SortFields.Add Key:=LO.ListColumns("D").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
LO.Sort.Apply
WB.SaveAs ThisWorkbook.Path & "\hoge.xlsx"
WB.Close False
End Sub
265デフォルトの名無しさん
2018/08/26(日) 14:53:06.26ID:A6DnlFkA >>264 普通は汎用モジュールを使うが自宅にないので、それっぽく再現したもの
Function FileFilter(folder As String, ext As String, Optional ret As Collection) As Collection
Dim fso As FileSystemObject
Dim fil As File
Dim fol As folder
Set fso = New FileSystemObject
If ret Is Nothing Then Set ret = New Collection
For Each fil In fso.GetFolder(folder).Files
If fil.Name Like "*" & ext Then
ret.Add fil.Path
End If
Next
For Each fol In fso.GetFolder(folder).SubFolders
Call FileFilter(fol.Path, ext, ret)
Next
Set FileFilter = ret
End Function
Function FileFilter(folder As String, ext As String, Optional ret As Collection) As Collection
Dim fso As FileSystemObject
Dim fil As File
Dim fol As folder
Set fso = New FileSystemObject
If ret Is Nothing Then Set ret = New Collection
For Each fil In fso.GetFolder(folder).Files
If fil.Name Like "*" & ext Then
ret.Add fil.Path
End If
Next
For Each fol In fso.GetFolder(folder).SubFolders
Call FileFilter(fol.Path, ext, ret)
Next
Set FileFilter = ret
End Function
266hoge
2018/08/26(日) 14:54:14.81ID:A6DnlFkA >>265 続き[clsCsv]
Private data As Variant
Private dCol As Dictionary
Public Function LoadCSV(fn As String) As clsCSV
Dim i As Long, j As Long, k As Long
'インポート
'※CSVの仕様が書いてないから、遅いけどコレで。
With Workbooks.Open(fn)
data = .Worksheets(1).UsedRange.Value
.Close False
End With
'列情報のキャッシュ
Set dCol = New Dictionary
For i = 1 To UBound(data, 2)
dCol.Add data(1, i), i
Next
Set LoadCSV = Me
End Function
Public Property Get Table(Row As Long, Col As String) As Variant
If dCol.Exists(Col) Then
Table = data(Row + 1, dCol(Col))
Else
Err.Raise 9999
End If
End Property
Public Property Get RowsCount() As Long
RowsCount = UBound(data, 1) - 1
End Property
行数制限が辛いわ
Private data As Variant
Private dCol As Dictionary
Public Function LoadCSV(fn As String) As clsCSV
Dim i As Long, j As Long, k As Long
'インポート
'※CSVの仕様が書いてないから、遅いけどコレで。
With Workbooks.Open(fn)
data = .Worksheets(1).UsedRange.Value
.Close False
End With
'列情報のキャッシュ
Set dCol = New Dictionary
For i = 1 To UBound(data, 2)
dCol.Add data(1, i), i
Next
Set LoadCSV = Me
End Function
Public Property Get Table(Row As Long, Col As String) As Variant
If dCol.Exists(Col) Then
Table = data(Row + 1, dCol(Col))
Else
Err.Raise 9999
End If
End Property
Public Property Get RowsCount() As Long
RowsCount = UBound(data, 1) - 1
End Property
行数制限が辛いわ
267デフォルトの名無しさん
2018/08/26(日) 14:54:45.29ID:Kp4FoNKX Sub の中で宣言すりゃいい
269hoge
2018/08/26(日) 15:01:06.14ID:A6DnlFkA 無理に1行に押し込むより、少しづつステップ実行できる方が読みやすいし、良いのでは無いかと思うのでした。
VBAerの人頑張って最適化して?
VBAerの人頑張って最適化して?
270デフォルトの名無しさん
2018/08/26(日) 15:32:56.80ID:2yDRx5ys 長いなぁ
これ事務員さんにメンテナンス出来る?
これ事務員さんにメンテナンス出来る?
271デフォルトの名無しさん
2018/08/26(日) 15:52:42.90ID:Kp4FoNKX dim csv as clsCSV
て通るの?そんな型知らないんだが
て通るの?そんな型知らないんだが
272デフォルトの名無しさん
2018/08/26(日) 15:56:23.14ID:A6DnlFkA >>270
長いだけで素人にはすごく読みやすいよ。
F8で1行づつ動きを確認していって”ここだ!”ってところで追記して、実行して、違ったら矢印をちょっと前まで戻して、また追記して実行してry
って感じなので・・・。
長いだけで素人にはすごく読みやすいよ。
F8で1行づつ動きを確認していって”ここだ!”ってところで追記して、実行して、違ったら矢印をちょっと前まで戻して、また追記して実行してry
って感じなので・・・。
273デフォルトの名無しさん
2018/08/26(日) 15:57:37.27ID:A6DnlFkA274デフォルトの名無しさん
2018/08/26(日) 15:58:18.95ID:A6DnlFkA275デフォルトの名無しさん
2018/08/26(日) 16:04:06.82ID:YE41eTAF ruby厨のせいでrubyが不当に貶められてるのが気に食わないのでrubyで>>79書いた
1レスに収まるこの簡潔さよ
require "csv"
require "win32ole"
path_to_folder = "."
data = Dir[path_to_folder + "/*.csv"]
.map{|path| CSV.read(path, converters: :numeric)}.flatten(1)
.sort_by{|x, y, z| (x**2 + y**2 + z**2) ** 0.5}.reverse
ws = WIN32OLE.new("Excel.Application").tap{|app| app.Visible = true}
.Workbooks.Add.Sheets[1]
cells = ws.Range(ws.Cells(1,1), ws.Cells(data.size, 3))
cells.value = data
ws.ListObjects.Add(nil, cells)
ワンライナーじゃExcel操作するのを綺麗に書けないから諦め
APIが糞ってはっきりわかんだね
1レスに収まるこの簡潔さよ
require "csv"
require "win32ole"
path_to_folder = "."
data = Dir[path_to_folder + "/*.csv"]
.map{|path| CSV.read(path, converters: :numeric)}.flatten(1)
.sort_by{|x, y, z| (x**2 + y**2 + z**2) ** 0.5}.reverse
ws = WIN32OLE.new("Excel.Application").tap{|app| app.Visible = true}
.Workbooks.Add.Sheets[1]
cells = ws.Range(ws.Cells(1,1), ws.Cells(data.size, 3))
cells.value = data
ws.ListObjects.Add(nil, cells)
ワンライナーじゃExcel操作するのを綺麗に書けないから諦め
APIが糞ってはっきりわかんだね
276デフォルトの名無しさん
2018/08/26(日) 16:17:18.62ID:YE41eTAF >>79 Dも出力するのかこれ。ちょっと(1行と1文字)修正
require "csv"
require "win32ole"
path_to_folder = "."
data = Dir[path_to_folder + "/*.csv"]
.map{|path| CSV.read(path, converters: :numeric)}.flatten(1)
.map{|x, y, z| [x, y, z, (x**2 + y**2 + z**2) ** 0.5]}.sort_by(&:last).reverse
ws = WIN32OLE.new("Excel.Application").tap{|app| app.Visible = true}
.Workbooks.Add.Sheets[1]
cells = ws.Range(ws.Cells(1,1), ws.Cells(data.size, 4))
cells.value = data
ws.ListObjects.Add(nil, cells)
なおcsvライブラリは標準添付ライブラリなのでわざわざ自作クラスとか作る必要ないです
require "csv"
require "win32ole"
path_to_folder = "."
data = Dir[path_to_folder + "/*.csv"]
.map{|path| CSV.read(path, converters: :numeric)}.flatten(1)
.map{|x, y, z| [x, y, z, (x**2 + y**2 + z**2) ** 0.5]}.sort_by(&:last).reverse
ws = WIN32OLE.new("Excel.Application").tap{|app| app.Visible = true}
.Workbooks.Add.Sheets[1]
cells = ws.Range(ws.Cells(1,1), ws.Cells(data.size, 4))
cells.value = data
ws.ListObjects.Add(nil, cells)
なおcsvライブラリは標準添付ライブラリなのでわざわざ自作クラスとか作る必要ないです
277デフォルトの名無しさん
2018/08/26(日) 16:22:13.35ID:IHxJX3F+278デフォルトの名無しさん
2018/08/26(日) 16:23:38.44ID:IHxJX3F+ Export-Excelはどうやって使うん?
事務員にできるん?
事務員にできるん?
279デフォルトの名無しさん
2018/08/26(日) 16:23:51.10ID:53MEpRMM280デフォルトの名無しさん
2018/08/26(日) 16:25:46.43ID:IHxJX3F+ 事務員なら余裕やろな
281デフォルトの名無しさん
2018/08/26(日) 16:26:56.43ID:53MEpRMM >>280
コードを書かない人はプログラマでも事務員マクラーでもありません
コードを書かない人はプログラマでも事務員マクラーでもありません
282デフォルトの名無しさん
2018/08/26(日) 16:29:19.59ID:IHxJX3F+ はい。
283デフォルトの名無しさん
2018/08/26(日) 16:30:47.98ID:A6DnlFkA >>276
自分が慣れてる書き方するために自作クラス作ったけど、作らなくても普通に書けるのでそこはツッコムところじゃないよ!
VBAは複数の二次元配列をマージする処理を自力で書かないといけないし、ソートもRangeに対して実行するか自作するかしないと出来ないので大変だとは思う。
やりたい命令がちゃんと用意されてるのはいいなぁ。
自分が慣れてる書き方するために自作クラス作ったけど、作らなくても普通に書けるのでそこはツッコムところじゃないよ!
VBAは複数の二次元配列をマージする処理を自力で書かないといけないし、ソートもRangeに対して実行するか自作するかしないと出来ないので大変だとは思う。
やりたい命令がちゃんと用意されてるのはいいなぁ。
284デフォルトの名無しさん
2018/08/26(日) 16:33:02.31ID:A6DnlFkA285デフォルトの名無しさん
2018/08/26(日) 16:37:26.33ID:LgI1E3BQ WSHのjscript版。with_なんちゃらは適当に補完してね。jscriptにはsafearrayがないから普通に書くとセル格納が糞遅い。
var base_path = "C:\base_path"
var outxls = "DXYZ.xlsx";
var csv_list = [];
with_dir(base_path, function(file) {
if (!file.path.match(/\.csv$/i)) return;
var i = 1;
with_file(file.path, function(str){
if (i++ == 1) return; // exclude header
var csv1 = str.split(",");
var x = parseFloat(csv1[0]); var y = parseFloat(csv1[1]); var z = parseFloat(csv1[2]);
var d = Math.sqrt(Math.pow(x,2) + Math.pow(y,2) + Math.pow(z,2))
csv_list.push([d, x, y, z]);
})
})
function csv_list_sort(a, b) {
return b[0] - a[0];
}
with_excel(outxls, function(excel, book){
var sheet = (new Enumerator( book.Worksheets)).item();
csv_list.sort(csv_list_sort);
csv_list.unshift(["D","X","Y","Z"]);
for(var i = 0; i < csv_list.length; i++) {
sheet.cells(i + 1, 1).value = csv_list[i][0];
sheet.cells(i + 1, 2).value = csv_list[i][1];
sheet.cells(i + 1, 3).value = csv_list[i][2];
sheet.cells(i + 1, 4).value = csv_list[i][3];
}
})
var base_path = "C:\base_path"
var outxls = "DXYZ.xlsx";
var csv_list = [];
with_dir(base_path, function(file) {
if (!file.path.match(/\.csv$/i)) return;
var i = 1;
with_file(file.path, function(str){
if (i++ == 1) return; // exclude header
var csv1 = str.split(",");
var x = parseFloat(csv1[0]); var y = parseFloat(csv1[1]); var z = parseFloat(csv1[2]);
var d = Math.sqrt(Math.pow(x,2) + Math.pow(y,2) + Math.pow(z,2))
csv_list.push([d, x, y, z]);
})
})
function csv_list_sort(a, b) {
return b[0] - a[0];
}
with_excel(outxls, function(excel, book){
var sheet = (new Enumerator( book.Worksheets)).item();
csv_list.sort(csv_list_sort);
csv_list.unshift(["D","X","Y","Z"]);
for(var i = 0; i < csv_list.length; i++) {
sheet.cells(i + 1, 1).value = csv_list[i][0];
sheet.cells(i + 1, 2).value = csv_list[i][1];
sheet.cells(i + 1, 3).value = csv_list[i][2];
sheet.cells(i + 1, 4).value = csv_list[i][3];
}
})
286デフォルトの名無しさん
2018/08/26(日) 16:43:57.24ID:Kp4FoNKX イミディエイトウインドウ縛りを外して貰えれば、Excel標準実装のデータインポートメソッドで文字コードもデリミタも如何様にも設定できたるし、その上速いらしいよ下記のサンプル4ね
http://www.wat3d.com/gogo/vba-speedup/2-CSV-Uptake/
http://www.wat3d.com/gogo/vba-speedup/2-CSV-Uptake/
287デフォルトの名無しさん
2018/08/26(日) 16:44:22.05ID:2yDRx5ys いいね
プログラム板らしくなってきたじゃないか
プログラム板らしくなってきたじゃないか
288デフォルトの名無しさん
2018/08/26(日) 16:46:10.81ID:TGlid3xa >>286
サンプルじゃなくて完動するコードを貼れやカス
サンプルじゃなくて完動するコードを貼れやカス
289デフォルトの名無しさん
2018/08/26(日) 16:47:59.21ID:IHxJX3F+ >>288
お前がやるんや
お前がやるんや
290デフォルトの名無しさん
2018/08/26(日) 16:52:27.57ID:TGlid3xa >>288
めちゃくちゃ長くなるから無理
めちゃくちゃ長くなるから無理
291デフォルトの名無しさん
2018/08/26(日) 17:05:59.45ID:4dFHA/W/ >>290
自演ですか?
自演ですか?
292デフォルトの名無しさん
2018/08/26(日) 18:01:16.22ID:4ngh3oqJ >>257
バーカ。
5分が20分になっても、全く時間なんて使ってないというぐらいだ。
まともにプログラム組んだこと無いか、誰でもできるルーチンワ―クしか書いたことないんだろ。
仕事で組んでる時だって上手いアイデア出すのに長い時間使って、15分節約できたことなんて何の意味も無い。
バーカ。
5分が20分になっても、全く時間なんて使ってないというぐらいだ。
まともにプログラム組んだこと無いか、誰でもできるルーチンワ―クしか書いたことないんだろ。
仕事で組んでる時だって上手いアイデア出すのに長い時間使って、15分節約できたことなんて何の意味も無い。
293デフォルトの名無しさん
2018/08/26(日) 18:05:20.39ID:4ngh3oqJ つまらんプログラムなんで読む気もせん。
294デフォルトの名無しさん
2018/08/26(日) 18:09:10.63ID:TGlid3xa いいからコードで語れや
295デフォルトの名無しさん
2018/08/26(日) 18:10:19.11ID:53MEpRMM >>292
バーカ
アイデア出すのに時間を最大限使いたいからくだらん仕事は可及的速やかに終わらせるんだよ
VBAなんかに時間使ったら頭使う時間もエネルギーも勿体なさすぎ
これプログラマの常識よ?
世の中みんなくだらん仕事はできるだけ楽にしてクリエイティブな仕事に時間体力金を使おうって考えてんの
クソやりにくい言語で自らを縛って車輪の再発明を繰り返す変人なんて相手にもされんわ
バーカ
アイデア出すのに時間を最大限使いたいからくだらん仕事は可及的速やかに終わらせるんだよ
VBAなんかに時間使ったら頭使う時間もエネルギーも勿体なさすぎ
これプログラマの常識よ?
世の中みんなくだらん仕事はできるだけ楽にしてクリエイティブな仕事に時間体力金を使おうって考えてんの
クソやりにくい言語で自らを縛って車輪の再発明を繰り返す変人なんて相手にもされんわ
296デフォルトの名無しさん
2018/08/26(日) 18:11:36.64ID:FkpCoYCZ >>293
読まなきゃ自尊心傷付かないもんなw
読まなきゃ自尊心傷付かないもんなw
297デフォルトの名無しさん
2018/08/26(日) 18:27:20.32ID:L5No1MGJ プログラマってクリエイティブなんだ
知らなかったわ
知らなかったわ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【STARTO ENTERTAINMENT】timelesz篠塚大輝『大きな古時計』替え歌一発ギャグ「今はもう動かない おじいさんにトドメ~♪」が波紋 [Ailuropoda melanoleuca★]
- 【朗報】外務省局長、中国側の要求を断固拒否。「高市さんの答弁は日本政府の立場を変えるものではないし、撤回しない」 [519511584]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【実況】博衣こよりのえちえち歌枠🧪
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- たまにaカップの女いるけど何を楽しめばいいの?
