Excel VBA 質問スレ Part46 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2017/02/17(金) 23:42:25.33ID:AYehqi+eコード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part45
http://echo.2ch.net/test/read.cgi/tech/1483379476/
※注意
このスレで回答してるのは殆どがVariantを使えない初心者ですが
大目に見てあげてください
0002デフォルトの名無しさん
2017/02/17(金) 23:58:26.48ID:2mT5ROZr2GETぉぉぉぉぉぉぉ!!!!
0003デフォルトの名無しさん
2017/02/18(土) 00:06:46.04ID:XJ34BKHl__ __ \\
/ /  ̄ / / /
/ / __/ _/
 ̄ ̄
みたいな感じで。
0004デフォルトの名無しさん
2017/02/18(土) 08:46:22.71ID:uqTw3F8T0005デフォルトの名無しさん
2017/02/18(土) 09:04:33.80ID:fWF8oK3dコレクション用の便利アルゴリズム集を実装せねば!
0006デフォルトの名無しさん
2017/02/18(土) 10:01:17.91ID:uqTw3F8Tディクショナリだろ
0007デフォルトの名無しさん
2017/02/18(土) 14:31:06.52ID:sNsK+hADその上できちんと型指定もする。
オブジェクト指向的な使い方もするし。
0008デフォルトの名無しさん
2017/02/18(土) 15:12:05.05ID:R2U23ibp用途によりけりやね
ArrayListなんかもなかなか使いやすいし
0009デフォルトの名無しさん
2017/02/18(土) 15:14:21.93ID:d8X+Upmx※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
0010デフォルトの名無しさん
2017/02/18(土) 20:02:52.44ID:etUVWXQH0011デフォルトの名無しさん
2017/02/18(土) 22:57:26.18ID:G2ckVYLI0012デフォルトの名無しさん
2017/02/18(土) 23:02:06.81ID:uqTw3F8T0013デフォルトの名無しさん
2017/02/18(土) 23:37:56.86ID:R2U23ibp0014デフォルトの名無しさん
2017/02/19(日) 00:10:11.38ID:nLURoMmz0015デフォルトの名無しさん
2017/02/19(日) 00:10:51.40ID:io38xkSf無能なvariantおじさんどもがおとなしくなったから平和なんだよ
0016デフォルトの名無しさん
2017/02/19(日) 00:10:52.57ID:+0PX9x4E0017デフォルトの名無しさん
2017/02/19(日) 00:23:29.37ID:nLURoMmzhttp://qiita.com/tomochan154/items/9dd43fa04a8073f7c6f3
「今どき配列使ってる男の人って・・・」
0018デフォルトの名無しさん
2017/02/19(日) 01:37:04.40ID:fGPiSeknはどう結論づけたの?
0019デフォルトの名無しさん
2017/02/19(日) 01:39:39.55ID:99UtXzmVMacでは使えないけどWindowsならVBAよりC#とか使ったほうが生産性も保守性も高いと思うんだが
0020デフォルトの名無しさん
2017/02/19(日) 03:13:08.97ID:MnxFh2MZC#で表計算機能を実装すると生産性が低くなると思うけどな
0021デフォルトの名無しさん
2017/02/19(日) 03:33:54.26ID:vZUhP3Rm配列の初期化チェックについてはsgnで分かるでしょ。
それかOn Error Resume NextでErr.Number調べるか。
言いたいことは分かるけど記事に書かれてる程度だったら配列の方が良いんじゃね?
コレクションクラスにするならもうちょっと機能が追加されてるとかさ。
例なんだろうけど。
0022デフォルトの名無しさん
2017/02/19(日) 04:07:53.06ID:99UtXzmV表計算機能はExcelが持ってるのになんでまた実装する必要があるんだよ
VBAで表計算機能を実装してるわけじゃないだろ?
0023デフォルトの名無しさん
2017/02/19(日) 07:48:14.83ID:nLURoMmz未初期化配列に Sgn 使うと内部エラーになった。
Not Not の方法は使えた。
なにか変わったのかな?
0024デフォルトの名無しさん
2017/02/19(日) 08:33:29.86ID:ngALvOwBブックに含めて配布できればな〜
おばちゃんにアドインの追加なんて無理
0025デフォルトの名無しさん
2017/02/19(日) 08:45:27.62ID:S05u5zifおばちゃんじゃなくても無理w
0026デフォルトの名無しさん
2017/02/19(日) 09:05:13.23ID:TZ/mXSM2社内資産のコード重複が爆発的に増えていく
0027デフォルトの名無しさん
2017/02/19(日) 09:32:56.19ID:7UYT3oOX0028デフォルトの名無しさん
2017/02/19(日) 09:37:31.82ID:XGSYoBCDアドインの追加を自動的にするツール作れば良いじゃん
0029デフォルトの名無しさん
2017/02/19(日) 10:09:48.15ID:eSq0skhb一発マクロ一兆個とか持ってんのかなこの人w
0030デフォルトの名無しさん
2017/02/19(日) 11:59:22.39ID:MnxFh2MZC#でどうやってVBAと同様の事を実現するの?
シート構造に依存してるとコードとバラバラになったりする
C#のVBAに対するメリットとして保守性とか生産性を上げてるけど
保守性とか生産性の指標は何でどの程度違うの?
0031デフォルトの名無しさん
2017/02/19(日) 12:26:16.97ID:VpaxOYNNそりゃ時間よ
マイクロおーだーっす
0032デフォルトの名無しさん
2017/02/19(日) 12:58:09.38ID:QFvkxUvl0033デフォルトの名無しさん
2017/02/19(日) 14:04:49.83ID:vZUhP3RmVBAでできないことをする場合はC#とかVB.net使う。
0034デフォルトの名無しさん
2017/02/19(日) 14:14:07.73ID:t4P0HCuO0035デフォルトの名無しさん
2017/02/19(日) 14:15:01.46ID:NrkH7giXExcel2016のウィンドウをVBAでモーダルフォーム上のボタンを押したときにマルチディスプレイ環境でエクセルの画面の大きさを変える動きを再現したいと思っています。
色々検索して、存在するデスクトップの情報を列挙するには
EnumDisplayMonitors()
GetMonitorInfo()
MONITORINFO構造体
現在エクセルウィンドウの存在するデスクトップは
MonitorFromRect()
辺りを使えばできそうなことは分かったのですが、自分でAPIを定義したことがないのでDeclare文が書けません。
VBで定義したサンプルを纏めたページとか無いのでしょうか。
0036デフォルトの名無しさん
2017/02/19(日) 14:23:26.29ID:vZUhP3RmそのAPIは使ったことないし、調べていないけど、Declare書けなくて、他人の書いたのを拝借したいなら"Declare"と一緒にそれぞれの関数ググってみたら?
0037デフォルトの名無しさん
2017/02/19(日) 14:44:41.05ID:2tImzZ1xコード品質をメトリクスとして計測するツールは他の言語環境だとあるけどVBAってそもそもそういうのあんの?
VBA環境は言語そのものも大概だけどそういったエコシステムが貧弱すぎて比べてどうなのってレベルにすら達していないと思う
0038デフォルトの名無しさん
2017/02/19(日) 14:46:23.41ID:mIodhKJ00039デフォルトの名無しさん
2017/02/19(日) 14:49:08.78ID:aYQEkC2uそこは2次元配列でいいんだよ
問題はその2次元配列をビジネスロジックでも使い続けてしまうバカが多い事
0040デフォルトの名無しさん
2017/02/19(日) 15:13:41.86ID:QFvkxUvlDBテーブルやCSVデータの展開は?
もしかして2次元配列じゃなくて1次元配列の配列を使う?
0041デフォルトの名無しさん
2017/02/19(日) 15:15:37.38ID:XGSYoBCDつかまあ、配列は配列で利点がないわけでもないとは思うよ
いろんな形のリストをしっかり状況によって使い分けることが大事なんじゃないの
0042デフォルトの名無しさん
2017/02/19(日) 15:24:58.45ID:MnxFh2MZ行数とかなら自分で作ればいい
エクスポートしてテキストエディタで見ても分かるし
他になんの指標が必要?
修正率とかならリポジトリとかでリビジョン管理して差分の数をカウントすれば良くね?
diffコマンドでもいいんじゃね
0043デフォルトの名無しさん
2017/02/19(日) 15:26:11.43ID:aYQEkC2u同じだよ
むしろそこでなぜ配列の配列とか2次元配列へ向かってしまうのか
多次元配列脳って面白いね
0044デフォルトの名無しさん
2017/02/19(日) 15:33:15.72ID:MnxFh2MZ具体的にはどうしてる?
構造体の配列とか?
レコードセットオブジェクトとか?
0045デフォルトの名無しさん
2017/02/19(日) 15:39:46.74ID:aYQEkC2uオブジェクトにマップ
0046デフォルトの名無しさん
2017/02/19(日) 15:47:49.05ID:MnxFh2MZVBAでO/Rマッピング(のこと?)ってどうやるの
列数が50とかあったりする場合は?
50とか変数持つクラス作ってそれを配列なりコレクションに入れるってこと?
0047デフォルトの名無しさん
2017/02/19(日) 16:11:14.76ID:QFvkxUvl0048デフォルトの名無しさん
2017/02/19(日) 16:12:56.97ID:NrkH7giXはっ・・言われてみれば・・・・。
調べてみたら出てきました。ありがとうございます。
0049デフォルトの名無しさん
2017/02/19(日) 16:18:26.23ID:aYQEkC2u他の言語と同じだよ
マッパーを手で書いたりコード生成したり
その前に何十も列持ってる事に疑問を持ってデータ構造見直したりだな
逆に2次元配列文化の人ってこういうデカイテーブルをどう扱ってるんだ?
1列目には商品コード
2列目には商品名
3列目には価格
…
みたいなドキュメントベースのルールがあって
間違えないように注意して地道に2次元配列にアクセスすんの?
何十箇所でアクセスしてたらどうすんの?
仕様変更する時めんどくさくね?
>>47
変化が激しい業務こそオブジェクト指向だよ
2次元配列を頻繁に使うシステムで仕様変更とかどう考えても地獄だろ
0050デフォルトの名無しさん
2017/02/19(日) 16:18:53.63ID:99UtXzmVアドインじゃなくてドキュメントレベルにすればいいんじゃ?
アドインでもClick Onceのインストールくらい
おばちゃんでもできるよ
0051デフォルトの名無しさん
2017/02/19(日) 16:22:11.74ID:99UtXzmVC#に反応しすぎ VBでも出来るから
どうやって実現するかは自分で調べて
バージョン管理のしやすさ、部品の再利用性、テストコードの書きやすさ、
リファクタリングのしやすさ、もろもろ違う
VBAだとコードを管理するのに独自の工夫をいくつも積み重ねる必要がある
0052デフォルトの名無しさん
2017/02/19(日) 16:29:46.20ID:vZUhP3Rmどっちにするかはその時の状況による。
何でも配列を否定は良くない。
大抵、大したことない時は配列かな。
でも多次元配列使う時もあるね。
その時格好いい方を使うな。
0053デフォルトの名無しさん
2017/02/19(日) 16:39:21.27ID:XGSYoBCDまあ、取り回ししやすい方を選ぶだけだけど
0054デフォルトの名無しさん
2017/02/19(日) 16:40:35.84ID:MnxFh2MZSQL使う
0055デフォルトの名無しさん
2017/02/19(日) 16:50:04.52ID:aYQEkC2u同時に使わない属性が大量にあるならまずその構造が正しいのか疑問を持つよね
0056デフォルトの名無しさん
2017/02/19(日) 16:51:27.10ID:MnxFh2MZ商品コード=1とかやっとけばいいんじゃね?
商品コード=find().column
とかでも良いし
0057デフォルトの名無しさん
2017/02/19(日) 16:55:40.18ID:MnxFh2MZ正規化したらjoin操作とか必要な場合どうするの?
正規化を知らない上司が一つにまとめないと理解できないことが問題だが
0058デフォルトの名無しさん
2017/02/19(日) 17:10:16.65ID:JyXmk48ja = "P002,アップル,200"
カンマで区切って1個めは商品コード、2個めは商品名、3個めは価格
こういうコードを冗談抜きで書いてしまう人が世の中には少なからず居る
データを配列にして何番めには何が入ってるなんてやる人はそれと大差がないって自覚してほしい
0059デフォルトの名無しさん
2017/02/19(日) 17:25:46.68ID:QFvkxUvlさすがにエクセルVBAを業務システムとして使う訳じゃないでしょ?
手元のデータ分析とかその都度アドホックな使い方するわけじゃん。
「仕様変更」ってのは今呼び出したSELECT文が5列あったとして、その場でもう一列追加して6列見てみようとか、
そういう使い方するんだよ。
0060デフォルトの名無しさん
2017/02/19(日) 17:33:38.18ID:JyXmk48jそういう使い方でも同じだよ
オブジェクト化しておけば追加した列をじゃあどう扱おうかというところを簡単に柔軟に安全にコードに反映させることができる
これが配列だったらどう扱おうかを決めてからコードを書き換えるまでの労力は大きい
0061デフォルトの名無しさん
2017/02/19(日) 17:39:29.01ID:QFvkxUvlCSVにしたってそうさ。
ドキュメントベースのルールがあってデータ構造決まったものに対するシステム?
VBAでやるとしたらプロトタイプ作りとかPOCだよ。
0062デフォルトの名無しさん
2017/02/19(日) 18:03:57.10ID:QFvkxUvl面倒くさいよ。
アドホックなレコード構造を扱うたびにわざわざクラスモジュールを追加するのかよ?
個別の作業なんて一切モジュールシートにコードを追加せずにやるのが理想さ。
0063デフォルトの名無しさん
2017/02/19(日) 18:34:30.66ID:QFvkxUvlSQLからのクエリ結果をオブジェクトにマップするとき、どっからか転記するわけでしょ?
2次元配列にまずバッファリングしておくんじゃないの。
だったら2次元配列にテーブルを読み込むライブラリは必要になると思うけど?
0064デフォルトの名無しさん
2017/02/19(日) 18:42:27.47ID:JyXmk48jマッピングがめんどくさいということは
マッピングしないでコードを書くとよりめんどくさいということだよ
属性が増えた時にコードを追加せずにできる処理なんてたかが知れてる
>>63
SQLからのマップで2次元配列の出番はないだろ
VBAだとDAOかADOだろレコードからオブジェクトに直接マップすればいい
0065デフォルトの名無しさん
2017/02/19(日) 18:48:38.74ID:MnxFh2MZオブジェクトにマッピングする時に元データの構造に依存するんじゃないの?
0066デフォルトの名無しさん
2017/02/19(日) 18:52:47.97ID:JyXmk48j依存する
しかしオブジェクトにした後はエクセルシートやDBテーブルやCSVファイルの構造に依存しなくなる
データとインとアウトのところだけ面倒を見れば後は全て扱いやすいオブジェクト指向の世界でコードを書ける
0067デフォルトの名無しさん
2017/02/19(日) 18:56:58.46ID:QFvkxUvlそれ新しいクラスを作るごとにレコードセットのMoveNextやら.Fields()やらのアルゴリズムを毎回実装するはめにならないか?
0068デフォルトの名無しさん
2017/02/19(日) 18:59:59.71ID:QFvkxUvlオブジェクト指向を否定は誰も否定していなくて、配列とはまるで直交した概念だと言ってるんだが。
そして配列に対する汎用アルゴリズムは、要素がオブジェクトの場合も変わらず必要になる。
0069デフォルトの名無しさん
2017/02/19(日) 19:33:54.44ID:JyXmk48jコード生成すればいいじゃん
0070デフォルトの名無しさん
2017/02/19(日) 19:38:47.00ID:JyXmk48j付いてこれてないぞ
オブジェクトの配列の是非の話なんて誰もしてない
オブジェクトにすべきところを露出した配列という物理的なデータ構造で扱っているというところを問題にしてるんだよ今は
0071デフォルトの名無しさん
2017/02/19(日) 19:44:00.15ID:E9SW8wQ3配列では難しくてオブジェクトに入れると簡単に出来る事の具体例はなに?
配列とかsheetで困る事が思い浮かばないんだけど
0072デフォルトの名無しさん
2017/02/19(日) 19:44:18.37ID:fGPiSeknなにかたってるの
>>64
>>67
0073デフォルトの名無しさん
2017/02/19(日) 19:44:39.24ID:QFvkxUvl違う
あんたは配列要らない派なんだろ
それに対してオブジェクト要らない派はここにいない
0074デフォルトの名無しさん
2017/02/19(日) 19:45:11.31ID:QFvkxUvl?
0075デフォルトの名無しさん
2017/02/19(日) 19:48:25.53ID:E9SW8wQ30076デフォルトの名無しさん
2017/02/19(日) 19:52:55.44ID:JyXmk48jなんでもできるよ
まあなんでもできるのは配列でもそうだがそれいっちゃ機械語でなんでもできるよと言ってるようなものだな
オブジェクト指向で書けば何をやってもシートや配列に依存したコードより美しく柔軟でメンテナンスしやすいコードができる
配列やシートというインフラストラクチャに依存しないということは規模が大きくなってきたときにデータをAccessに移行しようとかオフィスをやめて本格的なシステムにしようとなった時に簡単に移植できる
まあ事務員のおばちゃん程度の仕事内容なら脳トレ気分で配列いじるのも悪くないかな
0077デフォルトの名無しさん
2017/02/19(日) 19:52:59.48ID:fGPiSekn気にせずどうぞ
0078デフォルトの名無しさん
2017/02/19(日) 19:53:17.05ID:JyXmk48jとりあえず前スレからじっくり読み直してこい
0079デフォルトの名無しさん
2017/02/19(日) 20:29:33.71ID:QFvkxUvlあんたこそ前スレの>>995に答えてないじゃないか。だからまだ続くんだよ。
ユーザーは自分のクラスを作っていくらでも便利に使えばいいさ。
でもライブラリは特定の業務に依存しないから、入出力の型は汎用的なものでなければならない。
ライブラリ側からユーザーに「引数はこのクラス使ってね。出力はこのクラスね。」なんてできない。
そして 同じアルゴリズムを重複して実装するのは絶対に我慢ならないから、Variantとか配列を多用せざるを得ない。
ユーザーがオブジェクト指向のメリットを享受するのに邪魔になる点がないんだからあんたの反論は始めから的はずれ。
0080デフォルトの名無しさん
2017/02/19(日) 20:37:13.77ID:ngALvOwB> ブックに含めて配布したいなら
> アドインじゃなくてドキュメントレベルにすればいいんじゃ?
はあ?
それになんの意味が...
> アドインでもClick Onceのインストールくらい
> おばちゃんでもできるよ
おばちゃんなめんなよ w
0081デフォルトの名無しさん
2017/02/19(日) 20:42:45.80ID:JyXmk48j何にでも使える汎用的な処理なんていう幻想はプログラミング一年生で卒業しような
そんなものは目的がボンヤリしすぎててユーザーが使い方を理解できない
目的が明確で責務の少ないクラスを豊富に用意する
それがライブラリ製造担当の仕事だ
0082デフォルトの名無しさん
2017/02/19(日) 20:42:51.21ID:t4P0HCuO結局は多次元配列である必要の無い処理は、
多次元配列以外の適切な方法があるっていう至極当たり前の話なんだな。
0083デフォルトの名無しさん
2017/02/19(日) 20:47:29.11ID:JyXmk48jそう
それだけの話
ついでに加えるとすれば多次元配列である必要がある処理なんて殆どない
オブジェクトのコレクション(1次元配列を含む)で事足りる
0084デフォルトの名無しさん
2017/02/19(日) 20:47:50.59ID:fGPiSekn適切さってなに?
0085デフォルトの名無しさん
2017/02/19(日) 20:50:46.37ID:MnxFh2MZオブジェクト志向が考えられる前もアルゴリズムを実現はできてたんじゃね
単に好みの問題なきがするな
SQL使えばアクセスへの移行なんてすぐに出来るし
MySQLとかのRDBMS使うシステムへも簡単に移行出来る
レコードセットをそのまま使うか配列にいれるかオブジェクトにいれるかくらいの違いでしかない
0086デフォルトの名無しさん
2017/02/19(日) 20:55:17.51ID:QFvkxUvlはあ?
配列の連結や比較可能なオブジェクトのサーチやソートは要素が何であっても汎用的なものだし同一アルゴリズムになる。
それは二度実装しちゃダメなんだよ。
そのためにGenericをサポートした言語があるんじゃないか。
なにも知らないんだな。
0087デフォルトの名無しさん
2017/02/19(日) 20:55:35.92ID:t4P0HCuO社員がそれなりに居る会社だとスケジュール管理で魔方陣みたいな計算しなきゃならない事が多いから、
事務方からするとマクロで組む大多数のロジックに二次元配列が必要になるんで「ほとんど要らない」は感覚的に合わないんだよね。
そういう経験上の齟齬で変に話がこじれてるんだと思うなぁ。
0088デフォルトの名無しさん
2017/02/19(日) 20:56:35.39ID:JyXmk48j配列やレコードセットをそのまま使うとクラスに凝集すべき処理がシステムのあちこちに分散してそれが成長すると保守不能になる
業界にはそういうシステムが無数に存在する
ビジネスロジックをクラスとして分離するよりDAOそのままその方が早く安く上がるという流れが昔あってそのツケを今支払っている
配列もDAOそのままと大差ないかどちらかというとより悪い
0089デフォルトの名無しさん
2017/02/19(日) 20:58:47.19ID:XGSYoBCDこれはVariantおじさんにもいえることで、VBAでライブラリ配布して云々ってあんまり一般的じゃない使い方だと思うんだよね
これはまあ、俺の経験不足による認識の甘さなのかもしれないけど実際どうなんだろう
0090デフォルトの名無しさん
2017/02/19(日) 21:03:34.34ID:JyXmk48jそれは何にでも使えるものじゃないだろ
リストならリスト
ディクショナリならディクショナリ
そうやってクラスを分けていくんだよ
0091デフォルトの名無しさん
2017/02/19(日) 21:04:06.74ID:fGPiSekn一般的普通常識的は
なにも答えをあたえないよ気をつけて
0092デフォルトの名無しさん
2017/02/19(日) 21:09:43.13ID:JyXmk48jそれはデータ構造やアルゴリズムが悪いだけだろうね
0093デフォルトの名無しさん
2017/02/19(日) 21:11:18.54ID:XGSYoBCDどういうこと?
俺としては、ここにいるVBAerたちにそういう使い方もよくするものならそうであるとただしてもらえるかな、と
自分の知らない世界を知れるのは楽しいこと
0094デフォルトの名無しさん
2017/02/19(日) 21:23:09.89ID:fGPiSekn0095デフォルトの名無しさん
2017/02/19(日) 21:37:02.73ID:QFvkxUvl「要素が」何であっても
って書いてあるだろ?
0096デフォルトの名無しさん
2017/02/19(日) 21:39:05.86ID:QFvkxUvl要素側とコンテナ側を混同してんじゃねーよ
0097デフォルトの名無しさん
2017/02/19(日) 21:45:38.72ID:QFvkxUvlコンテナ側もいろいろあるけどVBAでは限られている。
アルゴリズムはコンテナごとに違うけど要素には依存しないようにしたい。
ここまでが基本的な背景な。
これが共有できないんじゃ話にならん。
>>81みたいなのは話にならないってこった。
0098デフォルトの名無しさん
2017/02/19(日) 22:03:40.26ID:t4P0HCuO「こんな書き方をすれば、どんな状況にも応用が利く!」みたいな
便利でスマートな手法があるならQiita辺りにまとめておいて欲しい。
0099デフォルトの名無しさん
2017/02/19(日) 22:05:22.67ID:JyXmk48jそもそも発端は>>79だ
これがジェネリックコレクションに限定したレスには読めないよ
0100デフォルトの名無しさん
2017/02/19(日) 22:07:15.38ID:JyXmk48jそんなものはないからオブジェクト指向を使えってこと
0101デフォルトの名無しさん
2017/02/19(日) 22:13:07.99ID:t4P0HCuOオブジェクト指向ってのは何の事を言ってるんだ?
もしかして「クラスにまとめれば何でも応用が利く」みたいな頭の悪い話じゃないよね?
だとしたら「王道は無いから地道に作れ」という初歩的な話を誰にも伝わらないような言い方で発信し続けているわけ?
0102デフォルトの名無しさん
2017/02/19(日) 22:18:28.89ID:JyXmk48jオブジェクト指向ってのは隠蔽と抽象化の事だよ
多次元配列やシートなんていう物理的な構造やインフラストラクチャにべったり依存したコードは保守性もクソもない酷いコードになる
だからオブジェクト指向を使ってそういう部分をロジックから分離しろ
そういう常識的で当たり前の主張を繰り返してるだけ
0103デフォルトの名無しさん
2017/02/19(日) 22:22:35.59ID:WiCL4BWV0104デフォルトの名無しさん
2017/02/19(日) 22:33:14.77ID:vZUhP3Rmオブジェクト指向的なコードも書くけどオブジェクト指向原理主義者は近くに来ないで欲しいね。
俺はその時の状況に併せて使う。
個別クラスをコレクションクラスで宣言するけどインターフェースまで実装するのはあえて止めとこうとかな。
0105デフォルトの名無しさん
2017/02/19(日) 22:33:47.53ID:QFvkxUvlあんたが正しい見解を持っていることはわかったよ。
あんたは要素側の話をしている。
VBAは(いくつかある)コンテナに対する満足なアルゴリズム系ライブラリを備えていない。
そのうち配列に関するライブラリを整備することには意義があるってこった。
0106デフォルトの名無しさん
2017/02/19(日) 22:33:52.56ID:99UtXzmVVBやC#で開発してもブックに含めて配布したきゃできるつーことだよ
やらない言い訳並べてるだけならもういいや
0107デフォルトの名無しさん
2017/02/19(日) 22:34:33.21ID:NcV9GFqq0108デフォルトの名無しさん
2017/02/19(日) 22:38:44.61ID:vZUhP3RmExcelだったらVBAの方が普通は良い。
それだけで完結出来るんだから。
C#使うメリットがあればC#使うし、C#じゃないと出来ないこともあるからその時はC#となるけど、そんなことはそうそう無いと思う。
0109デフォルトの名無しさん
2017/02/19(日) 22:43:07.80ID:vZUhP3Rm0110デフォルトの名無しさん
2017/02/19(日) 22:45:22.07ID:7UYT3oOXそれを超えるんなら他の方法を使えば良い
そもそもexcelでやるべき事なのかは一旦考えて欲しいけど
0111デフォルトの名無しさん
2017/02/19(日) 22:49:09.98ID:t4P0HCuO考えてる事、言いたい事はようやく見えてきたけど、あまりにもふわふわ〜っとしてて非現実的だなぁ。
っていうかもう君の主張は「セルを積極的に使え」っていう話に行き着く。君の主張してる内容全て盛り込んでるよRangeオブジェクト。
まぁ、一度実際にプログラミングで仕事して理想論がクソの役にも立たない事を経験すれば考え方がもうちょっと柔らかくなるんじゃないかな。
0112デフォルトの名無しさん
2017/02/19(日) 22:57:40.52ID:JyXmk48jそうだね
>>111
行き着かねえよバカが
セルを積極的に隠蔽しろって話だろ真逆じゃねえか
何がRangeだよド素人が
世界中のプログラマ達が現実的な答えを積み重ねてきた結論がオブジェクト指向だろうが
ろくなコードも書かずに現実が見えてねえのは完全にお前の方だよ
0113デフォルトの名無しさん
2017/02/19(日) 23:07:33.14ID:t4P0HCuORangeオブジェクト自体が世界中のプログラマが現実的な答えを積み重ねた結果、
データの本来の姿を隠匿して提供するオブジェクト指向プログラミングの塊なんだけどな。
まぁなんかその辺のアルゴリズムだかロジックだかの本を読んでお勉強したんだろうけど、
ロジックを構成する為の感覚ってのは実際に仕事してないと身につかないから、
なんかヘンテコな理論にたどり着くんだろうなぁ。
0114デフォルトの名無しさん
2017/02/19(日) 23:09:05.58ID:XGSYoBCDここ大事なとこよ?
人間誰しも自分が普遍と思いたがるからそこを是するべきならそうすべき
0115デフォルトの名無しさん
2017/02/19(日) 23:11:40.89ID:XGSYoBCDその値を受け取ってゴニョゴニョ加工するための出し入れのためにValueプロパティがある
0116デフォルトの名無しさん
2017/02/19(日) 23:17:26.44ID:JyXmk48jシートレンジセル…
どこからどう見てもスプレッドシートじゃねえか
ファイルなどといったより低レベルで物理的な実装は隠蔽できてるがスプレッドシートという構造からは逃れられてねえんだよ
そこをユーザー定義クラスで隠蔽して使えと言ってるんだいい加減理解しろ
0117デフォルトの名無しさん
2017/02/19(日) 23:29:42.36ID:99UtXzmV20~30行のモジュール2~3個くらいの短いコード書いてるだけならいいけど
それ以上の規模をまともに書いてるんなら意固地にVBAに執着せずにまずはちゃんと試したらいいと思うけどね
エラーハンドリング・コード補完・デバッグみたいのも全く違うよ
>>109
VBEはAlt+F11で起動するVBAのエディターのことだよ
0118デフォルトの名無しさん
2017/02/19(日) 23:37:44.25ID:NcV9GFqqやりたいことを実現できてるならそれで良いじゃない
不毛な議題は終わろうよ
ある程度経験があるからこそ自分のやり方に誇りを持つことはあると思うけど実現方法は唯一無二ってわけではないよ
0119デフォルトの名無しさん
2017/02/19(日) 23:41:17.00ID:XGSYoBCDセル↔コードじゃなくて、セル↔オブジェクトで値をやり取りしよう是っていうことではなくて?
0120デフォルトの名無しさん
2017/02/19(日) 23:42:03.47ID:99UtXzmVVBA量産してる人は会社にとって負債になってることが多々あるから気をつけてね
じゃ
0121デフォルトの名無しさん
2017/02/19(日) 23:45:03.65ID:nLURoMmz誰?
0122デフォルトの名無しさん
2017/02/19(日) 23:57:08.00ID:t4P0HCuOセルにそれぞれ名前付けて管理出来るから、工夫次第でいくらでもスプレッドシートから離れられるよ。
エクセルが表計算ソフトで、GUIがあれだから、スプレッドシートという概念に囚われてしまって、
そういう見た目に囚われない利用法ってのは発想しづらいかもね。
まぁ出来るというだけであって、俺はやらないが。
0123デフォルトの名無しさん
2017/02/20(月) 00:09:03.46ID:ApsJgVoj何言ってんの?
VBEがVisualBasicEditorの略だなんて常識だろ。
ソースコード弄り廻すプログラムの話してるのに。
ウィルスと同じことすることになるからセキュリティの問題に成るんだろ。
ウィルスってのはこちらの環境をターゲットに作られるわけじゃない。
だから自分の作ったコードとの区別をチェックすればくぐり抜けられるとは思えないんだ。
しかしAuto_Openの直後にウィルス実行するコード埋め込められるとチェックする前に実行されちまうから回避出来ない。
その点、セキュリティセンターでVBE弄るマクロ禁止して、コードエディタ弄るのはC#とかVB.netで作れば回避できるっつう話
0124デフォルトの名無しさん
2017/02/20(月) 00:12:18.88ID:ApsJgVojVBEの話について来れずに勝手に勘違いしたあげく使ったこともないとこれまた勝手に勘違い。
君のレベルが透けて見えるな。
0125デフォルトの名無しさん
2017/02/20(月) 00:47:30.26ID:ZD0+Rhadクラスじゃなくてもモジュールに集めれば良いだけ
0126デフォルトの名無しさん
2017/02/20(月) 01:06:49.31ID:ZD0+Rhad署名すれば良くね
0127デフォルトの名無しさん
2017/02/20(月) 01:31:51.92ID:E/pOlJmJメタプログラミングの話をしてたのね 理解できなくてごめんよ
ウィルスじゃなくてウイルスな
0128デフォルトの名無しさん
2017/02/20(月) 01:42:21.73ID:lb9gJlVLデータ型を意図と違う型に勝手に変換されたり、表現できないデータにはNULLしか取れなかったり。
その辺の検証が面倒なのとデータそのものが消えるのは危険て判断で結局使い物にならなかった。
新規に作るなら1個1個検証してけばいいけど既存のデータの移行には怖くて使えないと思う。
0129デフォルトの名無しさん
2017/02/20(月) 04:58:32.86ID:NZ2LT6oBそんな機能がサポートされたんだ
やり方書いた URL 教えて
0130デフォルトの名無しさん
2017/02/20(月) 13:43:12.65ID:k0LX482/C#からExcelを操作する必要があるなら、VBAでメソッド書いてC#では基本runくらいに押さえた方がいい。
0131デフォルトの名無しさん
2017/02/20(月) 13:52:00.83ID:k0LX482/C#からExcelを操作する必要があるなら、VBAでメソッド書いてC#では基本runくらいに押さえた方がいい。
0132デフォルトの名無しさん
2017/02/20(月) 13:52:30.07ID:RpMws/Ns幾度となく目にしたことがあるがさっぱり理解していない。
0133デフォルトの名無しさん
2017/02/20(月) 13:53:21.70ID:k0LX482/VBEの話題だと、ユニットテストをやるときはVBEオブジェクト経由にするのが楽だと
思うが、それ以外の方法でやってる人はどうやってる?
0134デフォルトの名無しさん
2017/02/20(月) 19:38:35.48ID:7yJYF54kMicrosoft.Office.Interop.Excel のオブジェクトは Disposable にしてくれよ
Marshal.ReleaseComObject みたいな低レイヤーのメソッド呼ばせるとか頭おかしい
0135デフォルトの名無しさん
2017/02/20(月) 23:40:03.22ID:E/pOlJmJhttps://msdn.microsoft.com/en-us/library/f27xe9xb.aspx (英語)
https://msdn.microsoft.com/ja-jp/library/f27xe9xb.aspx (日本語)
0136デフォルトの名無しさん
2017/02/20(月) 23:56:54.13ID:NZ2LT6oB配布については書いてないようだが?
0137デフォルトの名無しさん
2017/02/21(火) 00:06:15.76ID:aFqTV30Tよく読めよ〜もう〜
0138デフォルトの名無しさん
2017/02/21(火) 04:56:40.98ID:pNCKJ7epで、どこにどう書いてあるの?
引用して下さい
0139デフォルトの名無しさん
2017/02/21(火) 14:43:08.97ID:61uGwEv+・俺が知ってるアレを知らないお前馬鹿
・俺のやり方が最強、そうしないお前馬鹿
おなかいっぱい
0140デフォルトの名無しさん
2017/02/21(火) 19:20:46.30ID:8I0Tfvzv0141デフォルトの名無しさん
2017/02/21(火) 19:55:44.43ID:SZxBanng0142デフォルトの名無しさん
2017/02/21(火) 20:07:39.76ID:6AjaqXwj同じあほなら踊りゃな損損
0143デフォルトの名無しさん
2017/02/21(火) 21:10:07.61ID:aFqTV30TおれVSTO使わないのって聞いた人間だけど別に自分のやり方が最強だとは思ってないよ
ただ学びもせず試しもせずに自分のやり方に固執してるやつはほんとバカだと思うし
組織の足を引っ張るマイナスの存在だと思う
0144デフォルトの名無しさん
2017/02/21(火) 21:24:32.70ID:KepD5bS70145デフォルトの名無しさん
2017/02/21(火) 21:35:24.29ID:TXl7A71sAs Long の引数に間違って文字列を渡すコードを書いたとする。
実行すると代入するタイミングで「実行時エラー '13' 型が一致しません」て出るけど、それがタイプセーフってことなの?
0146デフォルトの名無しさん
2017/02/21(火) 22:21:14.41ID:6AjaqXwj同意
0147デフォルトの名無しさん
2017/02/21(火) 22:22:29.66ID:IOznZN+8高々一つの手段に過ぎないんじゃね
エクセルを操作するのにpoershellでもperlでもphpでもjavaでも出来るけど全部試してみないとダメなの?
pythonとかでも出来るかもしれないし
言語は他にもあるわけだが
0148デフォルトの名無しさん
2017/02/21(火) 22:33:46.27ID:aFqTV30T>>118みたいな考え方がクソなんだよ
学ばないやつの典型
0149デフォルトの名無しさん
2017/02/21(火) 22:34:45.03ID:/de5NySZ0150デフォルトの名無しさん
2017/02/21(火) 22:39:15.14ID:KepD5bS7学びもせず試しもせずに自分のやり方に固執してるやつは118のような考えにはならないと思うよ
0151デフォルトの名無しさん
2017/02/21(火) 22:39:18.48ID:aFqTV30T>高々一つの手段に過ぎないんじゃね
だから? 結局それも自分の今のやり方に固執して学ばない言い訳だろ?
それに言語の話をしてるわけじゃないんだが
0152デフォルトの名無しさん
2017/02/21(火) 22:48:07.72ID:aFqTV30T単なるデータ処理なら今はxmlになってるからエクスポートしなくても直接処理することもできる
そういうんじゃなくExcelをインタラクティブに操作する機能を拡張したいからVBAを使ってるんだと思うよ
0153デフォルトの名無しさん
2017/02/21(火) 22:48:45.93ID:TXl7A71s0154デフォルトの名無しさん
2017/02/21(火) 22:51:29.51ID:IOznZN+8手段は沢山ある
それを全部試してみないと行けないの?
君は全部試したのか
なぜ自分以外は学んでないと決めつけてるのか知らないけど
0155デフォルトの名無しさん
2017/02/21(火) 23:09:22.40ID:NsUhXqcmそうだよ
入館証みたいなもん
0156デフォルトの名無しさん
2017/02/21(火) 23:13:29.45ID:aFqTV30T状況に応じて自分の道具箱から適切な道具を選ぶ判断ってのは
システム作ったりプログラミングする上ではすんげー大事なの
0157デフォルトの名無しさん
2017/02/21(火) 23:17:46.66ID:aFqTV30T新しい道具の使い方を学ぶには相応のコストがかかるから
それをやらずに今持ってる道具の使い方を磨くっていう選択ももちろんあるよ
そういう判断を意識的にしてるならいいんじゃない
少なくともこのスレのVSTOについてのレスでそういうのはなかったけどね
>>138のような教えて君のほうが可能性を感じる
君は全部試したのかなんて聞いてなんの意味あるのさ
0158デフォルトの名無しさん
2017/02/21(火) 23:18:18.11ID:8I0Tfvzv0159デフォルトの名無しさん
2017/02/21(火) 23:18:35.43ID:IOznZN+8どの程度大事だとか客観的なデータみたいなのはあるの?
自分の経験則?
他の人が使える事とか保守出来る事とかそういう面も大事だと思うけど
0160デフォルトの名無しさん
2017/02/21(火) 23:20:58.45ID:/PEo8++70161デフォルトの名無しさん
2017/02/21(火) 23:23:37.74ID:IOznZN+8より適した方法を選択するには自分で試してないとわからないって事を君は言いたいんじゃないの?
VSTOよりVBAの方が適してるという判断だってあり得るだろう
その判断をVSTOを試さずにしている事が気にくわないんじゃね?
だったら君は全部の手段を試してその中から適切な選択をしてるんだろうなと思うわけだが
0162デフォルトの名無しさん
2017/02/21(火) 23:23:59.32ID:TXl7A71sじゃあテストカバレッジは大事ですね
0163デフォルトの名無しさん
2017/02/21(火) 23:24:37.44ID:aFqTV30T>他の人が使える事とか保守出来る事とかそういう面も大事だと思うけど
それが「状況応じて選ぶ」の「状況」だよ
保守出来なくてもいい場合だって結構あるんよ
0164デフォルトの名無しさん
2017/02/21(火) 23:25:26.17ID:IOznZN+8勘弁してほしいと言う気持ちはわかるけど
人事移動とかで仕方ない事もありうるし
0165デフォルトの名無しさん
2017/02/21(火) 23:27:15.94ID:IOznZN+8じゃ状況から考えて最初からVSTOは選択肢に入らない人だってありじゃね?
0166デフォルトの名無しさん
2017/02/21(火) 23:29:13.95ID:NsUhXqcm型指定した方が関数単体ではテストしやすいんでねえか?
0167デフォルトの名無しさん
2017/02/21(火) 23:31:43.06ID:TXl7A71sそうですね。
デバッグ→コンパイル したときにエラーになるのかと少し期待してました。
0168デフォルトの名無しさん
2017/02/21(火) 23:32:00.62ID:pNCKJ7ep>>138 に答えてからにしろよ...
0169デフォルトの名無しさん
2017/02/21(火) 23:36:52.37ID:NsUhXqcm他の言語あんまやらんのだけど、他ではコンパイルエラーになるんか?
0170デフォルトの名無しさん
2017/02/21(火) 23:47:32.16ID:TXl7A71sさっき試しにこれでコンパイルエラーも実行時エラーも(当然)起きないことを確認しました。
If False Then
Longを受け取るSub "abc"
End If
True にするともちろん実行時エラーになるけど、コンパイルエラーにはならないですね。
両方ともコンパイルエラーには普通なると思っていたので。
0171デフォルトの名無しさん
2017/02/22(水) 00:37:21.94ID:LNkI/xAfGooooooogleやGREEEEEEEENの様に、
Loooooooooooooooong
0172デフォルトの名無しさん
2017/02/22(水) 00:50:23.61ID:LNkI/xAf-------
ELSE
-------
END IF
現在、これが主流であるが、
IF ---- THEN
-------
ELSE
-------
END IF
こうしたら見やすくはならないだろうか。
0173デフォルトの名無しさん
2017/02/22(水) 01:19:12.50ID:M4/9OkPn0174デフォルトの名無しさん
2017/02/22(水) 05:34:42.22ID:JKZayb1O0175デフォルトの名無しさん
2017/02/22(水) 06:20:32.11ID:8qcLxLAJVBAは次期Officeでも改修無しだろうし
0176デフォルトの名無しさん
2017/02/22(水) 07:29:32.41ID:+iWBq+NUコーディングが上手くなるとelseブロックは驚くほど使わなくなるから気にしなくていいよ
0177デフォルトの名無しさん
2017/02/22(水) 08:09:31.68ID:syi9s7VPいや、VBAではそうなんだろうけど新し目の言語ではどうなんだろうなと
まあその式なら当然実行時にはならんよね
処理してないんだから
でも関数の外では止まるから中に入れちゃうよりはマシでしょ
0178デフォルトの名無しさん
2017/02/22(水) 08:30:28.90ID:0wACQsqy見やすくならない
でもとにかく可能性を提示していくのは好き
0179デフォルトの名無しさん
2017/02/22(水) 08:33:33.34ID:WdsmAWXMあのあといろいろ試してみたんだけど、
オブジェクトに対して、存在しないメソッドを呼び出してみると、「コンパイルエラー」。
つまり該当箇所にたどり着く前に止まるというか、全く進まない。
As Long 引数にStringを渡した場合は、その箇所にたどり着くまでは進む。
となりました。
どっちもインテリセンス的には分かってるんですけどね。(入力時にヒントが出てくる。)
0180デフォルトの名無しさん
2017/02/22(水) 09:57:01.51ID:T1tKwjPzCOM使えばええんやで
0181デフォルトの名無しさん
2017/02/22(水) 18:32:56.57ID:fluTtG1xVBならOption Strict Onにすればコンパイルエラーになる
型を指定する言語ならコンパイルエラーになるほうが普通
https://ideone.com/ZN0oZy
VBAに同じオプションはないけどByRefにすればコンパイルエラーになる
ByValだと暗黙の型変換があるから実行時にならないとエラーかどうかわからない
0182デフォルトの名無しさん
2017/02/22(水) 18:46:18.06ID:nFPUHBlJ・ByRefでもコンパイルエラーとはならない
・そもそもByRef/ByValを省略したときはByRefなんだから、何も付けないときにコンパイルエラーにならないのなら、ByRefを付けてもコンパイルエラーにはならないのは道理
・ByValだとしてもコンパイルエラーとはならない
・暗黙の型変換はByRef/ByValで違いあんの?
・そもそもこの問題にByRef/ByValが関係あんの?
0183デフォルトの名無しさん
2017/02/22(水) 19:10:47.91ID:fluTtG1x一旦変数に入れてから関数に渡してね
>・暗黙の型変換はByRef/ByValで違いあんの? →あるよ
>・そもそもこの問題にByRef/ByValが関係あんの? →暗黙の型変換の違い
0184デフォルトの名無しさん
2017/02/22(水) 19:59:39.45ID:WdsmAWXMByRef As Double にLong変数を代入できないのは大抵の場合意図に反すると思う。
0185デフォルトの名無しさん
2017/02/22(水) 20:01:03.86ID:WdsmAWXM0186デフォルトの名無しさん
2017/02/22(水) 21:07:39.06ID:Wnnq/wUP引数がDoubleであればそうである必要があるんだろうからそれでいいじゃん
ret = fnc(CDbl(lng))ってすりゃいいだけだし
実行時に型が違うって教えてくれるんだから
仮にvariantにしたら文字列もオブジェクトも入っちゃうし
タイプセーフって意味ならそういうことでしょ
0187デフォルトの名無しさん
2017/02/22(水) 21:50:30.44ID:WdsmAWXMDouble で ByRef の必要があるってことは変更を呼び出し元に反映させる意図か
0188デフォルトの名無しさん
2017/02/22(水) 22:22:41.27ID:+EuyfV64ByRef a As Double という引数に
Dim x As Long
と宣言したx を渡すとコンパイルエラーになるけど、x+0 を渡すとコンパイルエラーにはならない。
もちろん 0 を渡ってもエラーにならないし、0& でもエラーにならない。
これってどうなの?あまり役に立たないじゃん?
0189デフォルトの名無しさん
2017/02/22(水) 22:43:19.86ID:+EuyfV64引数を変更する意図だったらあまり勧められるものじゃないし、Const 参照に出来ないものつらい。
0190デフォルトの名無しさん
2017/02/22(水) 22:50:07.38ID:cnrdfYBnオブジェクトをbyrefで渡すんじゃね
0191デフォルトの名無しさん
2017/02/22(水) 22:50:52.98ID:fluTtG1xコンパイルエラーにならない理由を説明したんであって
それを役に立たせるかどうかは君次第
0192デフォルトの名無しさん
2017/02/22(水) 23:01:48.59ID:npRiHSqC例えばデータベースにアクセスする際にレコードが存在するかどうか
存在すれば関数の戻り値としてtrue、存在しなければfalseを返す
で存在すれば、Byref引数で与えた項目にレコードから値をセットする。
戻り値がtrueの時にのみそのByref引数で与えた項目を使うって言う事してる
けど?
別にそれがVariantであるとかどうとか関係ないし
0193デフォルトの名無しさん
2017/02/22(水) 23:25:47.81ID:+EuyfV64それっていわゆるout引数で返り値が成功/失敗ってパターンだよね。
0194デフォルトの名無しさん
2017/02/22(水) 23:27:36.61ID:clkUvWrMパソコンがいかに分かりやすく人間のクソコードをうまく処理してくれているか、理解した時に色々な書き方があってよかったと思えた。ようはちゃんとした使い分けなんだなと
0195デフォルトの名無しさん
2017/02/22(水) 23:28:45.30ID:+EuyfV64オブジェクトの場合は ByVal でも参照渡しだし効率上の問題はないし
変数を書き換えられない方がいいからByValが好み
0196デフォルトの名無しさん
2017/02/22(水) 23:48:30.91ID:+EuyfV64あと効率の問題は無視できない。
特に深い意味はなく 基本はByValでVariantだけByRef
ほんと深い意味はないです
0197デフォルトの名無しさん
2017/02/22(水) 23:49:35.88ID:yyIqMX9Cあとpropetyで値を受けるときにByRefじゃないとダメなのがあったような気がするわ
0198デフォルトの名無しさん
2017/02/23(木) 00:11:35.30ID:TN/SG3Iiメモリ的にも不利でしょ
0199デフォルトの名無しさん
2017/02/23(木) 00:28:08.11ID:boStFqTs0200デフォルトの名無しさん
2017/02/23(木) 06:17:34.80ID:H+4W8G4c0201デフォルトの名無しさん
2017/02/23(木) 08:16:36.07ID:OsbBjXDd0202デフォルトの名無しさん
2017/02/23(木) 08:37:19.31ID:hO+UyGLCType のことだったらそもそもByValで渡せないんじゃ?
0203デフォルトの名無しさん
2017/02/23(木) 08:41:19.30ID:OsbBjXDdそれそれ
構造体とかは参照渡ししかできなかったから仕方なくそうしてる
他で参照渡しする事はあまりないな
0204デフォルトの名無しさん
2017/02/23(木) 10:33:29.58ID:5OVH7aZj必要なときだけbyval
つか、最近ここにいる奴らと話があわなさすぎてビビる
0205デフォルトの名無しさん
2017/02/23(木) 10:57:43.31ID:hO+UyGLC「必要なとき」ってのを具体的に示せば、実は話が合ってるのかもしれないよ
0206デフォルトの名無しさん
2017/02/23(木) 11:00:08.85ID:5OVH7aZjどうみてもあってないわけですが
> 特に深い意味はなく 基本はByValでVariantだけByRef
> ByRefは配列厨だった時期に大きめの配列を渡すときに使ってた記憶がある
> 再帰処理でbyref使うかも
あ、あと君がどうやってユニットテストしてるか教えてくれる?(プロかどうかの指標)
0207デフォルトの名無しさん
2017/02/23(木) 11:41:44.16ID:hO+UyGLC君は基本がByRefでByValが必要なのは例外的なケースだというスタイルなんだろ?
だからそれを示すのが話が早いと思うんだ。
それとユニットテストのやり方?
ユニットテストを書いて、ユニットテストを集めたモジュールに突っ込んで、必要なときにまとめて実行するだけだが。
0208デフォルトの名無しさん
2017/02/23(木) 11:45:35.46ID:hO+UyGLCこれは当然 ByVal x As Double だよね?
0209デフォルトの名無しさん
2017/02/23(木) 11:45:52.32ID:5OVH7aZj> だからそれを示すのが話が早いと思うんだ
declare以外で使った記憶ないね(あるかもしれないが)
> ユニットテストを書いて、ユニットテストを集めたモジュールに突っ込んで、必要なときにまとめて実行するだけだが。
それは大変ですね
プロだとしたら、お仕事頑張ってください
0210デフォルトの名無しさん
2017/02/23(木) 11:47:24.05ID:hO+UyGLCプロのわけないでしょ。何だよExcel VBAのプロって?
0211デフォルトの名無しさん
2017/02/23(木) 11:53:22.98ID:5OVH7aZjコードを書いて飯を食ってるプロのプログラマが、VBAで実装する案件とかあるでしょ
まじでこんなこと説明するの、疲れるわー
0212デフォルトの名無しさん
2017/02/23(木) 11:55:16.28ID:hO+UyGLCそういう人がここで議論するなよ
としか思えん
0213デフォルトの名無しさん
2017/02/23(木) 11:57:21.44ID:hO+UyGLCもーやだーw
0214デフォルトの名無しさん
2017/02/23(木) 12:00:06.36ID:hO+UyGLC0215デフォルトの名無しさん
2017/02/23(木) 12:00:51.58ID:5OVH7aZj他のスレではもっとプロ比率高いからね
最近のあまりのひどさに、プロはいるんかいなと思ったまで
まあ、俺は前スレの奴みたいに押しつけなんぞはしなから
0216デフォルトの名無しさん
2017/02/23(木) 12:04:03.42ID:gqahVnbfお前はプロを見定める程には高位者なんだろ
なんでこんな所にいるんだよ
0217デフォルトの名無しさん
2017/02/23(木) 12:08:15.24ID:GthJ2ZGJ0218デフォルトの名無しさん
2017/02/23(木) 12:19:49.23ID:ahJQbyP7Variantこそ正義派 vs Variantはウンコ派
のくだらないシバき合いの空気だと思う
しばらくしたらおさまると思う
0219デフォルトの名無しさん
2017/02/23(木) 12:21:15.10ID:hO+UyGLCジャンルごとに常識が全然違っていて、外の世界のやり方が愚かに見えたり異常に見えたりするという。
「ユーザー」の意味が食い違ったまま議論してたりするのが一番不毛だと思う。
人によっては「将来の自分、もしくは同僚」のことを言ってたり、「システム納品先の顧客」のことを言ってたり。
0220デフォルトの名無しさん
2017/02/23(木) 12:24:40.62ID:y8jS3dVi0221デフォルトの名無しさん
2017/02/23(木) 12:26:54.10ID:exuatn0M油断するなよ
0222デフォルトの名無しさん
2017/02/23(木) 13:12:07.35ID:zwsWAD4F↓現在はこのコードで別プロセスのブックを変数wb2に格納できていますがエラー回避のため回りくどいです。
Set wb2 = xlApp.Workbooks.Open "C:\開かれるファイル.xlsx" ←これだと構文エラーとなるためです。
Dim wb As Workbook, wb2 As Workbook
Dim xlApp As Application
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Open "C:\開かれるファイル.xlsx"
For Each wb In xlApp.Workbooks
Set wb2 = wb
Next
もっと直接的にWorkbook型の変数にブックを格納する方法を教えていただきたいのです。よろしくお願いします。
0223デフォルトの名無しさん
2017/02/23(木) 13:33:18.05ID:hO+UyGLCWorkbooks.Countが0だとしても有効なんだからそのやり方でいいんじゃね?
0224デフォルトの名無しさん
2017/02/23(木) 13:43:37.34ID:Q2T7iSLNそりゃ、構文エラーになるの当然でしょ。
xlApp.Workbooks.Open "C:\開かれるファイル.xlsx"
が何かを返す形になっていない。
Set wb2 = xlApp.Workbooks.Open("C:\開かれるファイル.xlsx")
とする。
0225デフォルトの名無しさん
2017/02/23(木) 13:48:54.96ID:VQq0xdbLまれによくある
0226デフォルトの名無しさん
2017/02/23(木) 14:02:22.28ID:Q2T7iSLN正直、こんな所で躓いてる人だったらもっと前にすべきこと有るんじゃね?とも思う。
自分は速度アップの為に使うこともあるけど、シングルプロセスで遅くなる要因は全て取り除いた上でどうにも時間がかかる場合だ。
しかし経験上、実際にはマルチプロセスにしなければならない程の計算量になることは殆ど無い。
0227222
2017/02/23(木) 14:28:34.64ID:zwsWAD4Fあー、括弧の有無でしたか・・・そのへんのルールの理解はかなり曖昧です。
>>223、>>224、ありがとうございました。
>>226、正直、別プロセスで開く必要が本当にあるのかはわかりません。
なんか別で開いたほうがよさそう。。。という理由で別プロセスで開いています。
ただ計算量は多いです。刻々と変化する、株価の現在値や取引高、売買注文の状況等の変化を記録し集計しグラフ化などを行っています。
今は毎日手作業で複数ブックを開いて、各ブックのマクロは正しく動いています(おそらく)が、起動を自動化しようとして今回の質問になったわけです。
別プロセスにする必要性が本当にあるかどうかはわかりませんが、別プロセスにすることのデメリットはあまり聞かないし、別プロセスでいいかなーって感じですがどうなんでしょう?
0228デフォルトの名無しさん
2017/02/23(木) 14:43:44.88ID:Q2T7iSLNデメリットはシングルプロセスのメリットを失うことです。
https://blogs.msdn.microsoft.com/office_client_development_support_blog/2017/01/13/merit-to-merge-process/
計算に使用するRangeをVariantで受けて配列で計算する程度の高速化は済んでいるんですか?
0229デフォルトの名無しさん
2017/02/23(木) 14:56:32.87ID:hO+UyGLC0230デフォルトの名無しさん
2017/02/23(木) 15:01:00.61ID:hO+UyGLC0231デフォルトの名無しさん
2017/02/23(木) 15:01:07.48ID:zwsWAD4F>計算に使用するRangeをVariantで受けて配列で計算する程度の高速化は済んでいるんですか?
はい。Office TANAKAや他のいくつかの高速化テクニックのサイトには一通り目を通しており、基本的な高速化は済んでいると考えています。
貼って頂いたリンク先を読む限り、マルチプロセスのデメリットは余裕で受け入れられます。
0232デフォルトの名無しさん
2017/02/23(木) 15:03:52.66ID:zwsWAD4F今のところ不都合は出てきていません。
>>230
はい、楽天RSSで歩みや板データ取得してなんやかんやしてます。
0233デフォルトの名無しさん
2017/02/23(木) 15:11:38.25ID:VrEZVwijざっくりと
Callで呼ぶ、あるいは返り値を利用する(変数に入れたり)する場合はカッコがいる
0234デフォルトの名無しさん
2017/02/23(木) 15:54:13.70ID:HqeUFn+kStatic変数について
モジュール内のStatic変数を開放する方法はありますでしょうか
ENDを使うとほかのモジュールもリセットされて不都合があり使えません
0235デフォルトの名無しさん
2017/02/23(木) 16:28:19.49ID:hO+UyGLCプロシージャ内ではなくモジュール内?
型に応じてEmptyなりNothingなり0なりを代入する関数を書けばいいでしょ
0236デフォルトの名無しさん
2017/02/23(木) 16:42:50.53ID:HqeUFn+kオブジェクトならnothing 配列ならerase
Long等ならどうするのかと悩んでいました
0の代入で対処しておきます
0237デフォルトの名無しさん
2017/02/23(木) 17:24:27.48ID:boStFqTsちなみにプロはどういうふうにユニットテストしてるのか教えてくれる?
ツールやフレームワークを使ってるならその名前も教えて
0238デフォルトの名無しさん
2017/02/23(木) 17:33:52.36ID:zwsWAD4Fありがとうございます。いくつかのサイトで勉強し直しました。
0239デフォルトの名無しさん
2017/02/23(木) 19:06:41.92ID:wHDezemX0240デフォルトの名無しさん
2017/02/23(木) 20:49:52.48ID:oQLpCXm2そう考えるとつじつまが合う。
0241デフォルトの名無しさん
2017/02/23(木) 21:44:52.38ID:exuatn0Mプロだから料金が必要なんだよ
という気がする
0242デフォルトの名無しさん
2017/02/23(木) 22:03:30.78ID:wHDezemX0243デフォルトの名無しさん
2017/02/23(木) 22:14:07.50ID:osMc+8cAassert
0244デフォルトの名無しさん
2017/02/23(木) 23:49:16.37ID:yGS7m3ASアクセスでVBA → わかる
ワードでVBA → まあ、わかる
パワーポイントでVBA → 使い道あるの?
0245デフォルトの名無しさん
2017/02/23(木) 23:50:00.75ID:ahJQbyP70246デフォルトの名無しさん
2017/02/23(木) 23:52:16.48ID:oQLpCXm20247デフォルトの名無しさん
2017/02/23(木) 23:54:35.36ID:yGS7m3AS0248デフォルトの名無しさん
2017/02/23(木) 23:57:24.56ID:V98aHpH+0249デフォルトの名無しさん
2017/02/24(金) 00:02:47.28ID:LZx0CBNbメール振り分けとか出来る
自分の好きなように条件を決めてフォルダに移動させたり出来る
0250デフォルトの名無しさん
2017/02/24(金) 00:25:29.71ID:y1rV1VB30251デフォルトの名無しさん
2017/02/24(金) 00:50:55.65ID:hcCi+TdT>パワーポイントでVBA → 使い道あるの?
簡単な例だとテンプレからパラメータ入力して顧客とかその状況にカスタマイズしたプレゼン資料を作るとか
Officeの処理を自動化したい場合と機能拡張したい場合にVBAやVSTOを使う
0252デフォルトの名無しさん
2017/02/24(金) 06:16:51.42ID:pM2eDGo5引数のデフォルトはByRefなんだから、逆になってはないだろう
0253デフォルトの名無しさん
2017/02/24(金) 06:35:34.89ID:vf2veUcI全部ByRefで渡して内部で明示的に別の変数に代入してやるほうがいい。
0254デフォルトの名無しさん
2017/02/24(金) 06:58:12.55ID:QNSCjKb10255デフォルトの名無しさん
2017/02/24(金) 07:49:39.72ID:bfVuoLkP0256デフォルトの名無しさん
2017/02/24(金) 07:59:43.10ID:YZGHPd2K結構便利だよ
定期的に送られてくるメールの添付ファイルを保存して、データベースにインポートするプログラムを起動したりしてる
0257デフォルトの名無しさん
2017/02/24(金) 08:04:41.89ID:NmXs2kFSByValが付いてると汚いとも、なんか付いてないと落ち着かないとも思わない。
デフォルトがByRefであることを理解した上で必要があれば、ByValを使うのみ。淡々と。
0258デフォルトの名無しさん
2017/02/24(金) 08:07:35.11ID:NmXs2kFS「引数があると汚くなるから変数は全てpublicで」とか言われたら同意出来る?
0259デフォルトの名無しさん
2017/02/24(金) 08:10:57.05ID:AVNM5GPI書く側だけだなく、使う側のことも考慮すれば明示した方が望ましい
0260デフォルトの名無しさん
2017/02/24(金) 11:07:17.89ID:AVNM5GPIFunction f(ByVal v As Long, _ ' コメント
ByRef a As Double _ ' コメント
) As Double
ってやりたい
0261デフォルトの名無しさん
2017/02/24(金) 11:21:45.61ID:SIuzfcCY気持ちはわかる。
けど、その考えを進めると
「オプションで省略出来る引数も全て明示するほうが良い」ってならない?それは極端すぎるか。
0262デフォルトの名無しさん
2017/02/24(金) 12:23:19.93ID:JxaWophyOptionalとか ParamArrayのことを言ってるの?
Optional にはほぼ全部 ByRef 付けてるけど。
0263デフォルトの名無しさん
2017/02/24(金) 12:23:45.60ID:QNSCjKb1optionalを書かなきゃ省略可とならないと思ってたけどできるの?
0264デフォルトの名無しさん
2017/02/24(金) 12:40:30.93ID:HIj3FDgpいや、メッセージボックス使う時に
ButtonsやらTitleも必ずいつも書く、って意味。
0265デフォルトの名無しさん
2017/02/24(金) 12:57:13.30ID:JxaWophyああ、実引数のことか。それは省略するよ。てかそのためのオプションなんだし。
>>259では仮引数の話をしていた。
0266デフォルトの名無しさん
2017/02/24(金) 12:58:11.46ID:QNSCjKb1使う側は好きにしたらいいと思う
ただ作る側は使う側に考慮して明示的に作った方が親切だと思うよ
0267デフォルトの名無しさん
2017/02/24(金) 14:29:02.02ID:9/tVKb6A作ったプロシージャをライブラリ的に?他者に提供する(って事だよね?)なら、同意だな。
自分でしか読まないコードが多いんで「書かなくて良いものは書かずに済ませる」習慣が身についてしまって(^^;;
あと、idコロコロ変わってると思う、すまない。
0268デフォルトの名無しさん
2017/02/24(金) 17:17:09.68ID:pLx05a5GA1:E1に別シートのA1:A20の中から入力されているセル(5個のみ)を入力する方法を考えておりますが、うまくできません。
A1:A20には5セルのみ数値が入力されており、その他はカラになっています。
お知恵をお貸しいただければ幸いです。
0269デフォルトの名無しさん
2017/02/24(金) 17:54:52.40ID:eVhOHWHnコピー元の A1:A20に
対象セル(空値以外)のセルが5個を超えてた場合どうする?
同様に5個未満の時どうすの?
絶対に5個である 前提だと
Set Source = Worksheets("sheet1").Range("A1:A20").SpecialCells(xlCellTypeConstants, 23)
Source.copy Worksheets("sheet2").Range("A1")
とかだけど
0270デフォルトの名無しさん
2017/02/24(金) 18:14:04.63ID:uPA9vcntdim i as long,cnt as long
'ws1はデータ元、ws2は代入先
cnt = 0
for i = 1 to 20
if ws1.cells(i,1).Value <> "" then
ws2.cells(cnt,1).Value = ws1.cells(i,1).Value
cnt = cnt + 1
end if
next i
かな
あんまりクリップボードは使いたくないよね
0271デフォルトの名無しさん
2017/02/24(金) 18:55:57.51ID:sVIebfPYでSQL SERVERに接続しているんですが
ネットワークが切れてる場合などに
以下のダイアログが出ます
http://i.imgur.com/bDQc9Wz.png
これを表示させない方法はありますか?
OKボタンを押さないと処理が進まないので困ってます
ADODBだとダイアログは出ないのですが
DAOしか使えない環境です
0272デフォルトの名無しさん
2017/02/24(金) 20:29:11.76ID:pLx05a5G268です。ありがとうございます!
事前に5コ以上or以下の場合はエラーが出るようにしてありました。
しっかりお伝えできておらず申し訳ありません。
長いこと考えていたので、すぐにお答え頂き助かりました!
すんません、知恵袋みたいになっちゃいまして。
0273デフォルトの名無しさん
2017/02/24(金) 21:10:37.12ID:1MHFSTAMネットワークから切り離さない
0274デフォルトの名無しさん
2017/02/24(金) 21:32:17.86ID:KBFO5tFRウィンドウを監視してそのメッセージウィンドウが表示されたのを検知そたらすぐに閉じるというスレッドを実行すればいいよ
0275デフォルトの名無しさん
2017/02/24(金) 21:35:33.95ID:ou+kvViRエクセル上の機能を駆使するのもいいけど基本はifとforだから
0276デフォルトの名無しさん
2017/02/24(金) 22:33:56.91ID:3s3jOtzD普通にOn Errorでトラップできないのか?
0277デフォルトの名無しさん
2017/02/25(土) 00:40:21.68ID:D6dFQ1fO0278デフォルトの名無しさん
2017/02/25(土) 03:07:16.89ID:N0qiiOPC0279デフォルトの名無しさん
2017/02/25(土) 03:09:12.51ID:IvVV1H8Vプロの人、どういうふうにユニットテストしてるのか教えてよ
待ってるよー
0280デフォルトの名無しさん
2017/02/25(土) 07:50:24.67ID:N9ovtMNDassertつってんだろカス
0281デフォルトの名無しさん
2017/02/25(土) 08:36:20.81ID:D6dFQ1fOこれマジ?
DBに繋ぐ方法他にしらんのだけど
0282デフォルトの名無しさん
2017/02/25(土) 08:48:58.69ID:NZ6bqScVWIndows上で出さない設定なりがあれば
万事解決する気がしてきました
探しつつ関連のスレがあればそっちで聞きます
>>273
ネットワークが切れるなんて
分かりにくい例えを出して申し訳ないけど
上のダイアログを表示させない方法を探してます
>>274
もう一つプログラムを動かして
常にウインドウを監視して閉じるってことはできるかもしれないけど厳しいです
>>276
処理前にOn Error Resume Nextおいてるけど
ダイアログは出てしまう
呼び出したDAOが出してるダイアログなので
VBA側で待ち構えても意味がないのかも
>>277
Access内で書くならDAOでいいと思うけど
外部DBに接続するならADOなんじゃないかなーという気はする
人が書いたPGなんでともかく
DAOでダイアログを出さない方法を模索します
0283デフォルトの名無しさん
2017/02/25(土) 09:40:18.14ID:8VKSJua/それは単に「ユニットテストを書いてます。中にassert文入れてます」という主張にしか聞こえないけど?
0284デフォルトの名無しさん
2017/02/25(土) 09:44:59.46ID:8VKSJua/DB詳しくないんで「純ODBCで繋いでいる俺に死角はなかった」と思っていいのかわからん。
0285デフォルトの名無しさん
2017/02/25(土) 09:51:52.61ID:2vFA6XbAそりゃないからよ
0286デフォルトの名無しさん
2017/02/25(土) 10:27:01.59ID:N9ovtMNDユニットテストとは本来そういうものだ
なんならassertじゃなくてprintでも問題ない
0287デフォルトの名無しさん
2017/02/25(土) 10:53:22.34ID:8VKSJua/0288デフォルトの名無しさん
2017/02/25(土) 11:48:30.96ID:UUkqw70RADO?
0289デフォルトの名無しさん
2017/02/25(土) 12:23:28.37ID:2vFA6XbA0290デフォルトの名無しさん
2017/02/25(土) 15:50:29.76ID:IvVV1H8Vえ、ほんとにプロのひと本人なの?
さすがにテストコードを書いて何らかのassertを使わない人はいないから
どういうやり方なのか全然分からないんだけど
0291デフォルトの名無しさん
2017/02/25(土) 15:58:24.02ID:AevZg9Fs>>281と同じくなんだけどホンマ?
0292デフォルトの名無しさん
2017/02/25(土) 15:58:35.96ID:IvVV1H8VODBCのSQL_DRIVER_NOPROMPTってのがそれっぽいやつだと思うけど
DAOで使えるのかエラーダイアログも抑止するのかはわからない
0293デフォルトの名無しさん
2017/02/25(土) 16:21:48.79ID:9TfgDVOxいいか
ユニットテストとは本来どういうものか考えろ
機能を実行して期待する動作と比較して期待通りだったかどうか可視化する
そしてそれをいつでも繰り返し実行できるように保つ
それさえ満たせばそれ以外のことはどうだっていいんだよ
手でテストコードを書きためてもいいし
テストコードを規約化して自動化してもいい
綺麗にレポートにしたっていい
他人の書いたそれをパクってもいい
そんなものはユニットテストの本質ではないので好きにすればいい
こんな簡単なことなのにやり方がわからないなら多分思考能力ゼロのバカなんだろうな
何でもかんでも他人任せでフレームワークがないと何もできない子供
0294デフォルトの名無しさん
2017/02/25(土) 16:28:50.64ID:8VKSJua/だからお前は>>209で何が言いたかったんだよ?
それを言わないから続くんだよ。
0295デフォルトの名無しさん
2017/02/25(土) 16:32:21.89ID:zqm3AbRfDAOは詳しくないんで ダイアログ出さない方法はしらんけど
接続できるか事前に調べるってのはどう?
1)ADOで接続してみてエラーなら終了(OKなら即切断)
2)DAO接続して処理
とか
0296デフォルトの名無しさん
2017/02/25(土) 16:37:18.34ID:9TfgDVOx知らんわ
>>209に聞けよ
0297デフォルトの名無しさん
2017/02/25(土) 16:40:09.69ID:IvVV1H8V別にバカにしたくて聞いてるんじゃないんだけどな
もうそういう回答しかしないならいいよ自称プロさん
0298デフォルトの名無しさん
2017/02/25(土) 17:14:53.72ID:hdmL7pMGありがとう、月曜に調べてみるよ
>>295
接続文字列が無理だったら
ADOでエラー確認するよ、ありがとう
0299デフォルトの名無しさん
2017/02/25(土) 17:19:09.53ID:IvVV1H8Vその汎用的なモジュールとモジュール単位でテストケースを書いた別モジュールを用意してそれを実行してる
リフレクションとかは使わずテストスイートの管理はマニュアルで出力は基本イミディエイトウィンドウ
結果表示を見やすくするのが難しいしマニュアル管理が面倒くさいので次やる時はツール使うつもり
Macなのであんまり選択肢ないんだけどね
自称プロ氏以外で自分はこんなやり方してるよって人がいたら教えてね
0300デフォルトの名無しさん
2017/02/25(土) 19:55:51.75ID:hngPS/ilちゃんとやったこと無いな
おすすめの本とかある?
0301デフォルトの名無しさん
2017/02/25(土) 21:05:33.03ID:GLyd7N/c\r\n とかVBAだとどうだったか一覧で確認したく
0302デフォルトの名無しさん
2017/02/25(土) 21:22:36.39ID:InN1hs8kダイスゲームを作っているのですが、
「ダイスを選んで(d4〜d12)振る。出目が最大値なら振り足していく」の
「出目が最大値なら振り足し」の部分がうまくいかず。
何かヒントだけでもいただけないでしょうか?
よろしくお願いします。
0303デフォルトの名無しさん
2017/02/25(土) 21:26:49.58ID:z4sM9zVwVisual Basic の定数
https://msdn.microsoft.com/ja-jp/library/office/gg251522.aspx
│
└その他の定数
https://msdn.microsoft.com/ja-jp/library/office/gg278800.aspx
0304デフォルトの名無しさん
2017/02/25(土) 21:42:51.80ID:IvVV1H8Vユニットテストに関して今まで自分が読んだ中ででコレって本は正直ないね
今まで読んだ中で一番参考になったと思うのはxUnit Test Patternsだけど人に勧めるほどじゃない
おすすめ本があればおれも知りたい
0305デフォルトの名無しさん
2017/02/25(土) 21:52:34.65ID:IvVV1H8Vこれ誤爆じゃなく?
0306デフォルトの名無しさん
2017/02/25(土) 23:08:25.16ID:IvVV1H8VDo~Untilとかのループを使えばいいと思うよ
Do
score = RollDie(demension)
total = total + score
Loop Until score <> demension
0307デフォルトの名無しさん
2017/02/25(土) 23:59:41.36ID:THbYlaQi>demension
高度なギャグ?
0308デフォルトの名無しさん
2017/02/26(日) 00:49:24.34ID:Jc/HEYW+絵の動きがカクカクだったけど、
今なら標準機能だけでも高速に動いたりする?
0309デフォルトの名無しさん
2017/02/26(日) 01:08:21.13ID:xChU2zdPそうね
0310デフォルトの名無しさん
2017/02/26(日) 01:22:54.38ID:/2VmdLBuハハハこりゃごめん
無意識だったわ
0311デフォルトの名無しさん
2017/02/26(日) 16:12:12.81ID:no7L8kFbなるほどねえ
大まかな基本的な様式を学びたいねえ
0312デフォルトの名無しさん
2017/02/26(日) 18:31:38.72ID:R965yTZc0313デフォルトの名無しさん
2017/02/26(日) 19:23:51.79ID:AZYnfb42基本的な様式はassertかprintだよ
0314デフォルトの名無しさん
2017/02/26(日) 19:26:46.18ID:uwzeEkf6カバレッジとかの計算は出来るの?
0315デフォルトの名無しさん
2017/02/26(日) 21:21:18.49ID:5EEU5ZpJ0316デフォルトの名無しさん
2017/02/26(日) 21:32:20.06ID:no7L8kFbどうassertやprintするか、ってのが様式でしょ
0317デフォルトの名無しさん
2017/02/26(日) 21:34:59.96ID:5EEU5ZpJですよねー
0318デフォルトの名無しさん
2017/02/26(日) 21:40:18.38ID:/2VmdLBuですよねー
0319デフォルトの名無しさん
2017/02/26(日) 23:03:16.98ID:AZYnfb42違うよ
ユニットテストの様式つまり共通の形式とは
機能を実行して期待する結果と比較して期待通りだったか可視化する
繰り返し実行できるようにする
この2点だけ
要するに共通してやる事はassertかprintってこと
0320デフォルトの名無しさん
2017/02/26(日) 23:05:16.29ID:AZYnfb42実装は言語やフレームワークや実装者によって様々
0321デフォルトの名無しさん
2017/02/26(日) 23:09:43.75ID:AZYnfb42ある実装ではテストケースの自動作成をサポートする
ある実装ではレポーティングをサポートする
……
こういった便利な機能は最近では当たり前ではあるが個々の実装がサポートしているだけであって様式ではない
VBAの手作りユニットテストがこういった機能をサポートして居なくとも先に述べた様式さえ守ればそれはユニットテストなのだ
0322デフォルトの名無しさん
2017/02/26(日) 23:12:14.71ID:5EEU5ZpJお前は「基本的な様式はassertかprintだよ」と言った
0323デフォルトの名無しさん
2017/02/26(日) 23:32:26.48ID:AZYnfb42そうだよ
0324デフォルトの名無しさん
2017/02/26(日) 23:33:49.65ID:no7L8kFb様式って言葉が間違いなら手順でもいいけど
0325デフォルトの名無しさん
2017/02/26(日) 23:40:35.36ID:S7QG1cJ60326デフォルトの名無しさん
2017/02/27(月) 06:20:51.03ID:MTBn4+hr0327デフォルトの名無しさん
2017/02/27(月) 09:06:43.18ID:Rm2//oz0それまで動いていたWorksheet_Calculateは中断され、新たにWorksheet_Calculateが開始されるの?
0328デフォルトの名無しさん
2017/02/27(月) 10:11:54.88ID:FuQm8dQRそんなことがどういう状況で起こるの?
0329デフォルトの名無しさん
2017/02/27(月) 10:30:46.57ID:Rm2//oz0>>227と>>232を読んでふと疑問に思ったのよ。
一つのシートにA社の現在の株価とB社の現在の株価があったとして、それらがリアルタイムで変化するわけ。
あるときA社の株価が変化してWorksheet_Calculateが動き出して終了する前にB社の株価が変化したらどうなるんだろ?って疑問です。
今これに関して困っているというわけじゃなくて、ふとした疑問なんです。
0330デフォルトの名無しさん
2017/02/27(月) 10:34:47.28ID:7A4CRrMK0331デフォルトの名無しさん
2017/02/27(月) 10:39:17.85ID:Rm2//oz0RSSというものの仕組みがわかっていないのですが、外部のプログラムがセルの内容を変化させる???
のだとしたら、外部プログラムはWorksheet_Calculateの終了をわざわざ待つのかな?
それともWorksheet_Calculateが実行中はセルの内容は書き換わらないというエクセルの仕様などあるのでしょうか?
0332デフォルトの名無しさん
2017/02/27(月) 11:28:18.84ID:FuQm8dQR確かにRSSの仕組みは知らないや。
0333デフォルトの名無しさん
2017/02/27(月) 11:40:15.11ID:DGmPM/4eプロなら、xUnit Testing Frameworkを使うだろうね。
ここにいろいろあるから参考までに。
http://d.hatena.ne.jp/miau/20110301/1298935505
ちなみに、俺がそれを必要としたときにはしっくりくるツールがなかったので自作した。
0334デフォルトの名無しさん
2017/02/27(月) 11:49:15.97ID:DGmPM/4e> この2点だけ
xUnit Testing Frameworkとして要求されるのは
・各テストを独立して実行する仕組みがある
→あるテストの結果が次のテストに影響してはならない
ただし、Excelに関してはシートの変更を自動で元に戻せないなどの問題があるが
・テストが失敗しても止まらない
→実行時エラーで止まってたらテストにならない
・テストメソッドのの定義を検出して、自動実行する
→リフレクションなどを使ったりして実現する。言語の制約でそれができないものもあるが
0335デフォルトの名無しさん
2017/02/27(月) 12:08:01.18ID:FuQm8dQR0336デフォルトの名無しさん
2017/02/27(月) 18:53:37.41ID:bS39cZCs技術の進歩と見るか人間の退化と見るか
0337デフォルトの名無しさん
2017/02/27(月) 19:28:07.30ID:FuQm8dQR0338デフォルトの名無しさん
2017/02/27(月) 23:43:47.40ID:Rm2//oz00339デフォルトの名無しさん
2017/02/27(月) 23:54:17.29ID:JEmDULg8Worksheet_Calculate()イベントの中で 再計算が起こるようにセル値を変える
無限ループにならないよう対策は必要だけどなwww
0340デフォルトの名無しさん
2017/02/27(月) 23:57:42.60ID:/fbOgPk7計算中は、少なくともマウスやキーボードは操作できなくなる
OnChangeの連鎖は無限ループになってアプリが無反応になる
タイマーイベントなどを仕掛けた時はどうなるか知らんけど、やっぱり無反応になるんじゃないかな
これぐらい、自分で確かめてみたらいいんじゃない?
誰かの回答を待つより早いぞ
0341デフォルトの名無しさん
2017/02/28(火) 00:52:27.18ID:39alJvfiシングルスレットモデルだからDoEventsを使って
意図的に自分のコード以外からのセルの値をアップデートを許可しない限り
VBAのコード実行中に他のやつがセルを更新することはできないでしょ
0342デフォルトの名無しさん
2017/02/28(火) 00:58:02.12ID:39alJvfistartTime = Timer
Do While Timer < (startTime + seconds)
DoEvents
Loop
0343デフォルトの名無しさん
2017/02/28(火) 07:34:06.01ID:7mNVCjuiそうですよね、自分でやってみます。
外部アプリケーションからの書き込みは自分では無理ですが、
Worksheet_Calculate内での書き換えはトライできそうですね。
>>340-341
確かに言われてみればマクロ実行中は操作受け付けてくれませんよね・・・
0344デフォルトの名無しさん
2017/02/28(火) 10:46:46.66ID:UkiPXm0Fいないだろうねぇ
てか、プロでもやってる人少ないだろうね
多分このスレにもプロは何人かいると思うが、他人に提供するプロダクトレベルのVBAのコードを
書いた人は少ないんじゃないだろうか
0345デフォルトの名無しさん
2017/02/28(火) 12:20:09.93ID:VxO1C4Znいよいよもって意味不明の自称プロw
0346デフォルトの名無しさん
2017/02/28(火) 12:35:40.04ID:ItXJr3YY0347デフォルトの名無しさん
2017/02/28(火) 12:50:07.36ID:UkiPXm0F> それプロちゃいますやんw
プロのプログラマが社内向けツール(非プロダクトレベル)とかをVBAで書いたりするだろ?
行数レベルでいうと、3000行未満くらい
どっちかというと、大半がそういうプロなんだと思うが
0348デフォルトの名無しさん
2017/02/28(火) 14:11:31.27ID:w0lg3amf0349デフォルトの名無しさん
2017/02/28(火) 14:20:45.76ID:UkiPXm0Fテスト無しでも保守するのがプロ
てか、君の会社の社内ツールにはユニットテストが完備されてるの?
そうならすごいが、時間の無駄という見方もあるな
0350デフォルトの名無しさん
2017/02/28(火) 14:48:41.98ID:UkiPXm0Fhttps://github.com/VBA-tools/VBA-TDD
githubでも思ったよりvba関連のプロジェクト多いな
面白そうなもの
https://github.com/rubberduck203/VBEX
まあお堅い所だと、誰が書いたかもわからんコード使うなとか言われそうだが
0351デフォルトの名無しさん
2017/02/28(火) 15:19:19.93ID:ItXJr3YYこのVBEXっての知らなかったな。面白そうだし参考になるかも。
0352デフォルトの名無しさん
2017/02/28(火) 18:59:41.30ID:2I1G4LU3手軽で便利なツール他に沢山あるし手書きとか冗談だろ
出先とかで本当にどうしようもない場合にはVBAが重宝するけどそれだけ
今まさにそんな状況だから助かってる
0353デフォルトの名無しさん
2017/02/28(火) 19:11:41.43ID:ItXJr3YY「それだけ」?
0354デフォルトの名無しさん
2017/02/28(火) 19:12:45.52ID:ItXJr3YYなんでもない
0355デフォルトの名無しさん
2017/02/28(火) 19:19:13.41ID:ELKFJ24Aなら ここに用ないだろ 消えて
つか VBAってツール用じゃないぜ(ExcelとかOfficeソフトの マクロ用)だぞ
たまたまツールにも 使えるってだけで 何勘違いして語ってるのよ
0356デフォルトの名無しさん
2017/02/28(火) 19:29:40.97ID:5GEsQx3y0357デフォルトの名無しさん
2017/02/28(火) 19:30:33.59ID:ItXJr3YY俺も一瞬そう勘違いしたが
0358デフォルトの名無しさん
2017/02/28(火) 19:39:27.15ID:ELKFJ24Aま色々出来てしまうから 勘違いも仕方ないんだけど
ツール用と使おうとして アレ出来ない これ出来ないって言われても 滑稽なだけ
なら なんで VBA使ってんの? って思う
0359デフォルトの名無しさん
2017/02/28(火) 19:44:51.73ID:2I1G4LU3今は用があるんだよ
文盲か?
0360デフォルトの名無しさん
2017/02/28(火) 19:47:15.36ID:2I1G4LU3あとな
ツール用と思ってないから>>352の発言だろ?
文盲か?
0361デフォルトの名無しさん
2017/02/28(火) 19:50:23.99ID:VYorfgJVでもいつの間にか業務フローに組み込まれてるのは勘弁
0362デフォルトの名無しさん
2017/02/28(火) 20:44:03.30ID:5GEsQx3y0363デフォルトの名無しさん
2017/02/28(火) 21:09:09.20ID:39alJvfi0364デフォルトの名無しさん
2017/02/28(火) 22:49:08.74ID:Zy6Q+tfd会社 英語
挿入 英語
安い 英語
変数名考える時、こうやってググる英語力のない俺。
0365デフォルトの名無しさん
2017/02/28(火) 22:54:07.62ID:c8QBNQT9挿入はpushとinsertとfu*kのどれを選ぶのか
0366デフォルトの名無しさん
2017/02/28(火) 23:12:40.34ID:4juWt3rx俺はもっぱらinsert
f*chは///
0367デフォルトの名無しさん
2017/02/28(火) 23:21:10.10ID:39alJvfihttp://www.urbandictionary.com/define.php?term=penetrate
ぺ、ペネトレーションテスト!?
はい覚えましたね
0368デフォルトの名無しさん
2017/03/01(水) 00:23:09.29ID:oq22+n6sスペル長いなぁ…
urikake kaikake uriage siire
こんな変数名に結局してしまうダメマクラーです
0369デフォルトの名無しさん
2017/03/01(水) 00:28:53.31ID:uGJVx5D10370デフォルトの名無しさん
2017/03/01(水) 00:45:46.71ID:oq22+n6sあとintegerじゃ桁が足りないよう
0371デフォルトの名無しさん
2017/03/01(水) 00:46:24.62ID:RW4kYq6z0372デフォルトの名無しさん
2017/03/01(水) 08:41:54.67ID:SJrJxNnQ○○ 英語 でググるのは俺も普通にやるけどその4つぐらいはググらなくてもわかるわ w
0373デフォルトの名無しさん
2017/03/01(水) 09:48:05.42ID:8L/LyjJG直訳で意味が通じなくなってたらどうしよう、と
それでも単語が出ればまだいいけど、単文しか出てこない時はだいぶ悩む
0374デフォルトの名無しさん
2017/03/01(水) 12:17:44.40ID:riQaWnbA0375デフォルトの名無しさん
2017/03/01(水) 12:26:26.67ID:pq9DUdcyたぶん変数名じゃなくて関数名かクラス名か引数名でしょう
0376デフォルトの名無しさん
2017/03/01(水) 12:27:31.11ID:Mv+9VeBTクラス内のサブプロシージャの呼び出しは
a.class1 引数でイコールつけないけど
プロパティ(letやset)の場合はなぜイコールをつけるのだろう?
初めは何も知らなくてつい括弧とかつけて落としていたなぁ
0377デフォルトの名無しさん
2017/03/01(水) 13:30:59.55ID:qicsiMdCアクセサ風味なんだから引数より代入した方がそれっぽいじゃん
0378デフォルトの名無しさん
2017/03/01(水) 13:54:08.09ID:pq9DUdcy0379デフォルトの名無しさん
2017/03/01(水) 13:56:18.10ID:NYMcPNs0range("A1").value = "hoge"
debug.print range("A1").value
に違和感がある?
ないのなら、Class1にValueという名前のプロパティを作り
dim obj as new class1
obj.value = "hoge"
debug.print obj.value
にも違和感はないと思うんだが。
0380デフォルトの名無しさん
2017/03/01(水) 19:49:27.73ID:SJrJxNnQまあプロパティって意味のとりにくい用語だよね
英語の意味としては財産とか所有物って意味でそこからインスタンスに所属する値って意味に使われてるみたい
要するにクラス中の変数なので普通の変数と同様に Let/Set が要ると言う実装にしたんだろうね
0381デフォルトの名無しさん
2017/03/01(水) 23:00:09.13ID:2W8U8v2T0382デフォルトの名無しさん
2017/03/02(木) 00:40:32.70ID:m+opN9fI?
0383デフォルトの名無しさん
2017/03/02(木) 12:52:56.78ID:Awc1p1pOもしA1セルの値がaまたはbの時にA2セルにxを表示、
cの時にA2セルに空欄を表示、
dの時にはA2セルに〇を表示させる時にはどのようにifぶんを作ったら宜しいでしょうか?
0384デフォルトの名無しさん
2017/03/02(木) 12:58:28.70ID:oYGdpVKYキーボードを使って
文法に則ればできるよ。
ifから始まります。
0385デフォルトの名無しさん
2017/03/02(木) 13:02:35.84ID:6uXGYfUV0386デフォルトの名無しさん
2017/03/02(木) 13:16:20.59ID:cLIuGgewDim s As Range
Dim t As Range
Set s = Range("A1")
Set t = Range("A2")
If s.value="a" Or s.value="b" then
t.value="×"
elseif s.value="c" then
t.value=""
elseif s.value="d" then
t.value="○"
end if
end Sub
0387デフォルトの名無しさん
2017/03/02(木) 13:23:33.39ID:BpvNXhHYこの程度のif文自分で作れないのはヤバイと思って取り組んでほしいね
0388デフォルトの名無しさん
2017/03/02(木) 13:39:42.77ID:TWfcI5S90389デフォルトの名無しさん
2017/03/02(木) 13:44:05.81ID:Awc1p1pOすみません ありがとうございました
0390デフォルトの名無しさん
2017/03/02(木) 14:37:31.76ID:oipLUCYDってことか?
0391デフォルトの名無しさん
2017/03/02(木) 14:53:52.35ID:N1b4IOL+0392デフォルトの名無しさん
2017/03/02(木) 15:12:42.33ID:oipLUCYDCOBOL同様に絶滅危惧種としてとらえていた
0393デフォルトの名無しさん
2017/03/02(木) 15:16:28.01ID:iFkNWUjsIFをネストさせればいいんだよ
=IF(OR(A1="a",A1="b"),"x",(IF(A1="d","o","")))
※a,b,d以外はcに限らず空白
0394デフォルトの名無しさん
2017/03/02(木) 16:04:27.65ID:N1b4IOL+Excelってそこまで廃れてるか?
代わりに何が使われてるの?
0395デフォルトの名無しさん
2017/03/02(木) 16:32:43.48ID:oipLUCYDいやVBAがだよ
0396デフォルトの名無しさん
2017/03/02(木) 16:46:22.36ID:N1b4IOL+0397デフォルトの名無しさん
2017/03/02(木) 17:05:17.53ID:oipLUCYDIf文と書いてあるじゃんか
0398デフォルトの名無しさん
2017/03/02(木) 17:11:03.46ID:TxVakJtwちょっと語っていい?
VBAってなんの為に あるのかわかってる?
VBA(VB for Application)よ
Officeアプリケーションのマクロ言語として VB言語(VB6)が採用された経緯上
Applicationは Officeアプリケーションを指すわけで
"Officeアプリケーションの為のVB言語"
Officeアプリケーションと切り離せないのね MS Ofiiceが現役なら VBAも現役
もし
Officeアプリケーションと切り離して 開発言語と考えるなら
元となった VB6が"絶滅危惧種"なのでその考えは ある意味 正しいとも言えるが
Officeアプリケーションと切り離せない以上 その考え方 そのものが無意味
0399デフォルトの名無しさん
2017/03/02(木) 18:03:41.25ID:N1b4IOL+マクロのIIF関数のことかもしれんだろ
0400デフォルトの名無しさん
2017/03/02(木) 18:06:14.85ID:i3N4WbMp0401デフォルトの名無しさん
2017/03/02(木) 18:45:38.15ID:yayrL0fl0402デフォルトの名無しさん
2017/03/02(木) 18:48:06.75ID:35cEEGqE関数と文の違いもわからなくなったらちょっと頭冷やした方がいい
0403デフォルトの名無しさん
2017/03/02(木) 18:53:13.64ID:oipLUCYD現役であり続けるとしてもユーザーと共に高齢化していくものってあるでしょ
0404デフォルトの名無しさん
2017/03/02(木) 19:01:21.59ID:TWfcI5S9エクセルがゴミに見えるようなスプレッドシートソフトが世に出まわる事態とならない限り新規ユーザは増える
0405デフォルトの名無しさん
2017/03/02(木) 19:02:48.39ID:TxVakJtw高齢化しても MSが OfficeのVBAを存続させる限り ずーーーーと現役
MSがVBAを捨てて 新な マクロ言語を採用して それが浸透した時
はじめて"絶滅危惧種"と言えるでしょ
0406デフォルトの名無しさん
2017/03/02(木) 19:13:07.57ID:tOCPWbBv0407デフォルトの名無しさん
2017/03/02(木) 19:16:07.67ID:O3pFZTv5モード切り替えとかで対応できんもんかね
0408デフォルトの名無しさん
2017/03/02(木) 19:28:00.20ID:oipLUCYDもともとは新規参入者がいるなんて意外だなぁという話だった。
0409デフォルトの名無しさん
2017/03/02(木) 19:31:52.59ID:oipLUCYD今から若い人にVBAを覚えてもらうってのはなんか悪いなあ、という気持ち。
0410デフォルトの名無しさん
2017/03/02(木) 19:52:49.55ID:i3N4WbMpありがとう Ctrl+Wが共通だと思ってたわ
0411デフォルトの名無しさん
2017/03/02(木) 20:13:09.39ID:TxVakJtwなるほど 君の主張は
VBAが"絶滅危惧種"
ではなく
VBAを"絶滅危惧種"にしたい
なのね
俺と主張が違う訳だ・・・がんばってね(ハート)としか言えないな
一方的ですまんが これで終わりにするよw
0412デフォルトの名無しさん
2017/03/02(木) 20:22:18.41ID:5DyrcvCx0413デフォルトの名無しさん
2017/03/02(木) 20:31:33.46ID:rp+EHrUt実際に絶滅するかは全く別の話やな
0414デフォルトの名無しさん
2017/03/02(木) 21:11:08.84ID:tOCPWbBv根絶やしにすべきなんだけどあちこち根を張っててもう除去したくてもできない
共倒れするまで付き合って行くしかない
0415デフォルトの名無しさん
2017/03/02(木) 21:11:20.16ID:iFkNWUjsVBAは普通にやればできるからiPhone/Androidの開発本の類よりはマシだろうけど
0416デフォルトの名無しさん
2017/03/02(木) 21:13:00.43ID:iFkNWUjsBashとかと一緒で本格的にやるときはちゃんとしたツールを選んだほうが賢い
0417デフォルトの名無しさん
2017/03/02(木) 21:28:51.64ID:ILmNVxJOおばちゃまはね
0418デフォルトの名無しさん
2017/03/02(木) 22:25:06.01ID:0SZLHX9K勿論MS公式で
0419デフォルトの名無しさん
2017/03/02(木) 22:49:54.05ID:iFkNWUjsPythonは公式じゃないけどExcelを操作するライブラリもあるしVSTOでIronPython使える
どれもVBAの完全代替ではないけどやろうと思えばやれる環境は整ってる
1つ言語をサポートするのにも相当なコストがかかるから
VBAのかわりにPythonが標準でサポートされるようなことはまず無いだろうね
0420デフォルトの名無しさん
2017/03/02(木) 22:55:38.59ID:oYGdpVKY俺には礼がないのかよ
0421デフォルトの名無しさん
2017/03/02(木) 23:06:52.55ID:o++cz0ABVBが少しずつCに近づいていって、
気づいたら、同じじゃん!
ってなったらいいなあと思いました。
0422デフォルトの名無しさん
2017/03/02(木) 23:13:36.33ID:ILmNVxJO.netでほぼ統合されたよ
0423デフォルトの名無しさん
2017/03/02(木) 23:25:40.56ID:lUDhMt+0かじった感じC♯は扱いやすそうだったけどね
0424デフォルトの名無しさん
2017/03/03(金) 00:19:59.13ID:Yp5yaGjWみんなマクロマクロマクロマクロマクロマクロマクロマクロ言うんですよ。
Rows(1).DeleteだとVBA、
Rows(1).Select→Selection.Deleteだとマクロってことでいい?
0425デフォルトの名無しさん
2017/03/03(金) 00:25:20.77ID:GTe30Tvn0426デフォルトの名無しさん
2017/03/03(金) 00:26:35.38ID:CcOIZBjgだっけ?
0427デフォルトの名無しさん
2017/03/03(金) 00:45:36.07ID:GTe30Tvn一般的なプログラム言語でいうマクロ
キーボード操作を記録再生するキーボードマクロ
それを拡張してアプリを自動化するためのマクロ
MSDNの記事を読む限りはVBAで作ってるものはAdd-inだろうがなんだろうがマクロと読んでる
マクロを有効にするっていう文脈で有効にしないと動かないのがOfficeのマクロ
0428デフォルトの名無しさん
2017/03/03(金) 04:33:35.83ID:NhWEsePBつか、何でマクロって言われるのがやなの?個人的には>>425,426であって嫌悪の対象にはならんのじゃが。
0429デフォルトの名無しさん
2017/03/03(金) 08:05:09.24ID:chSe/5JU非プログラマからしたらツールがどんな言語でかかれてるかなんてどうでもいいからな
officeの自動化→マクロってだけだ
まあ気持ちもわからんでもないけどね
マクロって言うとマクロの記録だけで作ったあれを思い出させるんじゃないか
0430デフォルトの名無しさん
2017/03/03(金) 08:14:42.67ID:L9yGk0QSああ。「マクロの記録」で作ってると思われてる、って意味なら哀れだな。
0431デフォルトの名無しさん
2017/03/03(金) 12:23:59.99ID:ehAto94L0432デフォルトの名無しさん
2017/03/03(金) 12:27:26.70ID:enWtQeEf0433デフォルトの名無しさん
2017/03/03(金) 12:34:06.26ID:ehAto94Lてかお前らそんなのいちいち気にしてんの?
0434デフォルトの名無しさん
2017/03/03(金) 12:46:11.61ID:tU0QzTHp0435デフォルトの名無しさん
2017/03/03(金) 13:13:49.82ID:enWtQeEfプログラマは自分が書く立場を前提にしなきゃ話が通じない。
0436デフォルトの名無しさん
2017/03/03(金) 13:28:10.50ID:tq5Z/bcV0437デフォルトの名無しさん
2017/03/03(金) 13:46:50.64ID:chSe/5JUまあ大体わかるだろ
0438デフォルトの名無しさん
2017/03/03(金) 19:08:02.84ID:CaPEWOUZ組み合わせとなりますが、おもいつかない、。。
たとえば、integer配列1,2,3を渡した際、
添字の上限とし組み合わせを出力したい。
上記引数を例とした場合の結果期待は以下
000 001 002 003
010 011 012 013
020 021 022 023
100 101 102 103
110 111 112 113
120 121 122 123
どなたかたすけておくれ。
0439デフォルトの名無しさん
2017/03/03(金) 19:09:47.91ID:CaPEWOUZなお、引数としては1,3,10のようなパターンはあります
0440デフォルトの名無しさん
2017/03/03(金) 19:21:21.10ID:6kLe4aCy0441デフォルトの名無しさん
2017/03/03(金) 19:32:18.04ID:CaPEWOUZ可変です。最大は5を予定しています。
0442デフォルトの名無しさん
2017/03/03(金) 19:34:19.05ID:6kLe4aCy0443デフォルトの名無しさん
2017/03/03(金) 19:49:15.78ID:CaPEWOUZ固定に変更します。おねがいします
0444デフォルトの名無しさん
2017/03/03(金) 19:59:38.21ID:hxiWJWmXルールがわからん
111 があるのに 222 がない理由は?
0445デフォルトの名無しさん
2017/03/03(金) 20:01:21.51ID:6kLe4aCyオイオイいつから俺がお前より有能だと錯覚していた?
言っとくが俺にできるのはせいぜい要素数2つまでだぜw
0446デフォルトの名無しさん
2017/03/03(金) 20:03:18.63ID:enWtQeEf「添字の上限とし組み合わせを出力したい」
ここがわからん
0447デフォルトの名無しさん
2017/03/03(金) 20:04:44.21ID:CaPEWOUZ失礼しました。
222はあります。
1,2,3を渡したばあいの期待出力の最後は
234になります。
0448デフォルトの名無しさん
2017/03/03(金) 20:24:44.72ID:hxiWJWmXごめん、意味わからんから俺は抜けるわ
0449デフォルトの名無しさん
2017/03/03(金) 20:31:27.93ID:CaPEWOUZごめんなさい、222は無しでした、
もう一回かきなおしますわ
0450デフォルトの名無しさん
2017/03/03(金) 20:44:35.22ID:y06gdcdw0451デフォルトの名無しさん
2017/03/03(金) 20:57:54.82ID:GTe30Tvn0452デフォルトの名無しさん
2017/03/03(金) 20:58:41.09ID:GTe30Tvnふぁ?
0453デフォルトの名無しさん
2017/03/03(金) 20:59:57.67ID:VQIDQ9VP10って何よ
桁数が多い時はどうすんの
0454デフォルトの名無しさん
2017/03/03(金) 21:01:51.65ID:1KjTKMUS0455デフォルトの名無しさん
2017/03/03(金) 21:02:11.95ID:VQIDQ9VPわけわからん
1、2、3の時は333が最大じゃないのか?
4はどこから出てきた
もう一度慎重に、1、2、3の時の出力を間違いなく全部書いてくれ
0456デフォルトの名無しさん
2017/03/03(金) 21:04:16.97ID:6kLe4aCy0457デフォルトの名無しさん
2017/03/03(金) 21:04:56.95ID:VQIDQ9VP各桁は独立してて、それぞれの最大値が指定されてる
0458デフォルトの名無しさん
2017/03/03(金) 21:11:57.27ID:GTe30Tvn=CONCATENATE(A1,B1,C1)
0459デフォルトの名無しさん
2017/03/03(金) 21:16:38.12ID:EijqyPIy0460デフォルトの名無しさん
2017/03/03(金) 21:23:59.69ID:VQIDQ9VPこれでいいんだろ
Sub macro1()
A = Array(1, 2, 3) ' ここで配列を初期化する
Columns("A:A").NumberFormatLocal = "@"
r = 1
For c0 = 0 To A(0)
For c1 = 0 To A(1)
For c2 = 0 To A(2)
Cells(r, 1) = c0 & c1 & c2
r = r + 1
Next c2, c1, c0
End Sub
0461デフォルトの名無しさん
2017/03/03(金) 21:24:30.68ID:RzEn5cA/1,2,3を渡してなんで0が出力にあるのか?
0462デフォルトの名無しさん
2017/03/03(金) 21:25:30.79ID:RzEn5cA/0463デフォルトの名無しさん
2017/03/03(金) 21:42:42.10ID:6kLe4aCy0464デフォルトの名無しさん
2017/03/03(金) 21:56:35.22ID:IkLX7Y6s使うよ
急にどうした?
0465デフォルトの名無しさん
2017/03/03(金) 21:59:08.48ID:a4L2lQlcすばらしい!たすかりました。
これで妻の出産立ち会いにまにあいそうだ
0466デフォルトの名無しさん
2017/03/03(金) 22:00:51.72ID:6kLe4aCyプロの人に聞いてるからお前は悔しがる必要ないよw
0467デフォルトの名無しさん
2017/03/03(金) 22:13:32.33ID:IkLX7Y6sそうなんだね
うまくいくといいねw
0468デフォルトの名無しさん
2017/03/03(金) 22:24:44.83ID:GTe30Tvn0469デフォルトの名無しさん
2017/03/03(金) 22:29:08.90ID:EijqyPIyr = 0
(i, j, k の For)
B(r) = Join(Array(i, j, k), "")
r = r + 1
Next
でいいってことか
0470デフォルトの名無しさん
2017/03/03(金) 22:31:49.14ID:EijqyPIy0471デフォルトの名無しさん
2017/03/03(金) 22:31:52.11ID:5jvwG3vs個数可変に対応できないんじゃね
0472デフォルトの名無しさん
2017/03/03(金) 22:32:06.27ID:y06gdcdwやり直し
0473デフォルトの名無しさん
2017/03/03(金) 22:37:53.95ID:a4L2lQlc要素数固定の要件に変更したので
充分なりたちそうです
ご指摘ごもっともです。
0474デフォルトの名無しさん
2017/03/03(金) 22:41:05.57ID:a4L2lQlcたしかにそうなんですよね。
0475デフォルトの名無しさん
2017/03/03(金) 22:42:39.77ID:EijqyPIy0476デフォルトの名無しさん
2017/03/03(金) 22:56:22.16ID:VQIDQ9VP0477デフォルトの名無しさん
2017/03/03(金) 23:00:32.56ID:EijqyPIy0478デフォルトの名無しさん
2017/03/03(金) 23:02:58.54ID:EijqyPIy俺が言っている「モジュールにコードを書かない」っていうのは
イミディエイトウィンドウだけで片付ける、って意味だけど、そうだよね?
0479デフォルトの名無しさん
2017/03/03(金) 23:11:42.15ID:VQIDQ9VPもちろんわかってるよ
再帰を使わずにマルチステートメントだけで書く
でもよく考えたら1行の文字数制限に引っかかるかも
0480デフォルトの名無しさん
2017/03/03(金) 23:20:35.66ID:EijqyPIy配列の最後の数が3だと0,1,2,3の4通りだから4列にする、という仕様か?
0481デフォルトの名無しさん
2017/03/03(金) 23:25:09.15ID:a4L2lQlcご指摘ありがとう
460のコードで解決していますが、
単に見やすく区切っただけです。
そう考えると460はエスパーだな
0482デフォルトの名無しさん
2017/03/03(金) 23:33:56.14ID:hmuWFGY/再帰とかダッサ
0483デフォルトの名無しさん
2017/03/03(金) 23:37:06.12ID:6kLe4aCy大好きなんだろ?オブジェクト指向
0484デフォルトの名無しさん
2017/03/03(金) 23:39:49.44ID:EijqyPIyマジで?
できるかな・・・
0485デフォルトの名無しさん
2017/03/03(金) 23:42:22.56ID:S2n0JCmGコンテキストを読めない最高のバカ
0486デフォルトの名無しさん
2017/03/03(金) 23:48:19.00ID:8zWeqOUQコード出してからほざいたら?
0487デフォルトの名無しさん
2017/03/03(金) 23:51:21.01ID:EijqyPIy再帰はカッコいいだろう
0488デフォルトの名無しさん
2017/03/03(金) 23:57:36.93ID:hmuWFGY/基数変換を各桁で基数が異なるものとして拡張するだけ
秒のデータから時分秒を抽出するときと同じ感覚だな
これはループ1回で書ける
後は0から可能な最大値までインクリメントして↑を実行するだけ
0489デフォルトの名無しさん
2017/03/04(土) 00:20:57.93ID:00KaTwkGあるwebページに複数のリンクがあります。その複数リンク先のページのソースをそれぞれ取得したいのですが、リンク先ページを開かなくともソースを取得できる方法はありますか。
0490デフォルトの名無しさん
2017/03/04(土) 00:24:27.12ID:53W8X94X0491デフォルトの名無しさん
2017/03/04(土) 00:30:08.61ID:KnUkpjtXw
0492デフォルトの名無しさん
2017/03/04(土) 00:37:26.38ID:gtIbLVZp再帰だと添字の上限が1,2,3を渡しても3,3,3になってしまうようなコーディングしかおもいつかなかったんです。。。
0493デフォルトの名無しさん
2017/03/04(土) 00:38:15.23ID:gtIbLVZpそうです!
0494デフォルトの名無しさん
2017/03/04(土) 00:41:18.75ID:EGaqvD7zなるほど
(a, b, c, d) が渡されたら
a+1, b+1, c+1, d+1 が基数になるわけね
0495デフォルトの名無しさん
2017/03/04(土) 00:53:27.23ID:n0aV3kNq俺の知ってる方法は↓
1) URLDownloadToFile APIでソースをファイルに落としてからVBAで読み込む
2) MSXML2.XMLHTTPオブジェクトでソースをを取得する
0496デフォルトの名無しさん
2017/03/04(土) 00:54:19.06ID:00KaTwkGありがとうございます!
0497デフォルトの名無しさん
2017/03/04(土) 01:03:16.80ID:Zd61TdHsちょっと遅いけど、こんなもんでいいんじゃないかな
あと、実行前にA列の書式を文字列にしといてな
Option Base 1
Sub macro1()
a = Array(1, 2, 3) ' 配列を設定
U = UBound(a)
For i = 1 To U
Z = Z & "9"
F = F & "0"
Next
For i = 0 To Z
W = Format(i, F)
c = 0
For j = 1 To U
If Mid(W, j, 1) * 1 > a(j) Then Exit For
c = c + 1
Next
If c = U Then r = r + 1: Cells(r, 1) = W
Next
End Sub
0498デフォルトの名無しさん
2017/03/04(土) 01:11:29.62ID:Zd61TdHs年を取るとこういうのがすぐ出てこなくなって困るわ
Option Base 1
Sub macro1()
a = Array(1, 2, 3)
U = UBound(a)
Z = String(U, "9")
F = String(U, "0")
For i = 0 To Z
W = Format(i, F)
c = 0
For j = 1 To U
If Mid(W, j, 1) * 1 > a(j) Then Exit For
c = c + 1
Next
If c = U Then r = r + 1: Cells(r, 1) = W
Next
End Sub
0499デフォルトの名無しさん
2017/03/04(土) 01:15:03.90ID:Zd61TdHs大したことないコードを何度も張ってすまん
Option Base 1
Sub macro1()
a = Array(1, 2, 3)
U = UBound(a)
F = String(U, "0")
For i = 0 To String(U, "9")
W = Format(i, F)
c = 0
For j = 1 To U
If Mid(W, j, 1) * 1 > a(j) Then Exit For
c = c + 1
Next
If c = U Then r = r + 1: Cells(r, 1) = W
Next
End Sub
0500デフォルトの名無しさん
2017/03/04(土) 04:37:57.22ID:JIqsuMSkDim cnt
Public Sub permutation()
Dim tmpAry
cnt = 0
tmpAry = Array(1, 4, 3, 5)
Call recursive(tmpAry, 1, "")
End Sub
Public Sub recursive(ary, level, output)
Dim i
If level > UBound(ary) + 1 Then
cnt = cnt + 1
Debug.Print cnt, output
Else
For i = 0 To UBound(ary)
Call recursive(ary, level + 1, output & ary(i))
Next i
End If
End Sub
0501デフォルトの名無しさん
2017/03/04(土) 07:52:32.24ID:7yviaXI5Modと割り算を繰り返し行う忌避したくなるプログラムにならないか懸念
0502デフォルトの名無しさん
2017/03/04(土) 11:29:38.18ID:BjLHIgDAおお、再帰パターンすね
0503デフォルトの名無しさん
2017/03/04(土) 12:39:08.86ID:dl8TEp120504デフォルトの名無しさん
2017/03/04(土) 12:49:31.79ID:YssZJcob挙動がおかしい呼び出しが混じってたりするよな?
存在するはずのない呼び出し…
再帰に遊び半分で手を出すと恐ろしい目にあうぞ
0505デフォルトの名無しさん
2017/03/04(土) 12:59:10.31ID:WGhXcN9C無限に呼び出しされるし、ひとつだけ違う挙動してたりな
0506デフォルトの名無しさん
2017/03/04(土) 13:18:26.39ID:aE/wnzST0507デフォルトの名無しさん
2017/03/04(土) 14:34:08.41ID:htZXnpcL0508デフォルトの名無しさん
2017/03/04(土) 15:13:51.09ID:aE/wnzSTどういう処理をしようとしてるのかを聞けば、論理的には可能だけどそれやったら危険だろって話がゴマンとある。
0509デフォルトの名無しさん
2017/03/04(土) 16:33:57.45ID:7yviaXI50510デフォルトの名無しさん
2017/03/04(土) 18:08:27.67ID:4MV514cj0511デフォルトの名無しさん
2017/03/04(土) 18:24:15.36ID:KiuHqK+P0512デフォルトの名無しさん
2017/03/04(土) 18:32:22.89ID:EGaqvD7zさっきの変数の値なんだったかな、と思ってDebug.Printするときれいさっぱりなくなっているのが悲しい。
0513デフォルトの名無しさん
2017/03/04(土) 19:06:48.03ID:oM2Bzul7いいこと教えてやろう
イミディエイトウィンドウではDebugは付けなくていいんだよ
あとPrintの短縮形は?
つまり、変数aの内容を表示したい時は
?a
だけでいい
0514デフォルトの名無しさん
2017/03/04(土) 19:31:02.87ID:4MV514cjまあな
ここでもクリップボード使い多いし
0515デフォルトの名無しさん
2017/03/04(土) 19:48:09.54ID:4HLwAPth0516デフォルトの名無しさん
2017/03/04(土) 19:53:15.26ID:EGaqvD7z?
0517デフォルトの名無しさん
2017/03/04(土) 22:23:51.48ID:2aaVhMso0518デフォルトの名無しさん
2017/03/04(土) 22:25:52.83ID:0X5pfc4wExcelマクロで、あるセルを選択したらそれを決まった場所(絶対参照)に代入して、その結果得られた式がはじめに選択したセルの左にくるので
その値を保存するというプログラムを書こうとしているのですが、1度絶対参照をしてしまうとはじめの選択した位置に戻ることはできないのでしょうか…
初期選択セルから定位置のセルを経由して再び元のセルに戻るプログラムがわかりません…
0519デフォルトの名無しさん
2017/03/04(土) 23:00:18.49ID:0X5pfc4w0520デフォルトの名無しさん
2017/03/04(土) 23:00:45.28ID:Zd61TdHs説明が下手すぎて何が聞きたいのかさっぱりわからん
けど、あんたのやりたいことは簡単にできる、これは確信が持てる
0521デフォルトの名無しさん
2017/03/05(日) 00:14:50.83ID:xJ+x/kOi0522デフォルトの名無しさん
2017/03/05(日) 00:25:20.60ID:T6sYeFJIでもそれを読解力とは言わないよね。
0523デフォルトの名無しさん
2017/03/05(日) 00:29:18.52ID:SMp0F4mM論理性のかけらもない心情の吐露だな
0524デフォルトの名無しさん
2017/03/05(日) 01:31:29.14ID:f1XixyjT>>518の文章は酷すぎ
0525デフォルトの名無しさん
2017/03/05(日) 02:13:37.62ID:/2H2oq+k0526デフォルトの名無しさん
2017/03/05(日) 03:05:09.73ID:v/i32huX0527デフォルトの名無しさん
2017/03/05(日) 03:18:17.60ID:d0KLgtk9また2ちゃんに戻ってこれますようにw
0528デフォルトの名無しさん
2017/03/05(日) 07:55:16.92ID:T6sYeFJI老人の繰り言を聴く会かよ
0529デフォルトの名無しさん
2017/03/05(日) 11:31:42.67ID:DQnD+5PQ流れの早いスレじゃねえんだから推敲ぐらいしろ人間のクズが
0530デフォルトの名無しさん
2017/03/05(日) 15:28:57.22ID:iWxTBjQU回答が義務付けられてるわけじゃないんだから、
そういう事が苦にならない人だけ答えりゃいいんだよ。
0531デフォルトの名無しさん
2017/03/05(日) 17:20:50.93ID:hrn2oTcjブックAからブックBを開き、ブックAのマクロでブックBの"Sheet1"のA1セルの値を変更します。
このマクロには続きがあり、ブックBのA1セル変更後には他の処理が書かれています(ブックAの事後処理と呼ぶことにします)。
ブックBの"Sheet1"にはWorksheet_Changeがあり、この処理が開始されます。
ブックBのWorksheet_Changeが完了するまで"ブックAの事後処理"は開始されません。
私が希望する動作は、ブックAがブックBのセルを書き換えたら、すぐさまブックAの事後処理を開始してほしいのですが、
実際の動作は、ブックAがブックBのセルを書き換えたら、ブックBのWorksheet_Changeが完了するまでブックAの事後処理を待っている、という状況です。
試しに、ブックBを別プロセスで起動して、ブックAからブックBのセルを書き換えてみても状況は変わらずです。
やはり、ブックBのWorksheet_Changeの完了を待ってしまっています。
私が望む動作にするにはどうしたらよいでしょうか?
0532デフォルトの名無しさん
2017/03/05(日) 17:33:15.05ID:u/xcfN5NVBAerはほぼ全員が素人だから仕方ないけどプロはイベントの順序に依存する処理を書いたら解雇される
つまりこの場合の正解はそんな順序に依存する設計がそもそも間違いだったのではないかというポイントまで戻って考え直すことだね
決してやってはいけない選択はどうしてもワガママを通してイベントの順序に依存させたいと躍起になってハックコードを書くこと
これはもう最悪中の最悪だ
0534デフォルトの名無しさん
2017/03/05(日) 17:39:29.55ID:FAXQq1mx別プロセスで起動したブックBへの値設定ってどうやったの?
0535デフォルトの名無しさん
2017/03/05(日) 17:44:34.39ID:hrn2oTcjんん・・・。確かに素人です。
すいませんが、イベントの順序に依存するのの何が悪いのか理解できません。
Aの処理の後にBを処理して、その後にcを処理して・・・って普通のことじゃないんですか???
何か参考になるサイトありますか?
あるいはこの検索ワードでググれとかありましたら教えてください。
>>533 違う人です。
0536デフォルトの名無しさん
2017/03/05(日) 17:49:34.01ID:hrn2oTcj本スレの上の方にあったものを参考にしました。
Dim xlApp As Application
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set wb = xlApp.Workbooks.Open("C:\test.xlsm")
と事前に別プロセスで開き、そのブックをwbとしておき、
wb.Worksheets("Sheet1").Cells(1, 1) = 1
で値を設定しています。
0537デフォルトの名無しさん
2017/03/05(日) 18:00:53.08ID:u/xcfN5Nもうすでに君の手元で問題が起きてるだろ
イベントってのは
この処理の後になんか出来るけど具体的に何やるかは知らんし知りたくもない
だからオブザーバーの方で勝手にやりたいことを登録しといてよ
俺はもう細かい面倒見ないからこっちに迷惑だけはかけんなよ
っていう要求がある時に使うもの
やりたいことが最初からわかってるならイベントなんか要らない
Sub main()
Call A()
Call B()
Call C()
End sub
これで十分だろ
何をやるかわからないからイベントが必要なんだよ
何をやるかわからないのにその順序に依存したらあっという間に破綻するのは目に見えてるだろ
だって何をやるかわからないんだぜ
0538デフォルトの名無しさん
2017/03/05(日) 18:11:28.81ID:SMp0F4mM相変わらず長々と見当違いな事をw
素人だからって誰もが皆お前の頓珍漢なオレオレ理論につきあってあげる訳じゃないよw
0539デフォルトの名無しさん
2017/03/05(日) 18:15:58.60ID:u/xcfN5N茶化すぐらいしか能のない素人は黙りなよ
意見があるなら論理的に
それがプログラム板での最低限のルールだろ
0540デフォルトの名無しさん
2017/03/05(日) 18:17:05.13ID:f1XixyjT変なコード書かなくても解雇される
0541デフォルトの名無しさん
2017/03/05(日) 18:22:03.85ID:hrn2oTcj私にはちょっと難しいです。
例えば、ブックBのWorksheet_ChangeでA1セルの値が1の場合は処理X、A1セルの値が1以外の場合は処理Yを行う、という場合、
ブックBのWorksheet_Changeの中で処理Xか処理Yを選択するのではなく、
ブックAの方で処理Xか処理Yを選択させるほうが良いということですか?
0542デフォルトの名無しさん
2017/03/05(日) 18:33:12.46ID:u/xcfN5NBのWorksheet_Changeに登録されているイベントの処理内容に依存した処理をAに書くなと言っている
じゃあどう書くべきなんだってのは対面している問題次第だ
自分が本当にやりたいことがなんなのか考えるんだ
それはイベントへの割り込みではないはずだ
イベントへの割り込みは考えられる手段の1つでしかないはずだ
ただ単にイベントに割り込みたいのではなく他に目的があるはずだそうだろ
0543デフォルトの名無しさん
2017/03/05(日) 18:39:57.74ID:SMp0F4mMいやお前が質問の意図を考えろよw
なんでも覚えたばかりのコーディング論を適用してみたい気持ちは分からんでもないがw
プロってそんなんじゃ通用しないよねw
0544デフォルトの名無しさん
2017/03/05(日) 18:42:11.00ID:u/xcfN5N>>539
かわいそうだけど次からはスルーするね
0545デフォルトの名無しさん
2017/03/05(日) 18:47:03.89ID:SMp0F4mM俺はお前が見当違いなレスをする度に馬鹿にして笑ってあげるよw
優しいからね俺w
0546デフォルトの名無しさん
2017/03/05(日) 18:48:18.37ID:FAXQq1mxAはBに依存しないように見えたけど?
>>531どうなの?
0547デフォルトの名無しさん
2017/03/05(日) 18:49:39.88ID:Nxw6KM66ブックBの方を変更できれば話は早いが
0548デフォルトの名無しさん
2017/03/05(日) 18:58:23.78ID:hrn2oTcjやはり私にはかなり難しいです。まだ消化できていません。もらったレスと自分のやりたいことをじっくり考えてみます。
丁寧にありがとうございます。
>>537
>イベントってのは
>この処理の後になんか出来るけど具体的に何やるかは知らんし知りたくもない
>だからオブザーバーの方で勝手にやりたいことを登録しといてよ
>俺はもう細かい面倒見ないからこっちに迷惑だけはかけんなよ
>っていう要求がある時に使うもの
例えば、ブックAの処理を軽くする目的で今ブックAで行っている一部の処理をブックBに丸投げしたいとします。
その場合、ブックAはブックBの処理が終わるとか関係なく、続く処理を行いたい。
こういった場合はどのようにしてブックBの処理を行えばいいのでしょうか?
0549デフォルトの名無しさん
2017/03/05(日) 19:04:34.47ID:hrn2oTcjはい。ブックAの方でどうにかできそうです。
>>546
AはBに依存しません。BはAによって書き換えられた内容によってその後の処理が変わります。
今ブックBで処理していることをブックAにさせることで問題は解決できそうですが、
>>548にも書きましたが、
呼び出した処理が完了したかどうかに関わらず次の処理を行いたいという場合に何かいい方法があるのかな、ということが気になりだしました。
ありましたら教えてください。
0550デフォルトの名無しさん
2017/03/05(日) 19:32:52.40ID:HclWmK3V処理の終了とか戻り値は考えないといけないけど、ブックAの方はそのまま処理が進むよ
0551デフォルトの名無しさん
2017/03/05(日) 19:33:03.35ID:u/xcfN5Nイベント関係ねえじゃん
Bのセルに値を書き込むだけのサブプロセスを実行
適当にスクリプトを生成するのが簡単だろう
VBAで並行処理はめんどくさいぞ
0552デフォルトの名無しさん
2017/03/05(日) 19:54:52.11ID:SMp0F4mM0553デフォルトの名無しさん
2017/03/05(日) 19:55:09.39ID:hrn2oTcj今の私には理解できませんが、両者は同じ内容のことを書き込まれているのでしょうか?
参考にさせてもらい今後に活かしたいと思います。ありがとうございます。
今自分で試行錯誤しているのですが、なんかいい感じです。
ブックAで別プロセスブックBを開き、
→wb.Worksheets("Sheet1").Cells(1, 1) = 10でブックBのセルの値を書き換え、
→xlApp.OnTime Now + TimeValue("00:00:00"), "開かれる側OnTime用" でブックAからブックBのマクロの実行予約(予約といいつつ即実行)
→実行予約後すぐにブックAマクロの続く処理が行われる(実行予約したブックBのマクロが完了しなくても)。
これってどうですかね?今までブックAで行っていた一部の処理を、ブックBの"開かれる側OnTime用"というプロシージャに買いておく(このプロシージャはブックAにより予約実行される)。
これで、ブックAはブックBに処理を丸投げできるし、ブックBの処理を待たずに引き続く処理が行えるような雰囲気ですが、何か問題ありそうですかね?
0554デフォルトの名無しさん
2017/03/05(日) 19:57:59.53ID:vDv0kIMMBはAから書き換えられたら直ちに再計算する必要があるのか?
Aの処理が終わってから、又はAの任意のタイミングでBの処理を実施するのではダメなのか?
VBAで並行処理なんて書くのは自殺行為だぞ。
俺がイベント処理を書くときは、必ず真っ先に
Application.EnableEvents = False
をやって、他のイベントは起こらないようにしてEnd Sub直前に
Application.EnableEvents = True
するようにしている。
その上で、Aのイベントの途中でBの処理も実行したい場合は、実行してほしいタイミングで(Application.Run())を使ってBのマクロを呼び出せば良い。
その為に、今Bのイベントに記載してあるマクロを標準モジュールに移して、Aのイベントからの呼び出しとBのイベントからの呼び出しを受けられるようにする必要がある。
少なくともこうすれば、コード画面上でも追跡できるようになるし、大半の課題は突破できるはず。
0555デフォルトの名無しさん
2017/03/05(日) 20:07:30.89ID:7fOisySKブックBのイベントをdisableにして
ブックBのA1セルを更新
ブックAの事後処理をしてから
ブックAからブックBのワークシートチェンジを呼んで
ブックBのイベントをenableにする
もしかするとenableにしたらワークシートチェンジが呼ばれるかもしれない
その場合はブックAからワークシートチェンジを呼ぶのを止める
0556デフォルトの名無しさん
2017/03/05(日) 20:10:29.16ID:hrn2oTcj>BはAから書き換えられたら直ちに再計算する必要があるのか?
いいえ、ありません。Aの任意のタイミングで構いません。
並行処理ってそんな大変なんですね。ド素人が気軽に質問してしまいましたw
Application.Runも検討しましたが、今のところ>>553にも書いた別プロセスで開いたブック内のマクロをOnTimeすることで上手くいっているような感じですがいかがでしょう?
0557デフォルトの名無しさん
2017/03/05(日) 20:10:38.16ID:u/xcfN5NVBAで並行処理したいなら素直にサブプロセス走らせろ
スレッド使いたいなら言語変えろ
0558デフォルトの名無しさん
2017/03/05(日) 20:14:17.44ID:Nxw6KM660559デフォルトの名無しさん
2017/03/05(日) 20:20:00.52ID:vDv0kIMMOnTimeはマジでやめとけ!
Aの処理の途中でいきなり他のマクロが動き出すとか、時限爆弾仕掛けとるようなもんやろ
おとなしく安全なタイミングでApplication.Runしなさい。
0560デフォルトの名無しさん
2017/03/05(日) 20:20:57.80ID:hrn2oTcjこれから出かけるので試せませんが、それで処理の順番は思い通りにできそうだと思います。
ブックBのイベントをEnableしてすぐにブックAのマクロに戻ってくるかどうかはわかりませんが。
>>557
込み入ったハックって>>553のことですよね。
確かにどツボにはまりそうです。既にW
>VBAで並行処理したいなら素直にサブプロセス走らせろ
>スレッド使いたいなら言語変えろ
何度もすいませんが、素直にサブプロセスを走らせるとは具体的にどのようにすればよいのでしょうか?>>551のことですか?
0561デフォルトの名無しさん
2017/03/05(日) 20:23:46.34ID:hrn2oTcjOnTime、よくわからないのですがなんかヤバそうですねW
別プロセスのブックBのOnTimeがAに影響するのでしょうか?
すいません出掛けてきます。
0562デフォルトの名無しさん
2017/03/05(日) 21:00:47.78ID:vDv0kIMMあぁ別プロセスか・・・並行処理の案としては素晴らしいと思うけどちょっと注意
恐らく今はこんな感じだと予想するが
'ブックA
sub Sub Worksheet_Change(ByVal Target As Range)
'〜省略〜
wb.Worksheets("Sheet1").Cells(1, 1) = 1
End Sub
'ブックB
Private Sub Worksheet_Change(ByVal Target As Range)
Application.OnTime Now() + TimeValue("00:00:00.1"), "TimerProc"
End Sub
Sub TimerProc()
'処理
End Sub
・ブックAで2回セルの書き換えが発生するとブックBの処理が2回実施されることになる
・ブックB単体で作業した時にChangeイベントでのデバッグが不可能になる。
といった問題が発生するので・・・次レスへ
0563デフォルトの名無しさん
2017/03/05(日) 21:01:24.11ID:vDv0kIMM続き
こうした方が良いと思います。
'ブックA
Sub Worksheet_Change(ByVal Target As Range)
'〜省略〜
wb.Parent.EnableEvents = False
wb.Worksheets("Sheet1").Cells(1, 1) = 1
wb.Application.Run "TimerStart"
wb.Parent.EnableEvents = True
End Sub
'ブックB
Sub TimerStart()
Application.OnTime Now() + TimeValue("00:00:00"), "TimerProc"
End Sub
Sub TimerProc()
'処理
End Sub
'(ユーザーからのイベントも必要であれば残す)
Private Sub Worksheet_Change(ByVal Target As Range)
TimerProc
End Sub
それではいてらしあー
0564デフォルトの名無しさん
2017/03/05(日) 21:42:07.59ID:XXksFiTo0565デフォルトの名無しさん
2017/03/05(日) 22:09:44.03ID:d0KLgtk9ID:SMp0F4mM
は相手の批判がすなわち
自己承認でないことを知って欲しい。
マウンティングとしても物足りないw
0566デフォルトの名無しさん
2017/03/05(日) 23:41:18.55ID:ZmSjTpIQ>>500
実装してみたけど
引数の1,4.3.5の最大値5にきづられて5555ってのがでてくるみたいです。
0567デフォルトの名無しさん
2017/03/05(日) 23:54:47.43ID:hTcTeYbCどう直せばいいのか俺にはわからんけど
0568デフォルトの名無しさん
2017/03/06(月) 00:23:04.22ID:XmSdBKHbただし20文字以内では改行しない
35文字以上だと「を」でも改行する
こういうのできますでしょうか
0569デフォルトの名無しさん
2017/03/06(月) 00:33:07.18ID:tkAhRfWW0570デフォルトの名無しさん
2017/03/06(月) 00:46:02.32ID:y6DQSA76Replace(msg, "、" ,vbLf )と
len関数で条件分岐するだけじゃね?
0571デフォルトの名無しさん
2017/03/06(月) 00:52:00.64ID:JpbHMjCrスター昆布で句読点を改行コードに変換。
0572デフォルトの名無しさん
2017/03/06(月) 00:52:53.46ID:y6DQSA7621字以上で(、。,.)が同時にでてくるパターンもあるから
前レス却下w
0573デフォルトの名無しさん
2017/03/06(月) 00:52:54.69ID:JpbHMjCr0574デフォルトの名無しさん
2017/03/06(月) 00:58:09.41ID:tkAhRfWW自分でできるようなヒントを示してあげればいいんだから十分でしょ
まあ句読点を改行コードに変換したいわけではないと思うけど
0575デフォルトの名無しさん
2017/03/06(月) 01:01:42.84ID:fdK1iXqS出来ますよ
0576デフォルトの名無しさん
2017/03/06(月) 01:36:28.31ID:nZy/zwfCt = "" '切り取った文字列
w = 0 ' をの位置を覚えておく
Do While Len(s) > 20
c = Left(s, 1) '先頭の1文字を切り取る
s = Mid(s, 2, Len(s))
t = t & c
If c = "を" Then w = Len(t)
If c = "、" Or c = "。" Then
If Len(t) > 35 Then
If w = 0 Then
Debug.Print t
Else 'をで改行
Debug.Print Left(t, w)
Debug.Print Mid(t, w + 1, Len(t))
End If
t = ""
w = 0
Else
Debug.Print t
t = ""
w = 0
End If
Else
End If
Loop
Debug.Print s
End Sub
0577デフォルトの名無しさん
2017/03/06(月) 01:36:45.37ID:nZy/zwfCSub main()
s = "「天は人の上に人を造らず人の下に人を造らず」と言えり。されば天より人を生" & _
"ずるには、万人は万人みな同じ位にして、生まれながら貴賤上下の差別なく、万" & _
"物の霊たる身と心との働きをもって天地の間にあるよろずの物を資り、もって衣" & _
"食住の用を達し、自由自在、互いに人の妨げをなさずしておのおの安楽にこの世" & _
"を渡らしめ給うの趣意なり。"
macro1 (s)
End Sub
0578デフォルトの名無しさん
2017/03/06(月) 01:37:19.08ID:nZy/zwfCちゃんと動かないわ
0579デフォルトの名無しさん
2017/03/06(月) 01:40:53.86ID:nZy/zwfCなんか面倒になってきたんであとは誰かよろしく
0580デフォルトの名無しさん
2017/03/06(月) 01:43:28.80ID:tkAhRfWWでも読むのも疲れるしバグがどこにあるのかも見つけにくいよね
※今日の教訓※
適宜関数を分割して意図の伝わるコードにしましょう
IFのネストは用法・用量を守ってつかいましょう
0581デフォルトの名無しさん
2017/03/06(月) 02:31:43.00ID:XmSdBKHbでも解決されてないー
0582デフォルトの名無しさん
2017/03/06(月) 07:46:19.03ID:MH85UCzw0583デフォルトの名無しさん
2017/03/06(月) 08:18:59.17ID:lfKjhBoG20文字と35文字の制限がなければ単純にsplitで行けるんだがね
for i = 1 to len(buf)
cntLen = cntLen + 1
temp = temp & mid(buf,i,1)
if cntLen >= 20 then
'句読点で改行
cntLen = 0
elseif cntLen => 35 then
'句読点とをで改行
cntLen = 0
end if
next i
指定の文字列見つけたら配列にtemp & vblfを代入
で、最後にjoin
スマホから書くのしんどいわ
0584デフォルトの名無しさん
2017/03/06(月) 08:22:21.21ID:HrLL0BzwL = 0
For I = 1 To Len(S)
C = Mid(S, I, 1)
If ((C = "、" Or C = "。") And 20 < L) Or (C = "を" And 35 < L) Then
Debug.Print C & vbCrLf
L = 0
Else
Debug.Print C
L = L + 1
End If
Next
0585デフォルトの名無しさん
2017/03/06(月) 10:16:56.49ID:Mw50S8+o普通にSaveAsでそれをやると、開いているファイルがxlsm形式からhtml形式に変わってしまいます。
SaveCopyAsではファイル形式を選べず、強引に使うと中身がxlsm形式のまま拡張子だけhtmlに変わったファイルが作成されます。
SaveAsを二回使ってまたxlsm形式に戻すというのは既にやってみて、とりあえず巧く行きました。
しかし、マクロ実行の度に結構待たされることになりますし、いかにもドン臭いです。
何かよい方法はありますか?
0586デフォルトの名無しさん
2017/03/06(月) 10:59:01.02ID:rSmA2qlLSub test()
Dim msg As String, arrChar
msg = "「天は人の上に人を造らず人の下に人を造らず」と言えり。されば天より人を生"
If 35 <= Len(msg) Then
arrChar = Array("、", "。", ",", ".", "を")
ElseIf 20 <= Len(msg) Then
arrChar = Array("、", "。", ",", ".")
Else
Exit Sub
End If
Call 改行挿入(msg, arrChar)
MsgBox msg
End Sub
(続く)
0587デフォルトの名無しさん
2017/03/06(月) 10:59:40.08ID:rSmA2qlLPrivate Sub 改行挿入(buf As String, arr)
Dim i As Long, j As Long
i = 1
Do While i < Len(buf) - 1 '1文字目から順にチェック(該当文字かどうか)
For j = 0 To UBound(arr)
If Mid(buf, i, 1) = arr(j) Then 'i文字目が該当文字ならば、そこにセル内改行を入れる
buf = Left(buf, i) & vbLf & Mid(buf, i + 1)
i = i + 1 '改行記号1文字が増えたので
End If
Next j
i = i + 1
Loop
End Sub
0588デフォルトの名無しさん
2017/03/06(月) 11:27:01.07ID:nZy/zwfC極端なケースで2文字目と33文字目に「を」があった場合どっちで切るのか
あるいは両方とも切るか、切った後の長さでさらに場合分けするのか
0589585
2017/03/06(月) 11:48:49.62ID:Mw50S8+o0590デフォルトの名無しさん
2017/03/06(月) 12:08:57.78ID:LM2QjYuF・InStrのループ
・Len-Len(Replace)
下の方が速いだろうと踏んでたのに、逆に上の方が3倍程度速かったので驚いているなう
0591デフォルトの名無しさん
2017/03/06(月) 12:35:05.15ID:lfKjhBoG35文字目以降の最初の「を」じゃないの?
0592デフォルトの名無しさん
2017/03/06(月) 12:47:52.35ID:HrLL0Bzw> 極端なケースで2文字目と33文字目に「を」があった場合どっちで切るのか
どっちも切らない以外の解釈はないだろ
0593デフォルトの名無しさん
2017/03/06(月) 13:42:35.96ID:nZy/zwfC次の句読点までだと長すぎる行ができるから
その手前の「を」で切ってできるだけ35文字以下にするって解釈したんだけど
0594デフォルトの名無しさん
2017/03/06(月) 14:08:18.32ID:LM2QjYuFどっちも切らないんじゃない?
35字以上になってないんだから
0595デフォルトの名無しさん
2017/03/06(月) 14:48:28.52ID:nZy/zwfC0596デフォルトの名無しさん
2017/03/06(月) 16:34:17.60ID:yZ8uZiZjだとしたらちょいと面倒か?
まあ、逆ループして文字数出して切り取ればいいだけなんだが
もしくはinstrって逆からのやつあったよね、たしか
ただ、ループ変数をいじらなきゃいけなくて気持ち悪い感じにはなるけど
0597デフォルトの名無しさん
2017/03/06(月) 19:05:00.06ID:AmE/TnLRお前の「気持ち悪い」は気持ち悪いものではないから気にすんなw
0598デフォルトの名無しさん
2017/03/06(月) 19:08:14.67ID:yZ8uZiZjそういうもん?
まあ別に必要がありゃやるよ
やらずにすむならやらない方法選ぶけどね
0599デフォルトの名無しさん
2017/03/06(月) 19:28:55.39ID:AYI7ZDZ80600デフォルトの名無しさん
2017/03/06(月) 20:25:58.06ID:7ST8giCc0601デフォルトの名無しさん
2017/03/06(月) 21:54:53.02ID:fdK1iXqS0602デフォルトの名無しさん
2017/03/07(火) 02:00:35.84ID:buHXdcTx短くて良さげだったけど
これだと句読点を含んでるのに20文字以上の行が出来る可能性あるよね
20文字以上になってはじめて出てきた句読点で改行ならこれでいいんだろうけど
0603デフォルトの名無しさん
2017/03/07(火) 05:09:30.00ID:Qa1FiFH0そりゃそう言う仕様だし
>>593 もそうだけど20文字とか35文字以上の行があっちゃダメじゃなくてむしろ >>568 は20文字以下では改行しちゃダメって言ってるんだよ
0604デフォルトの名無しさん
2017/03/07(火) 07:06:09.05ID:xbn3uKP2Yes
0605デフォルトの名無しさん
2017/03/07(火) 09:31:36.01ID:ULjmtl6H1行が20文字以上、35文字以下になるように改行する
ます20文字以上の位置で最初に出てくる句読点で改行
句読点だけでは35文字をオーバーする場合は遡って手前の「を」で改行
それでもだめな場合は書いてないから放置(次の句読点か「を」まで改行できない)
こういうことじゃないの?
0606デフォルトの名無しさん
2017/03/07(火) 09:57:21.36ID:GwnG8V+U20文字以上で句読点による改行
35文字以上で条件に「を」を追加だと思ってた
確かにあの日本語だとどちらともとれる
0607デフォルトの名無しさん
2017/03/07(火) 11:41:01.61ID:8bSuGpO3というかこれじゃいかんのか?と思う。
0608デフォルトの名無しさん
2017/03/07(火) 11:49:44.80ID:ULjmtl6Hそれは内容と目的によるなあ
禁則処理だけだと読みにくくなったりするし
0609デフォルトの名無しさん
2017/03/07(火) 12:17:45.67ID:Zr2bcZDdなんで質問したやつでもないお前が仕切ってんだよw
0610デフォルトの名無しさん
2017/03/07(火) 12:23:03.44ID:klY2+EUE0611デフォルトの名無しさん
2017/03/07(火) 14:33:57.36ID:buHXdcTx>そりゃそう言う仕様だし
君の仕様はそうだけど>>568の仕様は違うだろww
input
“0123456789。0123456789。”
expected
“0123456789。
0123456789。”
0612デフォルトの名無しさん
2017/03/07(火) 14:38:30.96ID:buHXdcTx>1行が20文字以上、35文字以下になるように改行する
>ます20文字以上の位置で最初に出てくる句読点で改行
違うってww目的を考えろよ
“0123456789。0123456789。”
↑の文字列だったとして↓こんな結果が欲しいやつおるか?
“0123456789。0123456789
。”
0613デフォルトの名無しさん
2017/03/07(火) 14:40:03.36ID:buHXdcTx0614デフォルトの名無しさん
2017/03/07(火) 14:50:18.51ID:GwVAHVhm0615デフォルトの名無しさん
2017/03/07(火) 15:42:22.29ID:ZBceu+yH>>568は「ただし20文字以内では改行しない」って書いてるぞ。
0616デフォルトの名無しさん
2017/03/07(火) 16:06:04.62ID:buHXdcTxプログラムでどう処理するかっていう視点で考えてるからそうなる
“ただし”の意味を考えなよ
>>568は結果が満たすべき条件を仕様として書いてる
input
“句読点(、。,.)があるとセル内改行。 ただし、20文字以内では改行しない。 追加の条件として一行が35文字以上だと「を」でも改行する”
↓こうじゃなくて
“句読点(、。,.)があるとセル内改行。 ただし、
20文字以内では改行しない。 追加の条件として一行が35文字以上だと「
を」でも改行する”
↓こう
“句読点(、。,.)があるとセル内改行。
ただし、20文字以内では改行しない。
追加の条件として一行が35文字以上だと「を」でも改行する”
0617デフォルトの名無しさん
2017/03/07(火) 17:31:31.46ID:03VVqkRb> ただし、20文字以内では改行しない。
って、普通は「19文字で改行してる」と表現すると思うが。
0618デフォルトの名無しさん
2017/03/07(火) 17:31:32.61ID:ZBceu+yHよくわからんが、その二つで結果が違ってくる例をあげてくれ。
「20文字以内では...」ってのは文字全体の長さじゃなくて各行の行頭からの長さだよな。
0619デフォルトの名無しさん
2017/03/07(火) 17:34:43.27ID:Iz+KYNb7質問者の回答を待てよ。来ないかもだけど・・・
0620デフォルトの名無しさん
2017/03/07(火) 17:43:30.57ID:ZBceu+yHとりあえず俺のexpectedをあげておく。↓
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
0621デフォルトの名無しさん
2017/03/07(火) 17:46:57.56ID:buHXdcTx仕様を書いた文字列を使っただけで改行位置以外は2つとも文字列の中身は一緒
前者の出力じゃなくの後者の出力が期待結果
0622デフォルトの名無しさん
2017/03/07(火) 17:48:42.20ID:FkDa/RBC0623デフォルトの名無しさん
2017/03/07(火) 17:49:05.76ID:buHXdcTx普通に日本語読んだらそうなる
>>568はユーザーが書いた仕様記述としてはすごくまともな部類
0624デフォルトの名無しさん
2017/03/07(火) 17:59:40.06ID:03VVqkRb>>620の例だと、これが正解だと?
> 吾輩は猫である。
> 名前はまだ無い。
> どこで生れたかとんと見当がつかぬ。
> 何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
0625デフォルトの名無しさん
2017/03/07(火) 18:00:57.47ID:Y8T/JenZ日本語の「以内」は数学的には以下と未満の両方の意味で使うし、
その20文字に句読点を含むかどうかも不明だし、鰹だし、ほんだし
0626デフォルトの名無しさん
2017/03/07(火) 18:01:46.61ID:Y8T/JenZ20文字以内で改行してるから不正解
0627デフォルトの名無しさん
2017/03/07(火) 18:04:28.23ID:03VVqkRbなら、これも不正解だよな
> 句読点(、。,.)があるとセル内改行。
> ただし、20文字以内では改行しない。
0628デフォルトの名無しさん
2017/03/07(火) 18:09:54.71ID:6jXnf7y+お前は正解を知っているのか?
0629デフォルトの名無しさん
2017/03/07(火) 18:15:03.98ID:03VVqkRb0630デフォルトの名無しさん
2017/03/07(火) 18:16:56.27ID:ZBceu+yH「ただし」という接続詞をどう解釈してるんだ?
0631デフォルトの名無しさん
2017/03/07(火) 18:19:04.42ID:buHXdcTxこれ
>吾輩は猫である。名前はまだ無い。
>どこで生れたかとんと見当がつかぬ。
>何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
>
一つ目の句点では改行しない
あとルール通りにやると最後にも改行が入る
0632デフォルトの名無しさん
2017/03/07(火) 18:20:07.63ID:buHXdcTx君がどう解釈してるのかまず説明してよ
0633デフォルトの名無しさん
2017/03/07(火) 18:22:35.06ID:03VVqkRb> 何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
36文字あるんですが
0634デフォルトの名無しさん
2017/03/07(火) 18:26:47.78ID:03VVqkRb> 20文字以内では
が間違っていて
> 句読点(、。,.)があるとセル内改行。
> ただし、20文字以内では
を正しいとするなら、
> 吾輩は猫である。名前はまだ無い。
は間違っていて
> 吾輩は猫である。
> 名前はまだ無い。
が正しいんじゃないですかね
0635デフォルトの名無しさん
2017/03/07(火) 18:27:24.24ID:ZBceu+yHどこにも「を」がないからな。
改行するにもどこで?ってことになる。
0636デフォルトの名無しさん
2017/03/07(火) 18:30:10.34ID:03VVqkRbどこにも「を」がないのに、最後で改行が必要というのは>>568のどの条件になるんですか
0637デフォルトの名無しさん
2017/03/07(火) 18:30:51.76ID:ZBceu+yH君の解釈では、句読点があっても改行しないパターンて具体的にどんなの?
0638デフォルトの名無しさん
2017/03/07(火) 18:32:06.27ID:buHXdcTx1番目のルール
>>634
どうして?
「吾輩は猫である。名前はまだ無い。」は16文字だよ
0639デフォルトの名無しさん
2017/03/07(火) 18:32:31.65ID:03VVqkRbえ、俺に質問?アンカーあってる?
> 句読点があっても改行しないパターンて
改行した結果、一行が20文字以内になる場合
0640デフォルトの名無しさん
2017/03/07(火) 18:33:26.10ID:03VVqkRb「句読点(、。,.)があるとセル内改行。」
は19文字なんですが
0641デフォルトの名無しさん
2017/03/07(火) 18:48:26.92ID:03VVqkRb飽きたんで最終レスしとくが、>>568は普通に読んだら20文字以下では改行しないと読む
そういうレス多数だろ?
お前の普通だけが違うんだよ
0642デフォルトの名無しさん
2017/03/07(火) 18:56:58.74ID:EOptopIzこんなの技術的な問題じゃね―だろ。
工夫の問題じゃね―か。
こういう問題では質問者自身で現時点の案を言わないと意味が無い。
0643デフォルトの名無しさん
2017/03/07(火) 18:58:15.03ID:ZBceu+yH「 ただし20文字以内では改行しない」
の「 20文字」の解釈が違うんだな。
・結果として切り出された部分文字列の長さのこと
・行頭から数えた改行位置のこと
普通は後者だよ
0644デフォルトの名無しさん
2017/03/07(火) 18:58:38.98ID:8bSuGpO3ちなみにここまでのマクロは、もし同じセルに複数回マクロを実行してしまった場合、改行だらけになるのが気になる。
俺ならやらかす。
0645デフォルトの名無しさん
2017/03/07(火) 19:43:22.25ID:bzYWuaSV0646デフォルトの名無しさん
2017/03/07(火) 19:43:34.73ID:cPblCgxW0647デフォルトの名無しさん
2017/03/07(火) 19:44:38.19ID:ZBceu+yH「ただし20文字以内では改行しない」という表現は厳密ではないので、人はこれを補おうとする。
その結果、
・ただし(長さが)20文字以内(の文字列)では改行しない
・ただし20文字以内(の位置)では改行しない
の二通りの解釈が生まれたというわけか。
最初に心に浮かんだ方に囚われてしまうな。
0648デフォルトの名無しさん
2017/03/07(火) 19:50:57.96ID:GwVAHVhmまあセルの内容だと改行が続く場合はひとつにまとめるとか、文章全体の前後の改行は削除するとかあった方がいいかもね
0649デフォルトの名無しさん
2017/03/07(火) 20:09:15.20ID:GwVAHVhm> 「ただし20文字以内では改行しない」
って書いてあるんだから(最終行を除いて)20文字以下の行があっちゃダメでしょ
どっちの方が望ましいかはまた別の話
0650デフォルトの名無しさん
2017/03/07(火) 20:46:55.24ID:buHXdcTxなるほどね
行頭から処理していくっていう手続き的な仕様として捉えるのか
結果として満たすべき宣言的な仕様として捉えるかの違いだね
どっちにも取れる可能性があるっていうのはわかったよ
0651デフォルトの名無しさん
2017/03/07(火) 20:50:55.02ID:buHXdcTxだね
0652デフォルトの名無しさん
2017/03/07(火) 20:59:03.98ID:ZBceu+yH・テキスト内にもともと改行がある
・20文字以外の行を句読点で切る際、複数の句読点があった場合にどれを選ぶかは仕様にない
の二通りの可能性
0653デフォルトの名無しさん
2017/03/07(火) 21:02:58.49ID:ZBceu+yH× 20文字以外の行
○ 20文字を超える行
0654デフォルトの名無しさん
2017/03/07(火) 21:15:31.03ID:GwVAHVhm> ・テキスト内にもともと改行がある
さすがになにも書いてないなら元々の改行は触らないのは常識でしょ
> ・20文字以外の行を句読点で切る際、複数の句読点があった場合にどれを選ぶかは仕様にない
以外?
以上のこと?
20文字以内云々って言ってるので20文字を越えていたら最短で改行すべきだろ
0655デフォルトの名無しさん
2017/03/07(火) 21:27:27.18ID:buHXdcTx>最短で改行すべきだろ
“吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。”(33文字)
をどこで改行するのがいいのか?
俺は一定のセル幅で可読性を高めるために改行したいという要望として捉えたから
1行の文字数が予測可能な文字数におおよそ収まるようにしたいんだろうなと思って上で書いたような理解になったわけよ
予測可能な文字数ってのが20文字とか35文字とかね
勉強になったわ
0656デフォルトの名無しさん
2017/03/07(火) 21:42:36.01ID:xbn3uKP2WHERE
と
HAVING
の違い?
0657デフォルトの名無しさん
2017/03/07(火) 21:49:30.97ID:+RCB0KzLクライアントに問い合わせるか何パターンか作っておいて設定で切り替えるのが正解でしょ
どの仕様が正しいかなんて素人臭い雑談は見苦しいからいい加減やめてよ
0658デフォルトの名無しさん
2017/03/07(火) 21:51:32.85ID:qhKxoT+Rsheet.copy
で新規ブックがアクティブになると
screenupdating=FALSEが無効化されて困ってます。
シートをファイル化する理由はそのシートのマクロもコピーしたいからですが、かなりの数の回すため、画面チラツキが激しすぎて死にそうなのです。
DoEventsやウインドウ最小化とか、無責任なことがマイクロソフトのページに書いてありますが案の定、なんの効果もありません。
助けてください!お兄様たち
0659デフォルトの名無しさん
2017/03/07(火) 21:56:57.25ID:DSkj3bkkユーザーフォームにボタン1とボタン2を配置していて
ボタン1を一回押してないと、ボタン2を押しても反応しないようにするには
どうすればいいでしょうか?
0660デフォルトの名無しさん
2017/03/07(火) 22:06:44.49ID:5OwyJdfm初めはボタン2をプロパティでdisableにしておいて
ボタン1をクリックしたらenableにする
0661デフォルトの名無しさん
2017/03/07(火) 22:20:57.95ID:lul5D9lf処理を分離しているのに実行の順番が前提になっている処理は好ましくない。
ボタン2の処理は「実行はするが失敗として帰る」処理か、
「実行後にボタン1の処理を行ってもボタン1の処理に影響しない」処理が好ましい。
0662デフォルトの名無しさん
2017/03/07(火) 22:23:36.27ID:buHXdcTxいつもの自称プロさんかな
何パターンか作るなんてそれこそ素人だよ
0663デフォルトの名無しさん
2017/03/07(火) 22:34:05.66ID:5OwyJdfmエラーになるボタンをクリックできるのはユーザインタフェース的に良くないんじゃね?
例えばテキスト入力できるようになってて入力したらエラーでクリアされてしまうとか
0664デフォルトの名無しさん
2017/03/07(火) 22:36:28.28ID:xbn3uKP2だけの行為がいつのまにか
「クライアントの出した仕様を業務として実装する」話にすり替わってるんだから、
自称プロ様は違うなw
0665デフォルトの名無しさん
2017/03/07(火) 22:37:14.87ID:Kt+wucdjクラスに値保持させてごにょごにょしたりもできるんじゃない?
0666デフォルトの名無しさん
2017/03/07(火) 22:40:22.92ID:FQlmFR/g1をクリックしたらVisibleの方がユーザーが惑わない
0667デフォルトの名無しさん
2017/03/07(火) 22:47:48.58ID:Kt+wucdj押せなくする、以外ならTrueでなければ処理しないって言う風にするだろうからエラーにはならないんじゃね?
0668デフォルトの名無しさん
2017/03/07(火) 22:51:28.74ID:5OwyJdfm実行はするが失敗にする
と書いてある
ユーザに失敗した事をフィードバックしないと
ボタンクリックしても何が起きたかわからない
0669デフォルトの名無しさん
2017/03/07(火) 22:53:35.05ID:5OwyJdfmボタンが現れる方が戸惑うのではないか?
人によるからアンケートとかとらないとなんとも言えないけど
0670デフォルトの名無しさん
2017/03/07(火) 23:05:23.96ID:Qa1FiFH0> 俺は一定のセル幅で可読性を高めるために改行したいという要望として捉えたから
ぼくがかんがえたさいきょうのしよう
はどうでもいい
0671デフォルトの名無しさん
2017/03/07(火) 23:18:46.78ID:Kt+wucdj失敗=エラーなのか
実行できないことを知らせるだけならいくらでもやりようあるんじゃね?
0672デフォルトの名無しさん
2017/03/07(火) 23:19:30.54ID:lul5D9lfエラーとしてフィードバックする時に「ボタン1を先に押してね」と誘導すればいい。
ボタン2が表示されているという処理外の挙動を根拠に「ボタン1は押されたはず」という先入観で処理を組むのはよろしくない。
ボタン2の処理に必要な情報が揃っている事をボタン2の処理内でチェックさせるのがベストかなぁ。
0673デフォルトの名無しさん
2017/03/07(火) 23:24:03.58ID:5OwyJdfmボタン2をdisableにする方法でも
ボタン1がクリックされたかはチェックできる
0674デフォルトの名無しさん
2017/03/07(火) 23:25:03.91ID:5OwyJdfmわざわざクリックしたのにボタン1をクリックしろというユーザにとってムダな操作をさせるのは
ユーザエクスペリエンス的に良くないんじゃね
0675デフォルトの名無しさん
2017/03/07(火) 23:32:58.28ID:lul5D9lfボタン1を押した後でボタン1の処理を手作業で全て無かったかの様に加工してもボタン2は押せるから、
ボタン2の表示状態だけで判断するのは非常に危険。
ボタンの表示/非表示はユーザーを誘導する為だけに切り替えた方が良く、処理に直接影響するのは好ましくない。
0676デフォルトの名無しさん
2017/03/07(火) 23:36:16.33ID:LIbWykij0677デフォルトの名無しさん
2017/03/07(火) 23:43:15.57ID:5OwyJdfmだからチェックすれば良いんじゃね?
disableにするのとチェックするのは両立できる
0678デフォルトの名無しさん
2017/03/07(火) 23:51:05.41ID:xbn3uKP2っていう主張は一般的にはどうなんだろうね。
狙え、撃て!
撃て!狙え
0679デフォルトの名無しさん
2017/03/07(火) 23:56:59.02ID:lul5D9lfなんかもうヤケになってないか。自分で言っている事分かってないだろ。
>>678
発射した後に誘導するミサイルとかありますしおすし。
小銃の話でも、制圧射撃みたいに狙わずに行う射撃もある。
「狙わないと撃てない」という発想だと戦術が割と限定される。
0680デフォルトの名無しさん
2017/03/08(水) 00:06:49.04ID:swHBt9ge- flag
+ (get) CanDoSomething2()
return flag
+ DoSomething1()
set flag true
+ DoSomething2()
if not CanDoSomething2 raise error
else ...
+ (event) CanDoSomething2Changed()
こういうクラスを書いて後は適当にバインド処理を書いておしまい
0681デフォルトの名無しさん
2017/03/08(水) 00:09:38.66ID:UPHdaWjZそりゃ要件によるだろ
0682デフォルトの名無しさん
2017/03/08(水) 00:31:34.57ID:dPVIbm850683デフォルトの名無しさん
2017/03/08(水) 05:35:35.98ID:G0oe8ylDそっちこそ
ボタン2の処理を実行出来なくなる状態になったらdisableすればいい
今回の件はその状態がボタン1をクリックしてないということだけだ
0684デフォルトの名無しさん
2017/03/08(水) 05:37:14.13ID:G0oe8ylD目的が違う例を挙げてどうする
課題が違えばアルゴリズムが変わるのは当然
何にでも対応できるプログラムなんてないよ
0685デフォルトの名無しさん
2017/03/08(水) 05:39:34.68ID:G0oe8ylDそれをいったら
なんでも要件次第だな
順序に依存するのが良いとか悪いとかも要件次第
0686デフォルトの名無しさん
2017/03/08(水) 05:53:21.02ID:SfsR/ULtButton1をToggleButtonにするのはダメなのか?
If ToggleButon1.Value = True Then
ボタン2をイネーブルにする or ボタン2.Visible = True
0687デフォルトの名無しさん
2017/03/08(水) 06:01:48.40ID:G0oe8ylD発射した後に誘導するにしても
少なくとも射程距離内になければ目的を達成できない
射程距離内に入るにはターゲットが決まっていて
射程距離内に入るという処理が必要
処理の順序があるのは当然のこと
発射しました→失敗しました
では弾薬が無駄になる
繰り返せば弾薬が切れて目的を達成できなくなる
0688デフォルトの名無しさん
2017/03/08(水) 06:05:32.78ID:G0oe8ylDその前提条件が全て満たされた時にユーザに対して
その事を知らせる→enableにする
複数の条件のどれかが満たされなくなったらdisableにする
0689デフォルトの名無しさん
2017/03/08(水) 06:24:29.95ID:mVK9qmox目的さえ達成できればいいんだよ
0690デフォルトの名無しさん
2017/03/08(水) 06:29:16.74ID:AVco/m+gお前の中ではなんかすごい自己イメージが出来上がってるんだろうけど
はたから見るとVBA触った事ないって丸わかりでまぬけにしか見えんで
0691デフォルトの名無しさん
2017/03/08(水) 06:30:50.52ID:G0oe8ylD実現方法は複数あるだろうけど
ユーザからみたら使い勝手が良い悪いはあるだろう
ユーザの評価も分布があるだろうから一つには定まらないけど
多数が良いと評価するものと比較的少数にしか評価されないものはある
0692デフォルトの名無しさん
2017/03/08(水) 06:31:23.37ID:G0oe8ylDお前の評価なんか知ったことではない
0693デフォルトの名無しさん
2017/03/08(水) 06:38:32.00ID:AVco/m+g0694デフォルトの名無しさん
2017/03/08(水) 06:42:37.58ID:swHBt9geそれでいいよ
業務アプリに耐えうる構造
1ボタンを押したら2ボタンを活性に〜なんて素人臭いバグ誘発コードはプロが書いちゃダメだよね
>>690
ど素人丸出しなのはお前だよ
シートばっかりいじってないでUIデザインパターンぐらい勉強したらどうだ?
0695デフォルトの名無しさん
2017/03/08(水) 06:56:18.61ID:G0oe8ylDユーザがそれを希望したらどうするの?
その仕事は受けないの
0696デフォルトの名無しさん
2017/03/08(水) 07:09:36.78ID:mVK9qmox希望されたときに考えればいい
0697デフォルトの名無しさん
2017/03/08(水) 07:48:20.06ID:uLOAniEg場所をわきまえろよ
0698デフォルトの名無しさん
2017/03/08(水) 07:52:18.60ID:swHBt9geまずは要件の確認と交渉だな
業務でやるなら普通はこういう会話が発生する
客「ボタン1を押したらボタン2を押せるようにしてください。ボタン1のイベントでボタン2を活性にすればできると思います
自「なぜ、その機能が必要なのですか
客「ボタン1の処理の結果として、ボタン2の処理の前提条件が揃うものと想定しています
自「その前提条件が成立しているかどうかを直接問い合わせて、それをボタン2の活性に反映したほうが安全で保守もしやすいですよ
客「なるほど。ではそうしてください
自「活性の切り替えではなく表示の切り替えもできますが
客「活性の切り替えでいいです
取りつく島もないなら仕方がないが
そういう怠惰な客は細かい実装まで気にしない事が多いな
その場合は曖昧な要件の中で取れる最善を尽くせばいい
裁量権全くない多重下請けの下っ端ならまあうん心を強く持っていこう
0699デフォルトの名無しさん
2017/03/08(水) 08:04:32.43ID:+hgaWvwSどっかよそでやってくれ
0700デフォルトの名無しさん
2017/03/08(水) 08:09:06.66ID:D4P4iCUIプロなんて自称にすぎない
他人に認められてるかどうか
自分でプロとか言い出すのは認められたいのに認められてないからだな
0701デフォルトの名無しさん
2017/03/08(水) 08:11:46.31ID:O/leY4qoユーザーの使い勝手とコードの安全性は別の話だろ
0702デフォルトの名無しさん
2017/03/08(水) 10:23:52.35ID:Xk2u3PeNググればすぐわかることだし、>>659への最適な回答は、ググる用のキーワードを答えることだろう。
vba フォーム コマンドボタン 無効
辺りでどうぞ。
0703デフォルトの名無しさん
2017/03/08(水) 11:56:55.21ID:+hgaWvwS99%以上を占めている。
に1000円
0704デフォルトの名無しさん
2017/03/08(水) 12:11:31.69ID:FPm0HtVT俺も1000円レイズ
0705デフォルトの名無しさん
2017/03/08(水) 12:18:09.92ID:LcYDafnb0706デフォルトの名無しさん
2017/03/08(水) 12:42:34.49ID:4tJLN9pP俺は知恵が無い質問には答えない。
何故ボタンを押しても反応しないようにしたいのか背景を言わないから独りよがりの糞仕様となる。
一方、自分の業務の不必要な背景を言う奴もいる。
実際のシート名とか実際に使用する顧客番号とかを使って質問して、回答者に作らせたい意図がミエミエなのも萎える。
0707デフォルトの名無しさん
2017/03/08(水) 12:43:45.37ID:MpcJ8pvA客(隣に座ってるパートのオバチャン)だろお前の場合はw
0708デフォルトの名無しさん
2017/03/08(水) 12:58:01.05ID:eawgrtGt駄目な客の見本だな
提示すべきは、真の要求(要求仕様)であって、実現方法ではない
0709デフォルトの名無しさん
2017/03/08(水) 13:08:19.33ID:O/leY4qoまあ、あの程度か出来んのだから質問の仕方もわからんだろう
問題はコミュニケーションとる気がないこと
0710デフォルトの名無しさん
2017/03/08(水) 13:10:22.80ID:+hgaWvwS理想はそうかもしれんが、実現の道筋が見えなくて、とりあえずの方法を提示するしかないことも多い。
「この方程式の解がほしい」と「この計算をしてほしい」の違いというべきか。
0711デフォルトの名無しさん
2017/03/08(水) 13:31:16.56ID:eawgrtGt> 理想はそうかもしれんが、実現の道筋が見えなくて、とりあえずの方法を提示するしかないことも多い。
このスレに限らず、いろんなスレでそんな質問が氾濫してる
ある問題を解決したい
↓
なにか解決方法を考え出す(←間違ってたり、無駄だったり、全然別のよりよい方法があったり)
↓
その解決方法をプログラミングするにあたって、エラーが発生したり質問が出たりする
↓
で、それを質問するが、そもそもの「俺の解決法」の時点でダメダメ
0712デフォルトの名無しさん
2017/03/08(水) 13:43:51.91ID:+hgaWvwS?
0713デフォルトの名無しさん
2017/03/08(水) 13:49:02.06ID:eawgrtGt何が「?」なのか?なんだけど、この本の内容みたいなことね
興味があったら読んでみて
『ライト、ついてますか―問題発見の人間学―』
http://www.kyoritsu-pub.co.jp/bookdetail/9784320023680
0714デフォルトの名無しさん
2017/03/08(水) 14:04:50.36ID:+hgaWvwSどうしてそう話題と無関係なことを言い出すのか?
0715デフォルトの名無しさん
2017/03/08(水) 14:20:02.78ID:eawgrtGt俺は>>568も>>659もこのパターンの質問だと思うが、無関係と思うならそれでいいよ
0716デフォルトの名無しさん
2017/03/08(水) 14:31:21.61ID:Qhd5xbM+まあ、行き違いはどこの業界にもあるもんだよ
http://arison.jp/wordpress/wp-content/project_comedy_l.gif
0717デフォルトの名無しさん
2017/03/08(水) 15:01:22.66ID:Uljnsbubこれ完全同意
0718デフォルトの名無しさん
2017/03/08(水) 15:13:50.97ID:Qb30CADF誉められたいの
認められたいの
そこ場合こうするの
>>713
承認します
0719デフォルトの名無しさん
2017/03/08(水) 17:21:28.67ID:3Gnt/ka5.OnAction に引数を渡すのにSingleQuoteでくくれば
良いことは分かったのですが、RangeObjectを渡す方法
が分かりません。そもそも無理な話?
0720デフォルトの名無しさん
2017/03/08(水) 17:44:40.78ID:FPm0HtVTrange.addressで文字列に変換して送るしかないかもなー
確実に動作させるならブック、シート名も必要なので、range.parent.name
range.parent.parent.name
で頑張るしか‥
0721デフォルトの名無しさん
2017/03/08(水) 17:52:43.61ID:3Gnt/ka5やっぱり、、ですよね?
Sub Proc側でテキストで受けるしか、、、
0722デフォルトの名無しさん
2017/03/08(水) 18:07:23.48ID:8HRrOhiJあるか。質問者もなんで議論に参加して「私の意図はこうこう、こういうことで」
って発言しないんだよ。
外野だけがあーだこーだ言っても始まらんっつーの
http://www.dotup.org/uploda/www.dotup.org1179366.jpg
0723デフォルトの名無しさん
2017/03/08(水) 18:24:58.87ID:eawgrtGtまあ、その図の「顧客が説明した要件」というのが、実は真の要件じゃないことが
ままあるってのが俺の主張なんだけどね
0724デフォルトの名無しさん
2017/03/08(水) 18:39:38.50ID:MpcJ8pvAいやwその絵がそう言ってんだけどw
何が「実は」だよwww
0725デフォルトの名無しさん
2017/03/08(水) 19:24:58.38ID:VZtOnmtcOnActionにこだわる理由は?
Clickイベントなど代替案は不可なのか?
0726デフォルトの名無しさん
2017/03/08(水) 19:37:13.62ID:xxKvaJWhこの動画一つで皆がわからなかった真相が明らかに!!!
http://blogs.yahoo.co.jp/anti_mm_eq010/17942365.html
0727デフォルトの名無しさん
2017/03/08(水) 19:41:14.06ID:LcYDafnb0728デフォルトの名無しさん
2017/03/08(水) 19:47:30.23ID:ISgA6Zgl0729デフォルトの名無しさん
2017/03/08(水) 19:51:26.43ID:NdsLBs1K0730デフォルトの名無しさん
2017/03/08(水) 21:20:35.53ID:UljnsbubVBEX
でも高階関数使いたいなら他の言語使ったほうがいい
0731デフォルトの名無しさん
2017/03/08(水) 21:44:55.24ID:ISgA6Zglこんなんあるんだね、ありがとう。
家でなく会社で使いたいんよ。
会社だとそういう部署じゃないから、コンパイラ入れるだけでも申請がいる。ある時間以上かけて作られたプログラムは買い取らないといけないとか何とかで、
それがめんどくさいからかプログラムを書くこと自体が好ましくない雰囲気がある。
マクロならグレーゾーンになってるのでやってよしというわけ。おかしな話だわ。
0732デフォルトの名無しさん
2017/03/08(水) 21:47:25.79ID:dPVIbm85「高階関数」というからラムダ式に関係しているらしきものを見てみた
https://github.com/rubberduck203/VBEX/blob/master/test/TestLambda.bas
Dim f As Lambda
Set f = Lambda.FromProper("(x) => x * x")
BatteryApplicable.Battery f, 2, 4
なんだこれは?文字列で式を渡すのか?
0733デフォルトの名無しさん
2017/03/08(水) 21:49:24.62ID:dPVIbm85会社が買い取ったプログラムを資産計上するとかそういうの?
0734デフォルトの名無しさん
2017/03/08(水) 22:30:55.92ID:AxVYdWMe買い取るって言うのはよくわからんけど本来社内製作のソフトも資産計上する必要あるから
最近うちでもうるさくなってきたわ
0735デフォルトの名無しさん
2017/03/08(水) 22:40:16.73ID:dPVIbm85なるほど。
それが面倒だったら、「大部分はOSSからのコピペですから」、とか言っておけばいいのか。
0736デフォルトの名無しさん
2017/03/08(水) 22:41:27.12ID:ISgA6Zgl>>734
そう、まさにそれ。
資産計上しないと脱税になりかねないらしい。
>>732
あー、やっぱりそっち系が正解だったのか?
自分も途中までは作ってたんだよ。
文字列渡してparseして関数名と引数を得て、Application.Runするという。
逆ポーランドだけならうまく回ったけど、
中置関数やif_then_elseを取り込もうとした辺りでめんどくさくなって止めた。
dllだかを使ってやられてる方が既にいたけど、
上の事情で何も手を加えてないエクセルしか使えないという条件でやろうとしたら、
Application.Runしかないかなと思った。
VBAで、あのVBEのエディタの書いてあるのを弄れれば何でも出来そうだけど、無理だよね?
0737デフォルトの名無しさん
2017/03/08(水) 22:53:03.41ID:G0oe8ylD給料払ってるから原価とか販管費とかになりそうな気もするけど
0738デフォルトの名無しさん
2017/03/08(水) 23:14:24.99ID:dPVIbm85自分は絶対にしないな
0739デフォルトの名無しさん
2017/03/08(水) 23:23:43.30ID:VZtOnmtc昔はC++にラムダがなくて仕方なく疑似ラムダを使っていた
実装もパースよりは手軽だ
0740デフォルトの名無しさん
2017/03/08(水) 23:30:48.67ID:dPVIbm85式典か
0741デフォルトの名無しさん
2017/03/08(水) 23:49:08.95ID:Uljnsbub>資産計上しないと脱税になりかねないらしい。
個人が自分の作業効率上げるためのスクリプトレベルでそんなん言い出したらきりがないよ
税務署のうんこルールを全部真に受ける必要ない
0742デフォルトの名無しさん
2017/03/09(木) 00:01:04.17ID:x6aOWZGA1. Python + xlwings
少し制限はあるけどPythonからExcel扱えるし
VBAからPythonのコードを呼んでセルを編集したりもできる
配布じゃなく個人用途なら便利
2. Ruby+Roo (or spreadsheet)
Rooは読み取りアクセス専用(Spreadsheetは書き込みアクセスもできるが機能が限定的)
Excelデータを加工して別のCSVを吐き出すような処理に最適
同じようなライブラリはどの言語でもそこそこある
3. VSTO
別のユーザーへの配布が必要なら現実的にはこれしかない
0743デフォルトの名無しさん
2017/03/09(木) 00:15:26.16ID:lh6pHjRm0744デフォルトの名無しさん
2017/03/09(木) 00:36:18.07ID:44uIt3ykうちなんか、プリンタドライバ入れるだけで申請だぜ。
イェイ
0745デフォルトの名無しさん
2017/03/09(木) 00:38:34.50ID:44uIt3ykプログラムの不具合直してくれ→申請
いやいや、不具合なんだからタダで直せよwww
0746デフォルトの名無しさん
2017/03/09(木) 00:46:21.02ID:nnBlrAfaそれは当然
システム管理者が状況を子細に把握してないとトラブルに素早く対処できないから復旧が遅れて業務に支障が出る
0747デフォルトの名無しさん
2017/03/09(木) 01:03:52.42ID:44uIt3yk0748デフォルトの名無しさん
2017/03/09(木) 01:30:19.36ID:x6aOWZGAこれは無駄だね
トラブっても自分で対応するなら勝手にやればいい話
プリント業務がクリティカルなら別だけど
>いやいや、不具合なんだからタダで直せよwww
これは不具合と呼んでる物の中身による
0749デフォルトの名無しさん
2017/03/09(木) 03:11:12.90ID:LIvrhHW5各種DBにSQLを投げるツールを作っていて、指定行のSQLに
いろいろ条件を変えてコマンドを投げるのにポップアップメニュー
を使いたいなあ、と思い、、、各列の設定値を読み込むのに
右クリック列からのOffset位置(実際は表頭タイトルで判定)
を使うのにRangeObjectだと都合が良かったので、、先に
そのような形でSubProcを作っておりましたので、Selection
ChangeからBeforeRightClickのPopUpに切り替えた際に
躓きました。(右クリック位置が表側ではなかったので、、)
最終的に右クリックからのイベントの時は範囲引数をOptional
にして省略した形で投げて、表側位置を決め打ちで取得する
という方法で逃げました。
ただVBAの機能制限としてOnAction引数に関する正しい認識
を理解しておきたいなぁと思い質問した次第です。
0750デフォルトの名無しさん
2017/03/09(木) 03:59:51.12ID:x6aOWZGARangeのAddressを渡して渡されたほうで文字列をパースすることはできるんじゃない
面倒くさいけど
0751デフォルトの名無しさん
2017/03/09(木) 04:30:43.10ID:jhj5IKei.Address(, , , True)で渡して Evaluate()で戻すだけだぞ
0752デフォルトの名無しさん
2017/03/09(木) 05:03:20.86ID:o12uNzG/本題から逸れるが、名前付き引数使おうか。
0753デフォルトの名無しさん
2017/03/09(木) 05:21:59.59ID:jhj5IKeiそだね 分かりにくいもんな 気を付けるよ
0754デフォルトの名無しさん
2017/03/09(木) 06:54:04.52ID:K/l9Si6sお前の業務がその程度って思われてるってことだろ
0755デフォルトの名無しさん
2017/03/09(木) 06:55:39.11ID:Cagv9mDq今は文字数をカウントして
for i = 1 to Len(文字列)
if mid(文字列,i,1)="<" then flag = true
if mid(文字列,i,1)=">" then flag = false
if flag = true then 新文字列=新文字列 & mid(文字列,i,1)
next
と1文字ずつ処理するしか書けず時間がかかりすぎます
<>に囲まれた文字数が何文字であれ、一気にリプレイスで削除するなどは出来ませんか?
0756デフォルトの名無しさん
2017/03/09(木) 07:08:54.45ID:eRv4aOzH家で書いてるプログラムと会社でのとの峻別ってどうしてる?
家ではVBA以外で書いてるのだが、仮に会社のPCにそのコンパイラ入れられたとして、
家で書いたのを会社のものと思われたりするのは困る。
なので、言語分けてるのは止むなしとも思ってる。
0757デフォルトの名無しさん
2017/03/09(木) 07:24:55.63ID:F37fUyQp家の自分と会社の自分を峻別すればいい。
つまり家で書いたコードはOSSとして公開。ちゃんとライセンスもつける。
会社では一ユーザーとしての立場で。もちろん業務と直接関わるコードは混ぜないようにする。
0758デフォルトの名無しさん
2017/03/09(木) 07:26:10.89ID:K/l9Si6s> 文字列から<>に囲まれた部分を削除するのに出来るだけ速い処理はどうするのがよいでしょうか。
そのプログラムだと<>に囲まれてない部分を取り出してるみたいだが?(しかも<が含まれるし)
> <>に囲まれた文字数が何文字であれ、一気にリプレイスで削除するなどは出来ませんか?
VBA だけでやるなら
・InStr で < を探してそこまで出力
・ > を探してそこまで読み飛ばし
を繰り返せばそれなりに速くなると思う
一気にやりたいなら
VBA 正規表現
でググれ
0759デフォルトの名無しさん
2017/03/09(木) 07:44:56.02ID:Cagv9mDqif flag = false then
と書き間違えた
0760デフォルトの名無しさん
2017/03/09(木) 08:11:09.85ID:rbE9k3dA試してないけど一文字ずつ配列に入れて条件で飛ばして最後にjoinとか
文字列の結合で一番早いのはmidステートメント使ったやり方だと思う、自分が調べた中では
0761デフォルトの名無しさん
2017/03/09(木) 08:29:14.83ID:K/l9Si6sそれだと今度は > が含まれるがいいの?
細かいこと言うと flag なんて言う意味のとりにくい名前がよくない
今の方法でやるなら
Dim 括弧の中にいる As Boolean
括弧の中にいる = False
For i = 1 to Len(文字列)
Dim 文字 As String
文字 = Mid(文字列, i, 1)
Select Case 文字
Case "<": 括弧の中にいる = True
Case ">": 括弧の中にいる = False
Case Else
If Not 括弧の中にいる Then 新文字列 = 新文字列 & 文字
End Select
Next
0762デフォルトの名無しさん
2017/03/09(木) 08:51:04.72ID:nnBlrAfa2chのバグか?NGワード確認スレにすら書き込めないんだが
0763デフォルトの名無しさん
2017/03/09(木) 08:54:17.13ID:nnBlrAfaカッコも消すのか残すのかわからないけど、とりあえず消す方
"aa<bb>cc" → "aacc"
1文字ずつ見るよりは速いと思う
ただし < と > の対応が崩れてるとちゃんと動かない
Sub test1()
次に、中だけ消してカッコは残す方
"aa<bb>cc" → "aa<>cc"
Sub test2()
なぜか書き込めないので、本体はここに置いた
http://climbi.com/b/9613/0
0764デフォルトの名無しさん
2017/03/09(木) 11:56:52.59ID:F37fUyQp0765デフォルトの名無しさん
2017/03/09(木) 12:28:35.44ID:+6THsUCX0766デフォルトの名無しさん
2017/03/09(木) 13:09:20.11ID:3GDDHFuKあの画像何回か見たことあるけど、そういう意味だったのかー
気づかなかったわ
さすがプロ様
0767デフォルトの名無しさん
2017/03/09(木) 13:11:04.95ID:dWDPbvt8遅いのは描写更新の頻度が多すぎるからな気がする。
screenupdating=false
文字列置換処理
screenupdating=true
とか
arr=range(″A1:D100″).value
文字列置換処理
range(″A1:D100″).value=arr
とかやっているだろうか?
0768デフォルトの名無しさん
2017/03/09(木) 13:29:51.01ID:3GDDHFuK遅い原因だけど、文字列連結回数が多いからだと思う
その高速化方法:https://www.moug.net/tech/exvba/0140045.html
0769デフォルトの名無しさん
2017/03/09(木) 13:31:14.22ID:3GDDHFuK0770デフォルトの名無しさん
2017/03/09(木) 16:40:47.97ID:AWOaBPqqとかだと期待する結果はどうなのか
0771デフォルトの名無しさん
2017/03/09(木) 17:44:48.97ID:12AmJuBIsample = "aaa<br>bbb<br>ccc<br>ddd<breee<brfff>ggg>"
Worksheets.Add
Range("A1") = sample
Cells.Replace What:="<*>", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Debug.Print Range("A1").Value
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
計ってないけどこれが一番はやいんじゃないかな
>>770の対処はないけど
0772デフォルトの名無しさん
2017/03/09(木) 19:25:28.35ID:kw2HRjPyそれを考えるとクソほどめんどくさいな
0773デフォルトの名無しさん
2017/03/09(木) 19:25:29.11ID:afDckXZpそういう例外まで含めると普通に開発環境を開発するような規模になってくるから、
とりあえず「想定された入力」に対して「想定された出力」が返る事を主眼に置いた方がいいんじゃないかな
だからまず「想定された入力」のパターンを全部公開してもらいたい
0774デフォルトの名無しさん
2017/03/09(木) 19:29:03.44ID:NMunja2Pなんだそれwしょぼwwww
0775デフォルトの名無しさん
2017/03/09(木) 19:29:07.38ID:F37fUyQp詳しく見たことないけど ariawase は素のExcelだけで使えたかも
くぐれば見つかる
0776デフォルトの名無しさん
2017/03/09(木) 19:38:42.24ID:kw2HRjPyあんまりやりたくないけど
0777デフォルトの名無しさん
2017/03/09(木) 19:54:00.59ID:afDckXZp括弧が不完全だった場合どうするのとか、括弧が複数回続いている場合の処理はどうするのとか
特定の文字が入っていたら別の処理をさせたいとか、目標にする文字を"<"">"から変えたいとか
文字列コマンド型で万能を目指すと酷いことになるからとりあえずxmlで妥協してくださいおねがいします(トラウマ
0778デフォルトの名無しさん
2017/03/09(木) 20:01:46.02ID:F37fUyQp0779デフォルトの名無しさん
2017/03/09(木) 20:03:06.73ID:LA1Z4pgPネストをカウントしとけばいいだけでしょ
0780デフォルトの名無しさん
2017/03/09(木) 20:09:14.67ID:AWOaBPqqこれはどうなるのが期待する結果だろうか
<以降は削除するのかしないのか
0781デフォルトの名無しさん
2017/03/09(木) 20:10:18.34ID:J4siqdXV入れ子になったパターンを手書きコードで解決するときの定石ね
0782デフォルトの名無しさん
2017/03/09(木) 20:12:11.55ID:NMunja2P参考ググりんぐタイム:38分58秒
0783デフォルトの名無しさん
2017/03/09(木) 20:19:36.16ID:kw2HRjPyめんどくさそうだなあって
>>780
それはないでしょ
一文字ずつやるにしても>の有無がフラグになるし、まとめてやるにしても囲まれてないと処理しないじゃん
0784デフォルトの名無しさん
2017/03/09(木) 20:47:06.20ID:2fqMXIUX0785デフォルトの名無しさん
2017/03/09(木) 20:47:09.64ID:i/mBbb1zIf (シート1で出てきたセルの2つ右をセレクトし、Activeセルの値を取得
Find (取得した値を、シート2のA列で検索
IF (値が一致したら、セルの値を置換
このような入れ子にしたいのですが
二つ目のFindで Set a =...Find の文を入れた時点でエラーが出ます
「オブジェクト変数または With ブロック変数が設定されていません。」と出ますが
Set a の変数aは宣言しているし、変数名も間違っていないし 上で動いた構文と全く同じように書いたので構文は間違っていないはず・・・
エラーとして出るのは
If FoundCell.Address = FirstCell.Address Then の文で
二つ目のFindの文を入れなければ普通に動きます
Findの入れ子ってもしかして出来ない??Setが悪さをしてる???IFの入れ子がおかしい??
仕事で必要になり必死に調べてプログラムしたのですが
つい先日勉強し始めたばかりの初心者で、どうしてもわかりません
家からメールにログインできず、元のデータ持ってこれませんでした・・・
どうか知恵を貸してください
お願いします
0786デフォルトの名無しさん
2017/03/09(木) 20:59:34.74ID:Tf6YnCrMそれって本当に入れ子なの?
とりあえず2番目のIfで何の真偽を対象にしているのかわからない
> If (シート1で出てきたセルの2つ右をセレクトし、Activeセルの値を取得
0787デフォルトの名無しさん
2017/03/09(木) 21:18:20.68ID:i/mBbb1zネットのプログラムを色々ひっぱったのですが、元はこのプログラムです
Dim FoundCell As Range, FirstCell As Range, Target As Range
Set FoundCell = Cells.Find(What:="田中")
If FoundCell Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
Set FirstCell = FoundCell
Set Target = FoundCell
End If
Do
Set FoundCell = Cells.FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
Set Target = Union(Target, FoundCell) ←これは元のプログラムはっつけただけなので、特に必要はないです
@ここで見つかったセルの横をセレクトし、二つ目のFind使用
(ここでは複数選択じゃないので、上と同じIFを書くつもりでしたが必要ないのかも)
End If
Loop
Target.Select
MsgBox Target.Count & "件見つかりました"
End Sub
大体こんな感じのプログラムです。
投稿したら字下げ消えるんですね、見づらいと思います。ごめんなさい。
0788デフォルトの名無しさん
2017/03/09(木) 21:19:19.62ID:Tf6YnCrMもしかして最初の4行全体がひとつの式になっているのかな?
式の中の = は代入文ではなくて等式とみなされる。というか文を式の中に入れられない。
(つまり = ではなくて == )
だから Set a = b が式中にあるとエラーになるよ。
0789デフォルトの名無しさん
2017/03/09(木) 21:22:34.33ID:WNhcxEY1ソースをここに貼りたい時はタブや半角スペースを全角スペースに置換してから投稿しましょう
このようにインデントが消えませんし、そのままVBEにコピペできます
あるいは、ソース共有サイトを利用します
Sub
For
IF
End IF
Next
End Sub
0790デフォルトの名無しさん
2017/03/09(木) 21:28:06.83ID:Tf6YnCrMなるほど。
で、それをどう改変したらエラーが出る?
0791デフォルトの名無しさん
2017/03/09(木) 21:28:53.55ID:no8PqT660792デフォルトの名無しさん
2017/03/09(木) 21:30:21.14ID:no8PqT66もしくはオブジェクト代入ごとにtypenameをプリント
0793デフォルトの名無しさん
2017/03/09(木) 21:31:23.74ID:Tf6YnCrM>>788のコメントは忘れてね。
上の方で再帰処理が話題になってたから「入れ子」と聞いて勘違いした。
0794デフォルトの名無しさん
2017/03/09(木) 21:43:37.25ID:x6aOWZGAExcelでプログラミングしてるレベルなのに
そんな低いレイヤーの処理をいちいち意識しないところになぜ追い込むの?
0795デフォルトの名無しさん
2017/03/09(木) 21:54:39.35ID:q6fawGlW<が出てきても
>か最後か判るまでは処理が決まらない
って事
0796デフォルトの名無しさん
2017/03/09(木) 22:11:02.48ID:j4+ozjFjSet FoundCell = Cells.FindNext(FoundCell)
ここでNothingの場合に次のFoundCell.Addressでエラーになってんじゃない?
0797デフォルトの名無しさん
2017/03/09(木) 22:14:07.03ID:i/mBbb1z完全に詰まってしまったのでアドバイス助かります
思い出しながらエラーが出たところまで編集しました(簡素にですが
これじゃわからん状態なら、明日元のデータを持ってきます
全体の構文的には間違っていないんでしょうか...
http://climbi.com/b/9622/0
二つ目のFindを別のサブプロシージャに入れてCallで呼び出しても、全く同じエラーになります
単体で動かすと普通に動きました
0798デフォルトの名無しさん
2017/03/09(木) 22:14:46.42ID:no8PqT66ごめん、日本語読めてなかったわ
たぶんスルーだと思うけどな
0799デフォルトの名無しさん
2017/03/09(木) 22:26:46.20ID:i/mBbb1z詳しくないので逸れた意見をしていたら申し訳ないのですが
検索結果が見つからなかった場合は最初に”見つかりません”でおわり
検索して一番最後の検索値セルまで行っても、FindNextでは1番上に戻る(とネットで見ました
ですが、たしかエラーが出たとき右下のウォッチに「Nothing」とあったような・・・
確認してみます
0800デフォルトの名無しさん
2017/03/09(木) 22:32:49.96ID:afDckXZpこれなら
Sub test()
Debug.Print Application.WorksheetFunction.CountIf(Cells, "田中")
End Sub
で済みそうだけど具体的な目的はなんだろ
0801デフォルトの名無しさん
2017/03/09(木) 22:56:43.28ID:no8PqT66nothingってことはオブジェクトがないんですよ
0802デフォルトの名無しさん
2017/03/09(木) 22:58:27.20ID:x6aOWZGAを
Set FoundCell = Cells.FindNext
0803デフォルトの名無しさん
2017/03/09(木) 22:59:59.43ID:x6aOWZGA0804デフォルトの名無しさん
2017/03/09(木) 23:25:12.46ID:44uIt3yk0805デフォルトの名無しさん
2017/03/09(木) 23:29:21.08ID:j4+ozjFjFindNextがNothingにならないコードならエラーにならないですね。もしそうなら申し訳ないです。
>>797でエラーになるなら、sheet2がないかRに変なものを入れてるか。(Rって変数だよね?)
実はsheet2の大文字小文字間違えてるとか、Rに配列を入れてるとか。
Whatに配列を入れてエラーになるかはわかんないけど。
0806デフォルトの名無しさん
2017/03/09(木) 23:46:08.11ID:nnBlrAfa正攻法はない
邪道な方法なら、プリプロセッサを使う、コンパイラのバイナリを書き換える
0807デフォルトの名無しさん
2017/03/10(金) 05:51:23.52ID:PT1UnLZa1. MS に入社して VBA のソースを書き換える
2. MS で偉くなって VBA の仕様を変える
3. MS を買収して VBA の仕様を変えさせる
2.〜3. ができるなら是非 C#A も実現してくれ、期待してるぞ
0808デフォルトの名無しさん
2017/03/10(金) 07:02:35.32ID:5FLdi5F+0809デフォルトの名無しさん
2017/03/10(金) 12:34:23.38ID:gaF8I+yh皆さん色々ありがとうございます
解決しました、これがちょっぱやでした
Dim 文字 As String
Dim 配列() As String
文字 = Replace(文字, "<", ">おちんちんビローン")
配列 = Split(文字, ">")
配列 = Filter(配列, "おちんちんビローン", False)
文字 = Join(配列, "")
入れ子は無しです
0810デフォルトの名無しさん
2017/03/10(金) 13:01:22.45ID:jnuCNi2bおちんちんビローンは良くない
おまんまんビローンの方がいい
0811デフォルトの名無しさん
2017/03/10(金) 13:08:12.64ID:FQ1vk7uEおまんまんがびろーんなのは良くないだろ
とろーんにしとけ
0812デフォルトの名無しさん
2017/03/10(金) 13:53:08.01ID:uMDINb1sアクティブユーザは10人かそこらだと思われるが、全員レベル低い
0813デフォルトの名無しさん
2017/03/10(金) 14:43:28.56ID:g78q5K7j0814デフォルトの名無しさん
2017/03/10(金) 16:26:11.61ID:Io2upKA9あなたはどっち?
0815デフォルトの名無しさん
2017/03/10(金) 16:45:51.30ID:uMDINb1s>>37
> コード品質をメトリクスとして計測するツールは他の言語環境だとあるけどVBAってそもそもそういうのあんの?
Project Analyzer
http://www.aivosto.com/project/project.html
VB時代に使ってたが、今でも開発が続いてるとは。
> Newest update: Analyze Office 2016 VBA with Project Analyzer & VBA Plug.
SourceMonitor Version (使ったことない)
http://www.campwoodsw.com/sourcemonitor.html
0816デフォルトの名無しさん
2017/03/10(金) 17:19:32.40ID:Ea2160pEでもSplitくらいでしか配列作らないから出番は少なそうだお
0817デフォルトの名無しさん
2017/03/10(金) 17:30:51.42ID:hAWWnXrs0818デフォルトの名無しさん
2017/03/10(金) 17:31:55.52ID:Ea2160pEExcelの右クリックのコマンドで、ポップアップとボタンの両立は出来ないのでしょうか。
例えば、右クリックの「コピー」コマンドの子メニューとして
「値のみコピー」「値と書式をコピー」「図としてコピー」を作りたい。
もし最近のExcelの「形式を選択して貼り付け」みたいな配置がのメニューが自作できるならそれでも十分です!
以上、よろしくお願いいたします。
0819デフォルトの名無しさん
2017/03/10(金) 18:09:05.49ID:g78q5K7j自作→公開→富豪
0820デフォルトの名無しさん
2017/03/10(金) 18:18:28.86ID:uMDINb1sExcel-DNA + F#は?
Excel-DNAはCOM経由でアクセスするようなオーバーヘッドが少ないみたい。
http://bleis-tift.hatenablog.com/entry/20110713/1310490680
使ったことないので、お勧めなのかどうなのか不明ですが。
0821デフォルトの名無しさん
2017/03/10(金) 18:22:25.85ID:y8xCqliG>ポップアップとボタンの両立
どういう意味かちょっとわからない
>例えば、右クリックの「コピー」コマンドの子メニューとして
これは普通にできるでしょ
0822デフォルトの名無しさん
2017/03/10(金) 18:25:24.37ID:hAWWnXrs情報ありがとう。やってみるよ、COMMとかF#よく分からんがww
>>819
富豪かww考えてみるよww
0823デフォルトの名無しさん
2017/03/10(金) 18:35:01.97ID:uMDINb1s> COMMとかF#よく分からんがww
ということなら、.NET Frameworkに目的にあうクラスがあるかどうか探してみるのがいいかも。
使い方は、
http://officetanaka.net/excel/vba/tips/tips98.htm
全ての.NET Frameworkのクラスが使えるかどうかは不明(しつこい?)
0824デフォルトの名無しさん
2017/03/10(金) 18:45:13.72ID:hAWWnXrsいや、しつこくないよ。情報はもらえるだけもらいたい。
VBAではループ、条件分岐、配列くらいしか使ってない。
いつかはオブジェクト指向とか、.NET?とかにも挑戦してみたかったから、良い機会なので折を見てやってみるよ。
上のはHaskellのを想定して書いたけど、出来そうなんかな。
0825デフォルトの名無しさん
2017/03/10(金) 19:21:38.26ID:Ea2160pEC#とかの場合ポップアップメニューに対してもクリックイベントが取得できるので
1.「コピー」をクリック・・・標準のコピー動作をさせる
2.「コピー」にカーソルを合わせる・・・子メニューを表示させる
ということが両立可能です。
実際には親メニューをクリックしたら直前に使用した子メニューの動作をするという実装を考えています。
フリーソフト等ではよく見かける動きなので、エクセルVBAでも出来ないかと思って相談した次第です。
0826デフォルトの名無しさん
2017/03/10(金) 19:54:42.90ID:K4FBudfx売上集計のブックに単価表をコピーしたいのですが、
どういうコードを書けばよいのでしょか?
0827デフォルトの名無しさん
2017/03/10(金) 19:59:35.50ID:K4FBudfx売上集計というシートを開いていて、もう一つの画面で単価表というシートを開いているのですが、
この単価表のシートを売上集計のシートの横にコピーしたいです。
こういう場合はどうすれば良いのでしょうか?
0828デフォルトの名無しさん
2017/03/10(金) 20:06:22.49ID:g78q5K7jctrlキーを押しながらシートをドラッグ&ドロップ
0829デフォルトの名無しさん
2017/03/10(金) 20:12:19.01ID:K4FBudfxすいません、自己解決しました。
Worksheets("単価表").Copy _
After:=Workbooks("売上集計").Sheets(1)
これでいいんですね・・
0830デフォルトの名無しさん
2017/03/10(金) 20:38:17.35ID:G+8/WNC/私も初めて知りましたが、
配列を特定の条件で詰めたい時に使えていいなと思いました
for next で全要素判定しなくて良いので
0831デフォルトの名無しさん
2017/03/10(金) 21:35:28.13ID:PT1UnLZa俺も知らなかったわ
ちょっとググったら VB6 の時代からあるんだな
VBA 奥深すぎ
0832デフォルトの名無しさん
2017/03/10(金) 21:36:22.40ID:y8xCqliGなるほど
コンテキスメニューのMouseMoveが取れればできるだろうけどVBAだけでできるのかな?
Windows APIのフックとかで実現してるのかもね
0833デフォルトの名無しさん
2017/03/10(金) 21:40:16.34ID:5FLdi5F+俺も知らなかったので確認してみたが、引数はStringじゃなくてもいけた
0834デフォルトの名無しさん
2017/03/10(金) 21:43:03.76ID:+sIlP1j5コピー先はシート名じゃないのか
0835デフォルトの名無しさん
2017/03/10(金) 22:37:06.66ID:Ea2160pE0836デフォルトの名無しさん
2017/03/10(金) 22:42:28.95ID:5FLdi5F+数値でもいけるけど、
5だけ落とそうとしても 5 が含まれている数値が全部道連れになっちまうだよ
0837デフォルトの名無しさん
2017/03/10(金) 22:47:36.30ID:PT1UnLZa第4引数見ると比較方法が文字またはバイナリだから文字にして比較してるんだろうね
0838デフォルトの名無しさん
2017/03/11(土) 17:29:51.87ID:bRgJ2+32氏名を姓と名に分割するよい方法はないでしょうか
姓と名は何かで区切られているわけではなくて1セルに入力されています
外部のWebAPIとか叩いてもいいので、なんとかして分割したいのです
100%の精度は求めていません
0839デフォルトの名無しさん
2017/03/11(土) 17:43:11.93ID:d5jme4tXざっくりやるならこの手のページから苗字の一覧持ってきてマッチさせるとかかな
マッチ順序は長い奴からやらないと
原
原田
とかあると、全部 原 にマッチするから要注意ね
0840デフォルトの名無しさん
2017/03/11(土) 17:44:11.39ID:d5jme4tXhttps://myoji-yurai.net/prefectureRanking.htm
0841デフォルトの名無しさん
2017/03/11(土) 17:46:18.92ID:UsQ6q5bp姓と名が分かれているリスト、サンプルを用意する。出来るだけというかかなりの量で。
頻度を採取しておく。加藤さん何回、太郎さん何回みたいな感じで。
一つの氏名について、どこで切るかのループを行う。
サンプルとマッチングさせて、適当にポイントを定義してそこで切る。
0842デフォルトの名無しさん
2017/03/11(土) 17:46:59.81ID:UsQ6q5bp0843デフォルトの名無しさん
2017/03/11(土) 17:48:54.75ID:oeyf3Eyo俺もそのうち使わせてもらおう
0844デフォルトの名無しさん
2017/03/11(土) 17:51:03.11ID:UsQ6q5bp0845デフォルトの名無しさん
2017/03/11(土) 17:59:02.33ID:1aDDqZQh前から二文字は名字にしろ
0846デフォルトの名無しさん
2017/03/11(土) 19:28:00.31ID:le+3qY0lここでAI
苗字をディープラーニングで学習する
0847デフォルトの名無しさん
2017/03/11(土) 19:33:08.85ID:gM1auKGoファイルを保存する時に、今日の日付にしたいです。
例:今日の集計_20170311
で、その後に「集計分_3月分」というフォルダに格納したいのですが、
ここはどうコードを書けばよいでしょうか?ちなみに日付が4月だと「集計分_4月分」に格納する様にしたいです。
他の月も同じです。
ちなみに最初の日付を付けてファイルを保存するコードは一応完成してます。
ActiveWorkbook.SaveAs filename:=C:\Users\IchiroSuzuki\Desktop\新しいフォルダー\今日の集計"&_Format(Date,"yyyymmdd")&".xls"
(↑上の格納場所は仮で作りました)
0848デフォルトの名無しさん
2017/03/11(土) 19:34:35.10ID:T88e3v0B理由によっては区切らなくて済むかもしれないじゃんか。
0849デフォルトの名無しさん
2017/03/11(土) 19:38:56.56ID:gM1auKGoファイル名がかさばるのが嫌だから。
0850デフォルトの名無しさん
2017/03/11(土) 19:41:15.37ID:1GY6kavjスプリットしてmid関数で月を抜き出してファイルシステムオブジェクトでゴニョゴニョしたら出来るよ
0851デフォルトの名無しさん
2017/03/11(土) 19:41:32.72ID:T88e3v0BMonth(日付)で月を抜き出すだけだと思うけど。
・・・・。
うちの会社も未だにそんな事やってるけど、
何で月別とか年別でファイルを分けたがるんだろ。
全部まとめてデータベースに放り込めよって思う。
0852デフォルトの名無しさん
2017/03/11(土) 19:43:45.17ID:gM1auKGoそこが分からんので、コードを教えて欲しい。頼む・・。
ファイル名を作成するとこまでは何とか出来たんだけど。
俺初心者だからそこまで分からんのよ。
0853デフォルトの名無しさん
2017/03/11(土) 19:44:14.77ID:T88e3v0B848は、その前の名前と名字の話。
一瞬、851を書き込む前にエスパーレスされたのかと思ったわ。
0854デフォルトの名無しさん
2017/03/11(土) 19:47:56.02ID:T88e3v0B普通にこうじゃなくて?
集計分_3月分
↓
"集計分_" & Month(Day) & "月分"
一旦デスクトップ上のフォルダに保存してから、
移動するという意味?
0855デフォルトの名無しさん
2017/03/11(土) 19:48:27.03ID:2CNlDFrGデータベースを扱うのにSQLなりを使えないといけない
ファイルはほぼ全員が判る
ファイルを一つのフォルダに多数入れすぎるとアクセスが遅くなる
0856デフォルトの名無しさん
2017/03/11(土) 19:50:03.25ID:T88e3v0B○ "集計分_" & Month(Date) & "月分"
0857デフォルトの名無しさん
2017/03/11(土) 19:50:06.67ID:2CNlDFrGhttp://www.moug.net/tech/exvba/0060035.html
ググり方くらいは判るだろ
0858デフォルトの名無しさん
2017/03/11(土) 19:58:35.74ID:gM1auKGoおお、それでいいのかな?
デスクトップ上に「集計分」というフォルダがあって、
そこに各月(集計分_○月分)のフォルダがあるってイメージ。
これでどうかな?
0859デフォルトの名無しさん
2017/03/11(土) 20:06:56.79ID:T88e3v0BDesktopより前は省略
"\集計分\集計分_" & Month(Date) & "月分\今日の集計_" & Format(Date, "yyyymmdd") & ".xls"
0860デフォルトの名無しさん
2017/03/11(土) 20:15:57.40ID:gM1auKGoそこ保存する時って,ifとかDir使わなくていいのかな。
そこも分かる?
0861デフォルトの名無しさん
2017/03/11(土) 20:16:52.49ID:gM1auKGoで行けるかな?
0862デフォルトの名無しさん
2017/03/11(土) 20:21:27.92ID:1GY6kavjなんでや
0863デフォルトの名無しさん
2017/03/11(土) 20:25:54.90ID:d37UNVyC使いたいWebサービスが姓と名の入力を必須としているI/Fだからです
0864デフォルトの名無しさん
2017/03/11(土) 20:27:33.57ID:d37UNVyCありがとう
自力でやるしかないか…
0865デフォルトの名無しさん
2017/03/11(土) 20:32:31.34ID:1GY6kavjhttp://climbi.com/b/9637/0
コードが貼れないので上の方々を参考に
とりあえずフォルダにファイルを移動するだけね
フォルダの有無等々のエラー処理は知りません
0866デフォルトの名無しさん
2017/03/11(土) 20:33:38.32ID:1GY6kavjdim files as new collectioni
は不要ですわ
0867デフォルトの名無しさん
2017/03/11(土) 20:48:49.60ID:sUFiWX+Jそれで分割が間違ってたらどうなるの?
0868デフォルトの名無しさん
2017/03/11(土) 20:50:41.24ID:gM1auKGoす、すげー
f.Move fld.Path & '\'
って、\の後はフォルダー名でいいの?
0869デフォルトの名無しさん
2017/03/11(土) 20:52:56.22ID:gM1auKGoDir (フォルダがあったら)→格納
、みたいな
0870デフォルトの名無しさん
2017/03/11(土) 20:58:31.65ID:1GY6kavjちがう
目的のパス¥って書かないとフォルダの中を見ない
>>869
意味わからないならちゃんと調べて
機能を使ってるだけでたいして難しいことはしてないよ
0871デフォルトの名無しさん
2017/03/11(土) 21:24:42.07ID:1aDDqZQhdbから抽出して都度ファイルかしろよ
0872デフォルトの名無しさん
2017/03/11(土) 22:44:46.63ID:5At9MNna自分がいつまでも同じ業務を続けられるか判らないだろ
0873デフォルトの名無しさん
2017/03/11(土) 23:02:10.48ID:sUFiWX+J0874デフォルトの名無しさん
2017/03/11(土) 23:11:12.54ID:T88e3v0B申し訳ない。
先にフォルダを作らなきゃいけないんだった。
MkDir "C:\Users\〜(省略)〜 \集計分\集計分_" & Month(Date) & "月分"
0875デフォルトの名無しさん
2017/03/11(土) 23:13:21.97ID:1aDDqZQh属人化学w
0876デフォルトの名無しさん
2017/03/11(土) 23:34:33.59ID:1GY6kavjなに、その月のフォルダがなかったら自動で作れっての?
0877デフォルトの名無しさん
2017/03/11(土) 23:37:21.47ID:1GY6kavj0878デフォルトの名無しさん
2017/03/12(日) 00:57:08.28ID:qVU1mc2Kそのデータで作成された帳票類に違和感が出る
0879デフォルトの名無しさん
2017/03/12(日) 01:09:13.61ID:T4N3k6YJそっか
データ量が多くて真剣に分割したいならちゃんとしたクレンジング屋に頼むといい
件数によるけどスポットでも数十万でやってくれると思うよ
事情はあるんだろうが入力時に分割しとけばいいのにね
0880デフォルトの名無しさん
2017/03/12(日) 08:19:32.85ID:qVU1mc2Kデイリーのリアルタイム性のある業務で、入力データも外部のWebサービスからダウンロードするものだからどうにもならないんですよね
GoogleとかMSとか大手が姓名分割のWebAPIを作って無償で公開してくれないな…
なんか脱線してきた、みんなありがとう
0881デフォルトの名無しさん
2017/03/12(日) 08:25:54.85ID:Q8YU2KJzなんか犯罪臭がする
0882デフォルトの名無しさん
2017/03/12(日) 09:01:17.76ID:8PQIIyGz0883デフォルトの名無しさん
2017/03/12(日) 09:23:51.39ID:991oSHP/fsoにfolderexistsっていうフォルダの存在を確認するメソッドがあるから、
それ使えば良いよ。
今、excel mobile の環境なので、コードは勘弁して。
0884デフォルトの名無しさん
2017/03/12(日) 09:27:10.39ID:bIRTne1Uあ、ループせんでもそれでよかったか
まあこれを機会にfor eachも覚えたらいいよ
初心者ならなおさらforとifは理解しないと
0885デフォルトの名無しさん
2017/03/12(日) 09:57:15.31ID:8PQIIyGzバッチ処理ならVBAはもう要らない
0886デフォルトの名無しさん
2017/03/12(日) 10:12:22.72ID:hoQq7gk2>VBAで、あのVBEのエディタの書いてあるのを弄れれば何でも出来そうだけど、無理だよね?
弄れるでしょ。
セキュリティ的に問題出てくるけど。
Application.VBE.以下いろいろ弄れる。
(但し、オプションで設定変更必要)
弄って且つ動かしたり、動かしてる最中に弄るのは難しいかな。
セキュリティ的な問題やオプションの設定変更を回避しつつ弄るのはVB.netやC#でCOMアドイン作ればできる。
>>880
前に出てた苗字リストで長い苗字順で検索かけて処理する方法で十分でないの?
0887デフォルトの名無しさん
2017/03/12(日) 10:23:12.31ID:hfd+YsXWSQL Server Express に入れて遊んでみた
SELECT *
FROM [sampleDB01].[dbo].[surname_rank]
WHERE surname LIKE '%林%'
ORDER BY rank
rank surname kana pupulation
9 小林 コバヤシ 1036000
18 林 ハヤシ 550000
270 若林 ワカバヤシ 82300
426 林田 ハヤシダ 47700
524 平林 ヒラバヤシ 38000
744 中林 ナカバヤシ 26300
818 栗林 クリバヤシ 23500
847 大林 オオバヤシ 22600
913 東海林 トウカイリン 20400
以下略
0888デフォルトの名無しさん
2017/03/12(日) 10:27:33.54ID:4+0uKqTL一位と二位が気になります
0889デフォルトの名無しさん
2017/03/12(日) 10:45:30.88ID:hfd+YsXW"rank"は全体の中でのランクだからね
SELECT *, LEN(surname) AS NameLen, 1000 * population/ SUM(population) OVeR() AS permil
FROM [sampleDB01].[dbo].[surname_rank]
ORDER BY rank ASC
rank surname kana population NameLen permil
1 佐藤 サトウ 1894000 2 17
2 鈴木 スズキ 1809000 2 16
3 高橋 タカハシ 1425000 2 12
4 田中 タナカ 1346000 2 12
5 伊藤 イトウ 1084000 2 9
6 渡辺 ワタナベ 1073000 2 9
7 山本 ヤマモト 1060000 2 9
・ ・ ・
4497 武下 タケシタ 2500 2 0
4498 後藤田 ゴトウダ 2500 3 0
4499 中松 ナカマツ 2500 2 0
4500 蓼沼 タデヌマ 2500 2 0
0890デフォルトの名無しさん
2017/03/12(日) 11:34:02.60ID:qVU1mc2K受注データをメーカーのEDIに投げるだけだよ
なんでそんなに気になるんだ…
0891デフォルトの名無しさん
2017/03/12(日) 12:07:48.59ID:T4N3k6YJ小規模なら人間が介在するだろうしイメージできないわ
0892デフォルトの名無しさん
2017/03/12(日) 17:05:06.51ID:ryuuGP4cExcel形式でデータをダウンロード、CSVにエクスポートしてEDIに投げる、ここは人間がやるよ
でも毎日何百件の姓名分割まで人間が目視でやるのはつらいんだよ
ソースがExcel形式だったからExcelだけで完結できればオペレータが楽かな?と思ってね
別にExcelVBAだけに固執してるわけじゃないよ、色々模索してるとこ
0893デフォルトの名無しさん
2017/03/12(日) 18:22:04.37ID:hfd+YsXW過去に苦労して分割したデータは残っているんでしょ?
分割前→分割後が。
それは有効活用できるよね?
0894デフォルトの名無しさん
2017/03/12(日) 18:28:58.89ID:8PQIIyGzそういうバッチ的な処理はPowershellなど他の言語を使ったほうがいいよ
VBAは他にVBAよりマシな方法がなさそうな場合にのみ使うべき
レガシーな処理系に依存するとシステムが急速に劣化してビジネスにも悪影響が出る
0895デフォルトの名無しさん
2017/03/12(日) 18:45:25.89ID:yxXc/NUJ0896デフォルトの名無しさん
2017/03/12(日) 18:47:29.34ID:yxXc/NUJ0897デフォルトの名無しさん
2017/03/12(日) 18:51:29.08ID:JBCvlAvk現状は手作業で分割してるの?分割しないと投げらんない仕様なの?
0898デフォルトの名無しさん
2017/03/12(日) 19:03:44.40ID:6iMHIBm5>>838 にも色々事情があるんだろうしそれはたぶんスレ違いだろうし
0899デフォルトの名無しさん
2017/03/12(日) 19:08:37.96ID:8PQIIyGz宿題といてください(意訳)の繰り返しはもう飽きた
0900デフォルトの名無しさん
2017/03/12(日) 19:11:35.65ID:WG9HLLmd0901デフォルトの名無しさん
2017/03/12(日) 19:57:02.25ID:PCuufyBR教えてください・・orz
0902デフォルトの名無しさん
2017/03/12(日) 20:00:57.80ID:8PQIIyGz宿題は自分でやりなさい
0903デフォルトの名無しさん
2017/03/12(日) 20:25:19.16ID:991oSHP/>>859の回答で解決してないの?
あれで良いと思うんだけど。
0904デフォルトの名無しさん
2017/03/12(日) 20:33:51.98ID:PCuufyBR俺のやり方が悪いのかな・・
Dir使ってて、その>>859のコードをプラスしたんだけど。
0905デフォルトの名無しさん
2017/03/12(日) 20:41:30.36ID:991oSHP/dir は全く関係無い
元の>>847のコードの保存先指定部分を>>859のに置き換えるだけ。
要するに最初の保存の時点で所定のフォルダを指定している。
0906デフォルトの名無しさん
2017/03/12(日) 20:43:06.37ID:PCuufyBRデスクトップ上に「集計分」というフォルダがあって、
そこに既に各月(集計分_○月分)のフォルダがあるってイメージ。
そこに作成した集計分_20170312(今日の日付・コード作成済み)を格納したい。
俺はifとかDirを使って格納するんじゃないのかな〜って想像してたんだけど。
0907デフォルトの名無しさん
2017/03/12(日) 20:43:49.14ID:PCuufyBRありがとう、ちょっとやってみる
0908デフォルトの名無しさん
2017/03/12(日) 20:48:49.74ID:PCuufyBR俺が>>847で作ったコードを改良してくれてるから、>>847のコードは特に必要ない?
0909デフォルトの名無しさん
2017/03/12(日) 20:49:15.74ID:991oSHP/意味分からない。
saveasで保存先のフォルダもファイル名も指定出来るんだから
それでいいじゃん。
0910デフォルトの名無しさん
2017/03/12(日) 20:52:12.07ID:PCuufyBRDirとかifで「3月分のフォルダがあったら〜格納」みたいに考えてた。
そうじゃなく、>>859のコードでファイル名もつけられるし、しかるべき場所に格納も出来るってことなの?
0911デフォルトの名無しさん
2017/03/12(日) 20:57:37.67ID:991oSHP/半角のダブルクォーテーションは俺の環境だと使えないんで全角に置き換えてます。
ActiveWorkbook.SaveAs filename:=WC:\Users\IchiroSuzuki\Desktop\集計分\集計分_W & Month(Date) & W月分\今日の集計W & Format(Date,WyyyymmddW) & W.xlsW
0912デフォルトの名無しさん
2017/03/12(日) 21:03:00.05ID:991oSHP/それは
あらかじめフォルダを作っておくか、
エラーを無視するようにするか、
フォルダの存在を確認して
存在していない場合にフォルダを作成してから保存するか、
などいくつかの対応が考えられる。
0913デフォルトの名無しさん
2017/03/12(日) 21:15:19.30ID:T4N3k6YJなんとなくイメージできたわ 詳しくありがとう
有償でも無償でも姓名辞書で姓と名で分割してるのがあるからそれ使うといい
姓の辞書の最長マッチと苗字と判断(確実を期すなら下の名前のほうもマッチさせてダメなら人間判定に回す)
辞書のデータ量が増えるとそれなりアルゴリズムが必要
0914デフォルトの名無しさん
2017/03/12(日) 21:32:45.78ID:5b1jkY/Qそれ拡張子がxlsなら、パラメータにxlExcel8付けないと大変なことになるわよ〜!
0915デフォルトの名無しさん
2017/03/12(日) 21:48:24.70ID:BMmtwfSEPowerShell で書いた。
フォルダ内には、名前が today_20170311 のファイルが、1つだけ入っていると仮定する
# フォルダ内のすべてのファイルを取得する
$files = ls
# ファイル名の拡張子を除いた部分
$baseN = $files[0].BaseName
# 後ろから8文字
$day = $baseN.substring($baseN.length - 8, 8)
# DateTime オブジェクト
$dateT = [DateTime]::ParseExact($day,"yyyyMMdd", $null)
# 20170311の201703
$folderName = $dateT.ToString("yyyyMM")
# 移動先フルパス
$fullPath = "パス" + $folderName
# ファイルを移動
move $files[0].FullName $fullPath
0916デフォルトの名無しさん
2017/03/12(日) 22:02:41.54ID:3emMpteW>>865がまさにそのつもりで作ったんだがな
DirじゃなくてFileSystemObjectを使ってるのが違うくらい
ただ>>883が言うようにフォルダ検索してるfor eachは要らなくて、folderExistメソッドで有無を判断できるからそこはもう少し短縮化できる
てか、ファイル有無もFileExistで行けるからif分のネストだけで行けるなw
あくまでもとあるファイルを移動する、と言うことであればね
0917デフォルトの名無しさん
2017/03/12(日) 22:09:43.94ID:LzZ9VM9Cそれは、先の月のフォルダは作っちゃいけないの?
作ってもいいなら、事前に1年分作っておけばいいと思うんだけど。
そうすれば、あったらとか無かったらとか考えなくていい。
For a = 1 to 12
MkDir "C:\Users\IchiroSuzuki\Desktop\集計分\集計分_" & a & "月分"
Next a
0918デフォルトの名無しさん
2017/03/12(日) 22:40:06.90ID:cJrFgBqf俺なら変数名はmにする
0919デフォルトの名無しさん
2017/03/13(月) 10:16:22.87ID:h6W41j8f俺なら 1〜9月は 01〜09 にする
0920デフォルトの名無しさん
2017/03/13(月) 10:41:01.32ID:oe9KtmsD0921デフォルトの名無しさん
2017/03/13(月) 10:57:07.53ID:bNauL2tg正解はコレ
Dim d As Date
d = Now()
Dim Path As String
Dim fso As New FileSystemObject
Path = Environ("userprofile") & "\desktop\集計分"
If Not fso.FolderExists(Path) Then fso.CreateFolder Path
Path = Path & "\" & Format(d, "yyyymm")
If Not fso.FolderExists(Path) Then fso.CreateFolder Path
ActiveWorkbook.SaveAs Path & "\今日の集計" & Format(Date, "yyyymmdd") & ".xlsm", xlOpenXMLWorkbookMacroEnabled
0922デフォルトの名無しさん
2017/03/13(月) 11:04:39.97ID:bNauL2tgあとこういう関数もあるから、条件次第ではこれもアリ
「存在しないパスのフォルダを一発で作成する」
http://officetanaka.net/other/extra/tips07.htm
0923デフォルトの名無しさん
2017/03/13(月) 11:31:21.85ID:pd5G97r+動けばいいんだよ
0924デフォルトの名無しさん
2017/03/13(月) 11:37:02.59ID:w4xeXUAV0925デフォルトの名無しさん
2017/03/13(月) 11:58:25.83ID:Q8aLhRYX0926デフォルトの名無しさん
2017/03/13(月) 12:33:31.48ID:DSlNGFQE工夫の問題だからそれは質問者が考えるべき話。
分からない部分については回答ついてるだろ。
Win32APIはわりと多用する方だが、その関数は使わない。
標準機能で出来るのに敢えて使うのは特別な理由がある時だな。
0927デフォルトの名無しさん
2017/03/13(月) 13:07:15.06ID:Ru3QxnDkActiveWorkbookとか使っといて人をアホ呼ばわりすんなよ
0928デフォルトの名無しさん
2017/03/13(月) 14:40:05.00ID:vqU4GynK質問者がxlsを指定している事から
動作環境が古い可能性もあるので、
無条件にxlsmを使用するのは間違い。
保存するブックのファイルフォーマットを取得して、それに合わせるのが正解。
0929デフォルトの名無しさん
2017/03/13(月) 15:26:11.41ID:ibPTmU9i時間と質のバランス悪いな
0930デフォルトの名無しさん
2017/03/13(月) 16:11:40.38ID:p1ml1meGというか、保存するまでは出来たっていってるんだからそれを生かしてあげるべきよな
保存は別ですることに意味がある場合もあるわけだし
0931デフォルトの名無しさん
2017/03/13(月) 16:29:20.95ID:bNauL2tg>>928のご要望にお答えして対処してみた。
'必要に応じてパラメータに変えてね!
Dim d As Date
Dim WB As Workbook
Dim Path As String
Dim fso As New FileSystemObject
d = Now()
Set WB = ActiveWorkbook
Path = Environ("userprofile") & "\desktop\集計分"
'処理
If Not fso.FolderExists(Path) Then fso.CreateFolder Path
Path = Path & "\" & Format(d, "yyyymm")
If Not fso.FolderExists(Path) Then fso.CreateFolder Path
Path = Path & "\今日の集計" & Format(Date, "yyyymmdd")
If WB.FileFormat = 56 Then
If Application.Version < CInt(12) Then
WB.SaveAs Path & ".xls"
Else
WB.SaveAs Path & ".xls", 56
End If
Else
WB.SaveAs Path & "." & fso.GetExtensionName(WB.Name), WB.FileFormat
End If
お兄ちゃん!これでいい?
0932デフォルトの名無しさん
2017/03/13(月) 17:49:39.06ID:39nTuGxNnow() と date が混在してるのはなぜ?
あと、ファイルフォーマット関連の部分は条件分岐入れないと拙いの?
0933デフォルトの名無しさん
2017/03/13(月) 18:40:39.37ID:bNauL2tg>>now() と date が混在してるのはなぜ?
修正し忘れたぁ〜ありがとうおにいちゃん!
>>あと、ファイルフォーマット関連の部分は条件分岐入れないと拙いの?
よくぞ聞いてくれました!!!
SaveAsメソッドはファイルフォーマット省略時の既定値がExcel〜2003ではxlsなんだけど、Excel2007〜はxlsxに変わっちゃったの!
つまり2007以降ではファイル名の拡張子をxlsにしても、内部形式はxlsxなので次に開いたときに「ファイル壊れてるよ?」って怒られちゃうの。ついでにマクロが消えちゃう!
更にExcel2003で,xlExcel8(,56)を指定すると実行時エラーで「そんなの無いよ?」って怒られちゃうの
ちなみにxlExcel8を入力すると2003ではコンパイルエラーになっちゃう!エクセルのばーかばーか!
ど〜してもxlsが良い!!!って要望ならExcel2003が存在する可能性が高いので3段階の切り分けが必要なワケ
おにいちゃん分かった〜?
0934デフォルトの名無しさん
2017/03/13(月) 18:43:02.75ID:bNauL2tgスルーされたからブチ切れで暴れてしまったが、>>932のお陰で眠れそうです。
ありがとうございました。
0935デフォルトの名無しさん
2017/03/13(月) 18:44:41.47ID:FayKVqy20936デフォルトの名無しさん
2017/03/13(月) 18:55:14.86ID:39nTuGxNゴメン、よくわかんない。
今手元にマクロ動作環境が無いので自力で検証出来ないんだけど、
新規作成したブックの初回保存時ならともかく、
Activeworkbook が対象の時点でそのファイルでは
ファイルフォーマットと拡張子の不整合は存在していないと思うんだけど、
そういう時でも不整合が起こり得るの?
0937デフォルトの名無しさん
2017/03/13(月) 19:03:45.79ID:WfgCl99Qライブラリ作ってるならともかくツールなら決め打ちでいいだろ
まあちんけな知識を披露したかったんだろうけどオナニーにしかなってない
0938デフォルトの名無しさん
2017/03/13(月) 19:23:34.26ID:FayKVqy2俺がJCだと看破してしまったばかりに要らぬ嫉妬をまねいてしまったなw
0939デフォルトの名無しさん
2017/03/13(月) 19:27:41.74ID:bNauL2tg最高に気持ちよかった。ぺろぺろ
>>936
確かにxls形式をSaveAsでxlsに保存する分には問題無いみたい。
危険なのはWorkbooks.AddやActiveWorkbook.SaveAsする場合かな。
そもそも出力形式くらい決めうちにし〜やって話やな。
入力フォーマットに合わせてSaveASで出力フォーマットを変える状況が考えられない。
0940デフォルトの名無しさん
2017/03/13(月) 19:45:26.61ID:bNauL2tg0941デフォルトの名無しさん
2017/03/13(月) 21:10:20.75ID:KRsK3ylh格好悪くても、こういうシンプルなので良いんだよ。
On Error Goto Z
ファイル作成
Exit Sub
Z:
フォルダ作成
ファイル作成
0942デフォルトの名無しさん
2017/03/13(月) 21:15:50.13ID:42UsHZt3せっかくだから色んな手順踏んだほうがいい経験になるんじゃね?
Dir関数とかまあ、その辺もいいけどファイル扱うなら結局fso安定じゃん
0943デフォルトの名無しさん
2017/03/13(月) 21:24:02.22ID:F+UNOx6N試行錯誤の末、出来ました!
動いた時ちょっと感動しましたw
ありがとうございます。
0944デフォルトの名無しさん
2017/03/13(月) 21:32:38.50ID:42UsHZt3結局どうやって実装したの?
0945デフォルトの名無しさん
2017/03/13(月) 21:33:30.62ID:ibPTmU9iいやなに
礼には及ばんよ、
いつか他人を助けてやってくれ。
0946デフォルトの名無しさん
2017/03/14(火) 00:24:42.12ID:pXYRmO5xVBAを勉強するよりVBAでやりたいタスクをVBAを使わず解決する方法を勉強したほうが有益
0947デフォルトの名無しさん
2017/03/14(火) 00:38:14.29ID:6pSq6rsv0948デフォルトの名無しさん
2017/03/14(火) 06:33:12.09ID:PpBlx+Gr実際にやると同じ機能の実装でもくっそ面倒な事になるんだよな
0949デフォルトの名無しさん
2017/03/14(火) 06:47:06.91ID:4i8r16Ig当たり前だけど COM 経由なら VBA とたいして変わらないよ
例えば >>915 の PowerShell の例とか見ればわかると思う
0950デフォルトの名無しさん
2017/03/14(火) 07:48:18.42ID:pXYRmO5x何をやるかだろ
さっきまでやってたような問題とかバッチ処理は他の言語のほうがやりやすい
右クリックメニューを拡張とかだとVBAが現実的
0951デフォルトの名無しさん
2017/03/14(火) 09:40:58.58ID:UKVDZFluExcel上で他言語は不便だろうけど、そこを離れて他言語を使うことを勧めてるんじゃないかと想像
特にデータ蓄積関連でExcelに拘るのは損するだけだ
0952デフォルトの名無しさん
2017/03/14(火) 10:10:18.88ID:okEkIV3l0953デフォルトの名無しさん
2017/03/14(火) 10:40:59.54ID:FZyQm7Ji0954デフォルトの名無しさん
2017/03/14(火) 11:17:21.88ID:Pnt4yGVI他の言語でExcel操作したことあるけど、VBAみたいに自由にトレース出来ないから、デバッグが面倒くさすぎたわ。
0955デフォルトの名無しさん
2017/03/14(火) 11:27:29.02ID:UKVDZFluん、VBAを?
0956デフォルトの名無しさん
2017/03/14(火) 12:02:34.46ID:in0KUcE+VBEならコードを2行書けばいいし、(3行目は自動的に補完される)
コンパイルは書くと同時だし、実行もF5をポンと押すだけ
別言語でも同じ手間で実現できる方法があればこっちが教えて欲しいぐらい
0957デフォルトの名無しさん
2017/03/14(火) 12:10:37.91ID:uRpcru+d最初の一発がほんと早いのよねー
0958デフォルトの名無しさん
2017/03/14(火) 13:09:34.02ID:qHSOlZCdん?
1行で書けるけど?
(New-Object -ComObject 'Excel.Application' -Property @{Visible = $true}).Workbooks.Open('xxxx.xlsx').Worksheets.Item(1).Cells.Item(1,1).Interior.Color=256
0959デフォルトの名無しさん
2017/03/14(火) 13:30:39.08ID:FZyQm7Jiそうだよ
0960デフォルトの名無しさん
2017/03/14(火) 13:43:16.47ID:PYKp6fvN的外れなレスって楽しいよね
俺も毎日やってる
0961デフォルトの名無しさん
2017/03/14(火) 14:02:50.85ID:Pnt4yGVIこういうのって毎回インテリセンス使って入力してるの?
特に出だしの部分とか、まっさらの状態から書けって言われたら俺泣いちゃうわ
0962デフォルトの名無しさん
2017/03/14(火) 14:09:42.16ID:sXaakNNH>>961
Powershellだって、何度もやってれば暗記すると思うよ
俺はインテリアカラーの綴りが自信ないわ
手入力したことないメンバ名は正確に覚えてないのが結構ある
0963デフォルトの名無しさん
2017/03/14(火) 14:18:32.07ID:/ZkZ9VAVオブジェクト. で、メソッド・プロパティ候補も出る
0964デフォルトの名無しさん
2017/03/14(火) 16:12:38.20ID:vIMzEjCF>>956みたいな一発ものはVBAがいいしVBAはそういう用途のためにある
言語機能が貧弱だから便利関数が用意されてないものを自前で実装しようとすると大変だし
管理面も弱いからバージョン管理するにもエクスポート・インポートで工夫するかアドインが必要
他の言語を理解せずにVBAがと同じように書こうとしてれば面倒なだけだろうね
0965デフォルトの名無しさん
2017/03/14(火) 16:36:10.41ID:vIMzEjCF2行目は必須じゃない
IDE使えばF5を押すだけで実行可能だしvimやemacsみたいなエディタでもキーバインド割り当てればいいだけ
import xlwings as xw
from xlwings.constants import RgbColor
xw.Book('sample.xls').sheets('Sheet1').range('A1').color = RgbColor.rgbAqua
0966デフォルトの名無しさん
2017/03/14(火) 16:48:45.13ID:V7Lg+nlP0967デフォルトの名無しさん
2017/03/14(火) 17:14:59.28ID:6pSq6rsvここはVBAのスレだっての
0968デフォルトの名無しさん
2017/03/14(火) 17:26:48.66ID:vIMzEjCF>>956が教えて欲しいくらいって書いてるのに何キレてんの?
0969デフォルトの名無しさん
2017/03/14(火) 17:34:17.81ID:V7Lg+nlP普通の人は、まずpythonがインストールされてません。
0970デフォルトの名無しさん
2017/03/14(火) 18:28:30.98ID:qHSOlZCdなにネタに食いついてるんだよ w
>>961
これはすべて手打ち
ISE で補完ができると言ってもしょせん動的型付け言語なのでそれほどありがたみがないしね
なので慣れたエディタの方が楽
0971デフォルトの名無しさん
2017/03/14(火) 18:30:59.45ID:qHSOlZCd今時 PowerShell ぐらいは入ってるでしょ
0972デフォルトの名無しさん
2017/03/14(火) 18:39:18.48ID:PpBlx+GrVBA使わなきゃならないような企業はインストール出来ないから無い物として考えるべき。
VBA自体がリテラシーの低い会社での規制の抜け穴として利用されている場合が多いし。
0973デフォルトの名無しさん
2017/03/14(火) 19:08:35.60ID:i+R2+qjf0974デフォルトの名無しさん
2017/03/14(火) 19:29:17.97ID:xnvwc2Pv0975デフォルトの名無しさん
2017/03/14(火) 19:32:07.39ID:CJRugdQQお前進歩してないもんなw
0976デフォルトの名無しさん
2017/03/14(火) 19:34:58.72ID:PpBlx+Grっていうか何十年も使われてきて、今更「こんな使い方あったよ!」ってのがあるはずもなく。
0977デフォルトの名無しさん
2017/03/14(火) 19:45:13.65ID:7FwA8XeC宿題スレで満足なのか?
0978デフォルトの名無しさん
2017/03/14(火) 19:52:14.45ID:PpBlx+Gr知識の蓄積が目的ならGithubかQiitaかでやりゃいいし、
質問が気にくわないなら無理矢理参加せずに静観すりゃいい。
0979デフォルトの名無しさん
2017/03/14(火) 19:55:38.81ID:ucKh0CXlなんでもスレは人いなくて…9
0980デフォルトの名無しさん
2017/03/14(火) 19:59:56.60ID:CJRugdQQコイツら「刺激が欲しい」みたいな事言ってるから聞けばよろこんで答えるんじゃない?
まあ実際は答えられないからアレコレ難癖つけて叩かれると思うけどw
0981デフォルトの名無しさん
2017/03/14(火) 20:23:16.29ID:qHSOlZCdちょっと上で Filter 関数で盛り上がってたけどな w
0982デフォルトの名無しさん
2017/03/14(火) 20:28:34.50ID:UKVDZFlu0983デフォルトの名無しさん
2017/03/14(火) 20:46:30.20ID:vIMzEjCFそれはご愁傷さま
0984デフォルトの名無しさん
2017/03/14(火) 20:46:58.09ID:213D/D060985デフォルトの名無しさん
2017/03/14(火) 21:16:20.06ID:XXvmx24aああ、うちの会社だ。
しかも、LibreOffice導入によるExcel廃止を阻止して、
どうにか手に入れたVBA。
0986デフォルトの名無しさん
2017/03/14(火) 22:01:35.12ID:FIaYW+rHギッハブはなんかの記事中で紹介しないとダメだけど最近のQiitaでは質の低下がひどい
0987デフォルトの名無しさん
2017/03/15(水) 01:56:35.46ID:IsHCJowSだからここで最新のプログラミング技術について議論しようってのか?
ここはエクセルマクロスレだぞ?
頭湧いてんのかお前w
0988デフォルトの名無しさん
2017/03/15(水) 05:41:24.35ID:8JhP7Jbn大抵のホットトピックスは、そのコンパイラ言語やらOSやらの範囲に限って初めて出来ましたとか、
昔に比べて簡単になりましたっていうだけの話題で、概念そのものがありませんでしたっていう話ではないし・・・。
モンテカルロ木探索のビジネス上の応用可能性についてとかかな?
0989デフォルトの名無しさん
2017/03/15(水) 07:34:58.31ID:xbnVT4mxブロックチェーンじゃね
0990デフォルトの名無しさん
2017/03/15(水) 08:17:26.45ID:tOWv6hZa0991デフォルトの名無しさん
2017/03/15(水) 08:46:33.87ID:AelFluvT自分でサポートすりゃいいんだよ。
0992デフォルトの名無しさん
2017/03/15(水) 10:47:03.86ID:aAnOhLegそれらのインスタンスをその中のある1つのプロパティを基準にソートしたいんですが
ExcelVBAにおいてそのための定番的方法とはどんなものですか?
0993デフォルトの名無しさん
2017/03/15(水) 10:48:23.43ID:aAnOhLegPersonクラスに
ageプロバティがあって
Collectionのpersonsをageの若い順にソートした状態でpersons(1)、persons(2)・・・として並べておきたい。
0994デフォルトの名無しさん
2017/03/15(水) 11:06:26.97ID:x9/45mQVpythonの話をしてるんですが
0995デフォルトの名無しさん
2017/03/15(水) 11:08:37.82ID:x9/45mQV定番的方法なんて存在しないので、自力でなんとかしてください
0996デフォルトの名無しさん
2017/03/15(水) 11:26:05.75ID:AelFluvTCollection限定?
0997デフォルトの名無しさん
2017/03/15(水) 12:28:14.65ID:fPN0NuJ/他の人に頼む
0998デフォルトの名無しさん
2017/03/15(水) 12:38:26.52ID:SxG8JjnM並び替えてから入れる
0999デフォルトの名無しさん
2017/03/15(水) 12:38:56.44ID:SxG8JjnM1000デフォルトの名無しさん
2017/03/15(水) 12:39:18.72ID:SxG8JjnM10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 25日 12時間 56分 53秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。