トップページtech
1002コメント360KB

Excel VBA 質問スレ Part40 [無断転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2016/02/19(金) 02:49:44.77ID:BQQ9mWtn
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part39 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1448624205/
0002デフォルトの名無しさん2016/02/19(金) 08:12:54.49ID:997QLUzg
994 デフォルトの名無しさん sage 2016/02/18(木) 23:08:06.79 ID:XVu7nbkc
ですが

入力データを配列化して
出力する場合
出力内容も配列化するのは良いのですが
出力データが入力データの行数分あり、列は10列有ります
その場合配列は
ReDim Preserve 出力(1 to 10, 1 to 出力行数) 
とループさせるため
行と列が逆になります

また出力シートは結合&結合と殆ど結合部が多いためこの場合の処理はどのようにすればよいですか?
0003デフォルトの名無しさん2016/02/19(金) 11:37:02.06ID:PjfL255H
>>2
入力データの行数が事前にわからないからReDim Preserveしてるってこと?
0004デフォルトの名無しさん2016/02/19(金) 12:07:05.82ID:LsoB0P/C
ときどきコードで
Sleep1
って見るけどこれはなにをやってるの?
さっぱりわからん。
0005デフォルトの名無しさん2016/02/19(金) 12:07:42.20ID:LsoB0P/C
0.001秒でしょ?そんな短時間なら待っても待たなくても同じだと思うが。
0006デフォルトの名無しさん2016/02/19(金) 12:18:36.06ID:PjfL255H
たぶん、他のアプリに制御を渡してる「つもり」なんだろう。
大昔は意味あったのかね。
0007デフォルトの名無しさん2016/02/19(金) 12:31:56.79ID:rTtJyJ/Q
>>3
そう
大して変わらないのなら
入力データだけ配列化する

その入力データは3帳票でしようするので
0008デフォルトの名無しさん2016/02/19(金) 12:56:08.06ID:PjfL255H
>>7
入力データを配列化するときに行数がわかるけど、出力配列をそのあと作ることが出来ない理由がわからんね。
0009デフォルトの名無しさん2016/02/19(金) 13:51:05.47ID:rTtJyJ/Q
>>8
出力配列作るのはいいんですがredimでやると
行と列を逆に作らなければならないのでどうすればよいですか?
またセルの結合するのですがその場合配列の数値とセルの位置があわなくなるのですがどうすればよいですか?
0010デフォルトの名無しさん2016/02/19(金) 14:16:17.01ID:4CNSbXWl
>>9
セルの結合については前スレで誰かも言ってたけど、
テンプレートは結合無しで作っておいて、
データ書き込んだ後で結合させれば良いんじゃないの?
もしもテンプレートの時点で結合させてないとダメなんだったら、
2度手間だけど書き込む前に結合を解除して、
書いた後で再結合とかだよね

配列のredimの方は transpose 相当の処理を
自前で組むとかじゃないかな
0011デフォルトの名無しさん2016/02/19(金) 14:27:51.00ID:4CNSbXWl
ああ、言い忘れてた
そもそもの前提として、出力データの行数が入力データの行数に等しいなら
配列の宣言の時点で行列入れ替える必要無いよね。
>>3,>>8なんかもそういう意味で聞いてるんだと思うよ
0012デフォルトの名無しさん2016/02/19(金) 14:30:11.76ID:PjfL255H
>>9
行と列を逆にって何のこと?出力行数が事前にわかるならPreserveせず
ReDim 出力(1 to 出力行数, 1 To 10) でいいわけだし。
0013デフォルトの名無しさん2016/02/19(金) 14:30:39.84ID:PjfL255H
かぶった
0014デフォルトの名無しさん2016/02/19(金) 14:49:53.56ID:HB2JSIqa
>>2
出力はコレクションにしたら楽よ
0015デフォルトの名無しさん2016/02/19(金) 15:10:42.30ID:rTtJyJ/Q
>>10
なるほど転記後
結合ループします
>>14
コレクションの方法がよくわからないのです
0016デフォルトの名無しさん2016/02/19(金) 18:02:20.38ID:Kt6O98en
質問

Cells(1, 1).Clear
これ実行するとセルの表示形式が時刻になることって回避出来ませんか?
0017デフォルトの名無しさん2016/02/19(金) 18:19:11.21ID:VU2H97Ti
>>16
ClearContents
0018デフォルトの名無しさん2016/02/19(金) 19:11:41.44ID:Kt6O98en
>>17
clearcontentsだとセル塗りつぶしをクリア出来ない・・・っていうのは我が儘ですかね
0019デフォルトの名無しさん2016/02/19(金) 19:31:21.17ID:rTtJyJ/Q
>>18
ClearFormats使えば?
0020デフォルトの名無しさん2016/02/19(金) 20:21:24.02ID:Kt6O98en
>>19
clearformatsで表示形式が「数値」だったものが「時刻」になります

Excel2013
0021人間のくず2016/02/19(金) 21:55:02.80ID:Y71x48u9
プログラム始めたいんですが、まずどこから始めればいいのか分かりません。誰か教えてください。お願いします。
0022デフォルトの名無しさん2016/02/19(金) 21:58:38.90ID:Y71x48u9
友達がプログラムをやっていて、教えてもらいたいんですけど何故か教えてくれません。誰か教えてください。
0023デフォルトの名無しさん2016/02/19(金) 22:09:36.87ID:ey834T6r
>>21-22
別スレへ誘導します。

スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]・2ch.net
http://peace.2ch.net/test/read.cgi/tech/1454219795/
0024デフォルトの名無しさん2016/02/19(金) 23:18:21.06ID:3+R+uPn1
Collectionに出力データをいれ転記するイメージは掴めましたが

出力データは最大300行×6列で3帳票(それぞれ別々)

あるのでこの場合18個のCollectionを作らなければならないのでしょうか?

又クラス化でもなんでもいいので少しでも処理が早くメモリ負担が少ない方法も教えてください

なお出力シートはA-B,C-D,E-F,G-H,I-J,K-Nでセルの結合を掛けており、それを外すことは不可能です
0025デフォルトの名無しさん2016/02/19(金) 23:22:12.94ID:hdqL8A7v
>>24
出力は配列にしても行と列を逆に作らなくて済むことは分かったんだよね?
配列の方がワークシートに貼り付けるとき楽だけど、コレクションにするの?
0026デフォルトの名無しさん2016/02/19(金) 23:37:12.23ID:3+R+uPn1
>>25
途中で挿入しなきゃいけない場所があるのでメモリ負荷がかかるのでコレクションのほうがいいかなって思いました
ただPCがi5のメモリ2GB環境のとこなのが心配

今の処理でさえ画面が真っ白で応答なしになるし(裏で処理はうまいこと動いて出力はできている)
0027デフォルトの名無しさん2016/02/19(金) 23:45:00.29ID:0dFLUPZi
情報小出しにするヤツには関わらない方がいい
0028デフォルトの名無しさん2016/02/20(土) 03:21:31.51ID:Nzf7yXNI
>>24
18個のColllection?
それは素晴らしい考え方だ!

でも他にもColllectionに配列や
クラスのインスタンスを入れておく方法もあるよ。

後、メモリやスピード最重視するなら、配列をままペタッとやるならともかく途中色々やるなら
そもそも配列やCollectionを介在させないで大元から直接Cellに設定させて行く方が早いんじゃないの?
それが出来るならの話だけど。
0029デフォルトの名無しさん2016/02/20(土) 05:53:48.90ID:G849YxIn
>>16
これホント?
少なくともうちの2007では標準に戻るんだが

>>26
画面が反応しなくなるのはメモリ量と関係ないぞ
使用するメモリをけちりたいならシート(セル)を直接操作した方がいい
配列はセルに何度もアクセスするなら速くできる可能性があるってだけ
スピードとメモリ消費量は大概の場合はトレードオフ
0030デフォルトの名無しさん2016/02/20(土) 07:25:25.69ID:14d1o+GN
>>28
クラスインスタンスと配列も調べてみますが
途中挿入考えると配列じゃ内ほうが良さそうですね。
>>29
画面が反応しなくなる原因て何かありますか?
0031デフォルトの名無しさん2016/02/20(土) 09:53:55.57ID:JAd6JhiG
「途中挿入」の意味を勘違いしてそうだ
0032デフォルトの名無しさん2016/02/20(土) 10:41:02.60ID:jIhi6tPT
>>26の「メモリ負荷」ってのもよくわからんな。
ReDim Preserveのことなら結局サイズが確定してないってことだし、条件があやふやだ。
0033デフォルトの名無しさん2016/02/20(土) 11:38:28.22ID:8LlrSvQq
最大300*6*3って分かってるなら、最初からそのサイズで作ればいいのに
メモリ負荷が〜〜っていうけど仕様的にそのサイズが作れないならパソコンを変えるべき

初心者は無駄に複雑なシステム作らずに決め打ちで出来る領域まで下ろしてくる方がいい
0034デフォルトの名無しさん2016/02/20(土) 11:53:42.06ID:14d1o+GN
>>32
出力行数は最大であり
可変なんです
>>33
パソコン買えるのは無理ですな
0035デフォルトの名無しさん2016/02/20(土) 12:06:02.17ID:JAd6JhiG
>>34
可変と言ってもだいたい2通り想像できる。
アウトプットを作ってるループに入る前には行数が決まるパターンと
ループの中でも行数が増やさなきゃならなくなるパターン。

後者ならたしかに厄介な点があるかもしれないけど、そういうこと?
0036デフォルトの名無しさん2016/02/20(土) 12:06:41.56ID:JAd6JhiG
×行数が増やさなきゃならなくなる
〇行数を増やさなきゃならなくなる
0037デフォルトの名無しさん2016/02/20(土) 12:16:00.31ID:14d1o+GN
>>35
ループ中に行数が決まる
例えば前列が全く同じものだったらカウントするてきな感じですね
0038デフォルトの名無しさん2016/02/20(土) 13:19:17.09ID:2UhdvvRY
>>37
どっちにしろ最大サイズが分ってるならその大きさで宣言しとけば良いだけじゃん
Redim Preserve がどうしても必要になるのはあとからサイズを大きくするときだけで
小さくなる分にはそんなの必要ないんだから(でかいまま使えば小さくする必要そのものが無いって意味で)
メモリの無駄とかなんとかはよほどでかい配列でなけりゃ関係ないよ
0039デフォルトの名無しさん2016/02/20(土) 15:34:53.79ID:jtnfjqEh
>>38
なんつーか、現代の言語からすると、随分と古臭いというか融通の聞かない
設計だな。VBAって
0040デフォルトの名無しさん2016/02/20(土) 15:45:53.25ID:jIhi6tPT
>>39
いや、再拡張しながらのpush backとか標準で用意されてないだけで自分で作ればいいのさ。
実行時効率の面では一緒だし。
0041デフォルトの名無しさん2016/02/20(土) 16:26:53.86ID:jtnfjqEh
>>40
自分で用意する時点で論外だよ。こんなもの。

他の高級言語じゃこんな馬鹿な仕様にしてないの。
0042デフォルトの名無しさん2016/02/20(土) 17:04:46.81ID:jIhi6tPT
>>41
それだとVBAが高級言語の位置付けになっちゃうよ。
弄りがいはあるからそういうもんだと思えばよい。
0043デフォルトの名無しさん2016/02/20(土) 17:21:21.30ID:7beZ5cKX
「誰かが用意しておいてくれるのが当たり前」というプログラム言語全てに対する挑戦
0044デフォルトの名無しさん2016/02/20(土) 17:41:10.96ID:2UhdvvRY
2次元以下の配列に限るけど、
ワークシートには挿入も削除もソートもスカラー倍も
およそ配列に求めうる全ての操作が可能なんだから
考えようによっちゃExcelVBAほど強力な配列演算を持った言語は他にないんじゃないの?
0045デフォルトの名無しさん2016/02/20(土) 17:51:51.44ID:jtnfjqEh
>>42
カラム数の拡大ならともかく、レコード数の拡大に於いては、行列逆転
しなきゃいけない なんて段階で論外ですよwww 

>>43
アホは議論に参加しなくていい。
0046デフォルトの名無しさん2016/02/20(土) 18:05:57.37ID:jIhi6tPT
>>45
2次元のどっち方向にも拡大可能な言語ってあるの?
多次元は扱いにくいから1次元で扱う方がいいね。
0047デフォルトの名無しさん2016/02/20(土) 18:33:39.71ID:cxrwBSdk
>>43
バカ発見
0048デフォルトの名無しさん2016/02/20(土) 19:07:20.71ID:7FJRvlZ/
>>46
JavaScript

そもそも拡大なんて概念はない。そんな事やってるのVBAくらいなもんだ。今どき
の言語だと。
0049デフォルトの名無しさん2016/02/20(土) 19:27:23.61ID:7beZ5cKX
JavaScriptにVBAみたいな多次元配列あったっけと思って調べたらやっぱりなかった
ジグ配列の拡大でいいならVBAでも出来るよ

というか純粋に疑問なんだけど「言語が何々をやってる」っていう表現は具体的には何を指すんだ?
いちいち処理について書かずとも勝手に言語側で処理してくれる事が先進的であるという主張だと考えていいのか?
0050デフォルトの名無しさん2016/02/20(土) 19:27:27.65ID:jIhi6tPT
>>48
今ちょっとぐぐったけど、JavaScriptはVBAのような2次元配列じゃなさそうだ。
0051デフォルトの名無しさん2016/02/20(土) 19:51:02.61ID:jIhi6tPT
ところでジャグ配列を拡張するときは、ReDim Preserveするのと
もっと大きい空の配列に移しかえるのとどっちが速いかな?
検証してみよう。
0052デフォルトの名無しさん2016/02/20(土) 20:08:40.53ID:jIhi6tPT
結論:同等だった

単純な配列の場合はReDim Preserveの方が圧倒的に速いから、結局こっぢな。
0053デフォルトの名無しさん2016/02/20(土) 20:36:59.46ID:7FJRvlZ/
>>52
早いかどうかなんて基準で語ってませんが?
結論だのなんだの言ってる所悪いけれど。

で、カラム側拡張できても、行拡張できない上に、行列逆転しろなんて馬鹿な
アドバイスしてる人たくさんいる件どうすんの?ww
0054デフォルトの名無しさん2016/02/20(土) 20:51:58.44ID:7beZ5cKX
>>53
どうするもこうするも、言語的な制約だから行列を逆転して拡張すればいいし
C言語処理系の様な動作が欲しいならCollectionを入れ子にすればいいだけ
0055デフォルトの名無しさん2016/02/20(土) 21:01:02.25ID:JAd6JhiG
>>53
君は>>49-50を読んでないのか?
1次元で表現する方が便利だし、その場合は拡張もできるんだよ。
0056デフォルトの名無しさん2016/02/20(土) 21:02:42.98ID:JAd6JhiG
>>53
「カラム側拡張できても、行拡張できない」
と言ってる時点で2次元配列を想定しているようだけど、他言語でも2次元配列の拡張はやってないんでしょ?
0057デフォルトの名無しさん2016/02/20(土) 21:27:27.97ID:7FJRvlZ/
>>55
俺はその話はしていないからなぁww
VBAの配列がクソだって話読んでないのか?ww

>>56
他言語に拡張するなんて概念はそもそもないですよ。だから扱いが楽。
そういう話ですよ。

>>54
だからそれがクソだって逝ってんじゃんww
それをアホがやたらとVBAの配列を崇め奉ってるから弄ってるんだよ。
0058デフォルトの名無しさん2016/02/20(土) 21:31:34.06ID:njY71FFO
ぼくちゃんたちむじゅかちいおはなしちてまちゅね〜がっこうでならったのかな〜あたまいいでちゅね〜
0059デフォルトの名無しさん2016/02/20(土) 21:34:37.22ID:7beZ5cKX
>>57
君、理解していないようだから言っておくけどJavaScriptではVBAで宣言してる多次元配列は作れないからね?
そしてJavaScriptで宣言される様な多次元配列なら、JavaScriptと同じような処理をVBAでも出来るからね?

ところで拡張するって概念がないっていうのはどういう事? 概念はあるけど命令がないっていうなら分かるんだけど
0060デフォルトの名無しさん2016/02/20(土) 21:42:25.33ID:jIhi6tPT
よかったでちゅね〜
0061デフォルトの名無しさん2016/02/20(土) 21:46:31.57ID:JAd6JhiG
多次元配列と言っても二通りあって、配列の配列の配列・・・という再帰的な意味での多次元と「インデックスが多次元」では
本質的に違うものなんだよ。
で、VBAの多次元配列は後者のもの。
0062デフォルトの名無しさん2016/02/20(土) 21:47:36.02ID:JAd6JhiG
「本質的に違う」というのはメモリレイアウトが別物、という意
0063デフォルトの名無しさん2016/02/21(日) 21:44:03.35ID:glOWtbGl
プルダウンリストで○と×を入力していって、○が4つ並んだときに◎に書き換えるって処理をやりたいんだけどどうすればいいのかな
0064デフォルトの名無しさん2016/02/21(日) 22:13:51.75ID:R+dk8jt0
>>30
配列の第一要素を列に、第二要素を行に見立てて最初から入れておけばいいんじゃない?

>>63
どうするも何も、セルが書き変わったイベント拾って◯が四つ並んでたら◎に書き換えてあげればいいんじゃないかな
0065デフォルトの名無しさん2016/02/21(日) 23:24:58.41ID:R+dk8jt0
>>41
まー、そう言うなよ。
Excelの数式が入ったセルなんてリアクティブプログラミングのそれじゃないか。
ある意味関数型言語より進んでるぞ。

もっともUI上にあるものだから単体テストが楽になるとは思えないがなw
0066デフォルトの名無しさん2016/02/22(月) 12:23:41.54ID:GAqrdc9h
>>65
なんか、簡単な手段ないかねぇ

すっと入れられて、さっと参照できるメモリ上のDBみたいな。

メモリ上でデータの塊を作ってそれを、一気にDBへ書込。書込はこの1回
だけにしたい。

もちろんこのメモリ上のデータはプロセスの過程で、編集されたりする。
0067デフォルトの名無しさん2016/02/22(月) 13:08:20.35ID:HAKcPUNY
.Netつかえばいいじゃん。
0068デフォルトの名無しさん2016/02/22(月) 13:15:48.77ID:pPmukUVo
>>66
全然詳しくないんだけどVBAで使えるLINQライブラリってないんだっけ?
0069デフォルトの名無しさん2016/02/22(月) 16:15:29.44ID:GAqrdc9h
>>68
http://days-of-programming.blogspot.jp/2014/10/linq-to-excel.html
こんなのがあるようなんだけれど、なんかな・・・・・

よりいっそうわけわからなくして、難しいものにしてる感じ。
0070デフォルトの名無しさん2016/02/22(月) 18:31:03.46ID:DIbFNfwo
>>66
ワークシートで何の不満が?
0071デフォルトの名無しさん2016/02/22(月) 19:52:41.01ID:UPXYf+sK
データベースならAccessでいいだろ。
そもそも「メモリ上のDB」ってなんだ。DBってデータベースの略じゃないのか?

ExcelVBAでもADODBやDAOなんかのデータベースオブジェクト掴んだり、
Collection型とDictionary型で擬似的なデータベース作ったり、
いくらでも簡単な方法はあると思うんだが何が難しいんだろ。やっぱりDBって何か別の単語か?
0072デフォルトの名無しさん2016/02/22(月) 20:00:09.59ID:pPmukUVo
オンメモリで別プロセス別ユーザからもアクセスしたいとかじゃね?
0073デフォルトの名無しさん2016/02/22(月) 21:14:00.69ID:8oQULV7t
>>72
>オンメモリ
いいなぁーこの響き
0074デフォルトの名無しさん2016/02/22(月) 21:22:02.49ID:rno/ilKi
ほなモンゴメリはどうや
0075デフォルトの名無しさん2016/02/22(月) 21:46:54.16ID:E02j23W3
>>66
そもそも、そこまでやるなら既にExcel側からVBAでちょこっとやると言う範囲を超えてるんじゃないかな。

,NetでDataTable使って一挙にDBのテーブルに反映させる方法があるからそっちを使えばいいよ。
もっとも、テーブルにはキーになる項目がないと使えないようだけど、
最初の設計段階でその辺気を付けて作っておけば問題ない。

どちらにしてもVBA上では無いものねだりでスレ違いになるので、
興味があればVB.NetかC#のスレを覗いてみればいいよ。
0076デフォルトの名無しさん2016/02/22(月) 22:10:55.56ID:Ns1zpvOT
>>65
単体テストとか贅沢言わんから、ブレークポイントとかトレース機能がほしい ⇒ ワークシート関数
0077デフォルトの名無しさん2016/02/22(月) 23:11:46.95ID:m/JWK4nb
イミディエイトウィンドウでこうすると落ちる

expr$ = "string"
expr = Empty

たまたまだろうか?
0078デフォルトの名無しさん2016/02/22(月) 23:12:52.38ID:m/JWK4nb
ちなみに数十分の作業結果が失われたことは言うまでもない。
0079デフォルトの名無しさん2016/02/22(月) 23:23:51.52ID:xKv3RFIS
csvファイルを配列として一気に取り込む方法ってありますか?
また配列の要素を検索する方法ってありますか?
0080デフォルトの名無しさん2016/02/22(月) 23:55:39.80ID:m/JWK4nb
>>79
たとえばだが、
csvファイルを読んで1行ずつ配列にSplitし、ひとつひとつの行をカンマ等で複数の要素に分ける、
というのを実装せざるを得ない。

検索については、ソートされていなければ逐次検索するほかない。
0081デフォルトの名無しさん2016/02/23(火) 00:18:44.04ID:tgtxIEFp
>>79
ワークシート上にCSVファイルを展開してそれを配列に取り込むのを「一気に」と表現していいなら。
でも違うな。
0082デフォルトの名無しさん2016/02/23(火) 03:50:10.17ID:Fn93HfAc
>>80
ソートされてても、「検索」は自分でやらないとダメだけどな
検索のアルゴリズムの問題じゃなくて、検索するメソッドなりが用意されてるかどうかの話だろ
VBAの配列に要素を検索する機能はない
0083デフォルトの名無しさん2016/02/23(火) 06:08:52.47ID:lspxNReJ
VBAではワークブック以下のオブジェクトで検索や並び替えといった汎用的なメソッドを提供してるから、
自分でアルゴリズムが作れないならとにかくシートに貼り付けるところから考えればいい。
0084デフォルトの名無しさん2016/02/23(火) 07:11:53.03ID:tgtxIEFp
>>82
「逐次」
0085デフォルトの名無しさん2016/02/23(火) 07:53:21.43ID:x6PbDvqz
配列の検索は自分で組まなければならないのですね
csv取り込みがいささか面倒ですね
Excelでcsv開いても無理ですよね?
0086デフォルトの名無しさん2016/02/23(火) 08:05:21.80ID:lTXJyxC1
>>85
ExcelシートにCSVを展開してからだったら楽だよ。
0087デフォルトの名無しさん2016/02/23(火) 08:33:55.17ID:dOD1hw4a
>>86
いつも通りの取り込みでよいのですか?
0088デフォルトの名無しさん2016/02/23(火) 09:43:37.39ID:lTXJyxC1
>>87
ええ、いつも通りです。
0089デフォルトの名無しさん2016/02/23(火) 20:15:06.28ID:BnRj76xX
findでセルにあるデータを探して転記するのと
配列を全て検索してデータを探すのはどちらが早いですか?


又配列に重複がないか調べる方法ってありませんか?
0090デフォルトの名無しさん2016/02/23(火) 20:30:17.62ID:lspxNReJ
>>89
検索のみで言えば、全検索で一つの値を探すならFindの方が早い。
列や行が決まっているなら配列にした方がいい。FindもMatchも遅い。

重複は条件にもよるけど基本的には総当たりしかない。こちらは配列にした方がいい。
0091デフォルトの名無しさん2016/02/23(火) 21:43:21.45ID:BnRj76xX
総当りだと
ループでかなり時間はかかりませんか?
0092デフォルトの名無しさん2016/02/23(火) 21:57:12.88ID:tgtxIEFp
重複がひとつもないかは n × n だからサイズには気をつけた方がいいね。
0093デフォルトの名無しさん2016/02/23(火) 22:01:35.23ID:tgtxIEFp
配列のサイズがでかいとしても、各要素のとりうる値の範囲が狭いなら工夫のしようはある。
または配列をソートしておくか。
どちらも条件によっては悪手になりうる。
0094デフォルトの名無しさん2016/02/23(火) 22:04:04.73ID:BnRj76xX
配列はソートしてあり
500件と固定してある場合なら楽ですか?
0095デフォルトの名無しさん2016/02/23(火) 22:08:03.06ID:tgtxIEFp
ソートしてあるんなら隣り合う2項の比較で済むんじゃん
n × n とは比べものにならないでしょ。
0096デフォルトの名無しさん2016/02/23(火) 22:10:32.56ID:Fn93HfAc
状況によりけりだが、重複はCOUNTIFとかのワークシート関数でやった方が早い気がするぞ
0097デフォルトの名無しさん2016/02/23(火) 22:14:54.95ID:tgtxIEFp
>>94
言っとくけど、長さ1000の配列で重複の個数を数える(つまり途中でやめない)という条件で、
なおかつ余計なオーバーヘッドのあるプログラムを使って約600msだぞ。(Core i5)
考えすぎても無駄じゃね?
0098デフォルトの名無しさん2016/02/23(火) 22:27:42.52ID:BnRj76xX
>>97
ありがとうございます

まあソート後に配列内の数値を計算する程度ですね
配列でApplication.WorksheetFunction.RoundDownは使用できましたよね?
0099デフォルトの名無しさん2016/02/23(火) 22:35:08.14ID:tgtxIEFp
>>97のはソートされてない状態(つまり n × n )での数字ね。
0100デフォルトの名無しさん2016/02/23(火) 23:19:55.40ID:KN7Xij53
>>89
ディクショナリーを使うと良いよー
0101デフォルトの名無しさん2016/02/24(水) 09:14:07.67ID:y1msax47
ディクショナリーとコレクションの使い分けが
イマイチよくわからない
どっちも似たような事出来るよね
0102デフォルトの名無しさん2016/02/24(水) 09:38:25.57ID:tgj274Po
ディクショナリーって重複管理ができるんだっけ。
でもワークシートから大量に取り込むのに向いてるかどうかは知らない。
また、重複のないデータのセットを構築するという目的を達成した後、何かしら処理をするんだろうが、
汎用性としてどうなのかも知らん。
まあ使ってみて判断しよ。
0103デフォルトの名無しさん2016/02/24(水) 19:47:18.17ID:ZfArvAzS
ttp://iup.2ch-library.com/i/i1605741-1456310708.png
すいません、オートシェイプを操作するマクロを作りたいのですが
このようなパターンのとき、
画像のD,Eを逆の位置にマクロで動かすことは可能でしょうか?
コネクタは繋がっている前提です。
0104デフォルトの名無しさん2016/02/24(水) 20:32:17.95ID:/kngbYQw
>>103
コネクタが オートシェイプに接続されてる状態なら そのシェイプを移動するだけでいい
たとえばこんな感じ(D と E の位置が逆になる)

Set D = ActiveSheet.Shapes("Rectangle D")
Set E = ActiveSheet.Shapes("Rectangle E")

'Dの位置保存
Save_LEFT = D.Left
Save_TOP = D.Top

'Dの位置を変更
D.Left = E.Left
D.Top = E.Top

'Eの位置を変更
E.Left = Save_LEFT
E.Top = Save_TOP
0105デフォルトの名無しさん2016/02/24(水) 23:53:18.08ID:qODGIMFE
C#のwebbrowserコントロールでlE操作するのとVBAでIE操作するのとでは
どっちの方が実装楽ですか?
0106デフォルトの名無しさん2016/02/25(木) 00:55:43.58ID:hzvqnnNR
>>101
確かDictionaryは参照設定しないと使えないけど値の書き換えが出来て、
Collectionはそのまま使えるけど値を変えるときは一度Removeしてからもう一度追加しなければいけないとか
そんなのがあったような
0107デフォルトの名無しさん2016/02/25(木) 05:54:34.79ID:BSgblPDp
>>106

へー、ちょっと違うところもあるんだね
勉強になった、ありがとう

でもディクショナリーはファイルシステムオブジェクトと同じで
Microsoft Scripting Runtime (scrrun.dll)を参照設定すると便利になるけど
参照設定しなくてもCreateObjectすれば使えるよ
0108デフォルトの名無しさん2016/02/25(木) 06:29:43.10ID:s0Et/ttK
Dictionary型はCollection型と違って順番が保証出来ないのも相違点だな。前者は数字をKeyに出来るけど後者は無理ってのも。
順序が必要なものはCollection型で、重複しない事が重要なものはDictionary型にするといいのかも。

ところでKeyとItemが相互に検索可能な型ってないかな。
DictionaryでもItemからKeyを割り出すには総当たりする必要があるんだよね。
だから相互に検索したい場合は必ずKey,ItemとItem,Keyの二種類作らないといけないのが難点。
0109デフォルトの名無しさん2016/02/25(木) 07:02:34.77ID:mCYGSnMq
>>108
クラスモジュールで自分好みなの作ったほうがよくないか?
0110デフォルトの名無しさん2016/02/25(木) 07:49:00.88ID:L7nuKMZK
Itemも重複しないってか
01111032016/02/25(木) 10:28:36.61ID:GyIo03vy
>>104
こらタコ。
そのまんまじゃないか。

そうじゃなく、
シェイプがたくさんあり、それらがコネクタでつながっていたとき、
すべてのコネクタが交差しないように自動配置したいとき
それはどういうコードを書けばいいのかな、と考えているのですが。
0112デフォルトの名無しさん2016/02/25(木) 10:38:33.06ID:zmh5F+ll
指定コネクタにくっついてるシェイプ全部のLeftを同じにすればいいんでないの?
01131032016/02/25(木) 11:04:27.27ID:GyIo03vy
>>112
それだと
1つのシェイプから2つのコネクタが分岐するように下につながっている場合に
2つのシェイプが重なってししまわないですか?

シートに存在するすべてのコネクタでそれが分岐してるものかどうか判定する方法があればいいのですが。
シェイプやコネクタに便利なプロパティとかないですか?
0114デフォルトの名無しさん2016/02/25(木) 11:15:21.22ID:L7nuKMZK
>>113
分岐してる場合のずらしかたをまず定義しろ。
下方向や横方向のスペースの有無にもよるのか?
0115デフォルトの名無しさん2016/02/25(木) 11:32:52.44ID:mCYGSnMq
>>113
座標がわかるんだから
交差してるか計算すればいいじゃん
中学生レベルの数学
0116デフォルトの名無しさん2016/02/25(木) 12:47:36.07ID:6DvGm9a+
>>111
そもそも>>103の時点できちんと要件を提示していなかった癖に、回答者に対して悪態をつくとか
君の親御さんはマトモな躾も出来なかったのか?
要するにシェイプの移動ではなくコネクタを交差させないシェイプの配置を考える問題なら、まずは一つのシェイプは最大でいくつのコネクタに繋がってるのかとか、それがループする事は有り得るのかとか、そういう基礎的な条件提示がなけりゃだれにも回答できねーよ
(例えばループの中と外にあるシェイプ同士を何処とも交差せずに繋ぐのは不可能だしね)
そこまでややこしくない単純な樹形図みたいなやつなら
上流から順に見ていって縦横際限なく使えば良いだけじゃん
0117デフォルトの名無しさん2016/02/25(木) 12:54:41.32ID:5AA/JocP
キレてるんですか?
0118デフォルトの名無しさん2016/02/25(木) 12:59:54.85ID:YW3/y7UA
せやな
0119デフォルトの名無しさん2016/02/25(木) 13:53:09.83ID:UlMFP09h
>>108
Collectionも順番が保証されなかった気がする。
0120デフォルトの名無しさん2016/02/25(木) 20:29:01.53ID:2hov+RIN
>>108
もう15年以上 VBA 使ってたけど Collection でキーが指定出来るのを今知ったわ OTZ…
でもキーが存在するかを確認するすべがない(全て検索するかエラートラップで判定するしかない)
なんかこう言う大事なところが抜けてるんだよな、MSって

>>119
追加するときにシートの追加と同じように追加する場所も指定できるみたいだから、順序は保持されるっぽい
http://vbafrs.com/common/doc/main.php?contentsno=201003
0121デフォルトの名無しさん2016/02/25(木) 20:56:13.16ID:s0Et/ttK
>>120
むしろエラーで返すからキャッチすりゃいいだろ的な思想の様な気がする。
他のエラーが入り込まない単位に関数化してエラーで返す方が処理速い事もあるし(シートの指定とか)、
そうでないと調べられないものもある。(配列の次元数カウントとか)
0122デフォルトの名無しさん2016/02/25(木) 20:59:59.00ID:EtQljN7P
配列の次元数カウントとLBound値の変更が公式にできないのは本当に怠慢。
0123デフォルトの名無しさん2016/02/25(木) 21:13:17.22ID:2hov+RIN
>>121
> むしろエラーで返すからキャッチすりゃいいだろ的な思想の様な気がする。
それが気にくわないって話
ファイルオープンみたいにどうしようもないケースならわかるが、ExistKey( ) みたいなのをつけるだけでいいのに
てか、キーでアクセスできる仕様にしたら普通そういう手段用意しないか?
0124デフォルトの名無しさん2016/02/25(木) 21:27:38.70ID:EtQljN7P
>>123
Count( ) でいいんじゃない?
0125デフォルトの名無しさん2016/02/25(木) 21:28:26.65ID:EtQljN7P
>>124はもし追加するなら、って意味ね
0126デフォルトの名無しさん2016/02/25(木) 21:53:09.39ID:s0Et/ttK
設計思想の問題が絡むから、あれもこれもって言い出したらキリが無いしなー。
Collection型は列挙が目的であって、Mapする事が目的のDictionary型とは違うだろうし。
0127デフォルトの名無しさん2016/02/25(木) 23:29:01.95ID:ZlQNTHYh
>>126
> Collection型は列挙が目的
なら Key なんて要らんだろ
やってることがちぐはぐなんよ
0128デフォルトの名無しさん2016/02/25(木) 23:43:14.65ID:EtQljN7P
うーん、ちょっと使い道が狭いなあ
0129デフォルトの名無しさん2016/02/26(金) 05:08:03.17ID:ep0rFBnF
>>127
WorkbooksやWorksheetsを人間の管理単位(=Key)で指定できたら便利だけど、
それが何番目であるかと常に結びつける必要性は薄いだろ。

あくまで人間の管理単位だから重複さえしなければマシン側は混乱しないし。
0130デフォルトの名無しさん2016/02/26(金) 07:19:07.84ID:RsrUGJ3O
>>129
>WorkbooksやWorksheetsを人間の管理単位(=Key)で指定できたら便利だけど、
>それが何番目であるかと常に結びつける必要性は薄いだろ。

WorkbooksやWorksheetsを扱うのにKeyを指定するのは
それが何番目であるかにKeyを使うのと同じくらい必要性が薄いかな。

普通そのWorkbookやWorksheets固有の処理を行うときは多態性で始末するから。
0131デフォルトの名無しさん2016/02/26(金) 07:53:52.54ID:SzRtePL2
ちょっとその多態性の定義を言ってみてくれないかな
0132デフォルトの名無しさん2016/02/26(金) 08:20:16.24ID:RsrUGJ3O
>>131
どう言う意味で?

WorkbookやWorksheetで個別の処理を行うのに多態性を使うと言ったら
そのWorkbookやWorksheetの役割に合わせて振る舞いを変えるように
コンポジションやデリゲーションを使って組むようなことをこちらは想定してるけど。

他に何か捉えようがあるということ?
0133デフォルトの名無しさん2016/02/26(金) 08:28:40.81ID:SzRtePL2
同じ型のインスタンス毎の振る舞いの違いを指して「多態」と呼ぶのは一般的じゃない。
0134デフォルトの名無しさん2016/02/26(金) 08:44:27.62ID:RsrUGJ3O
>>133
同じ型?何を言ってるんだ?
0135デフォルトの名無しさん2016/02/26(金) 11:14:38.11ID:J5IqE0Yl
シェイプがたくさんあってある条件のものはその大きさを変えるコードを書いているんですが
問題は大きさが大きくなったとき他のシェイプと重なることを避けたいけどその判定が困難。
なにかいい方法はありますか?

単純に大きさを変えるときに重なるかどうか調べるときに他のすべてのシェイプと
For Each tmpShape in Activesheet.Shapes
を使って1つ1つ比べるのですが
もし重なりそうなら重なられるシェイプを右下方向に移動したいのですが
その移動によってまた「連鎖的に」重なる可能性があるわけじゃないですか?

言ってる意味はわかりますかね?
0136デフォルトの名無しさん2016/02/26(金) 11:16:23.46ID:J5IqE0Yl
x その判定が困難
o その方法が困難
0137デフォルトの名無しさん2016/02/26(金) 11:17:50.55ID:J5IqE0Yl
つまり要はシェイプ同士が重なることは絶対に避けたいわけです。
0138デフォルトの名無しさん2016/02/26(金) 11:47:55.97ID:SzRtePL2
>>134
君は>>130で何を言ってるんだい?
WorkSheets(1)とWorkSheets(2)に異なる処理を施すときに多態性で始末するんだろう?
0139デフォルトの名無しさん2016/02/26(金) 12:04:49.44ID:l/+aTNAI
大きさ変えたときにずらすんじゃなくて
処理の最後に重なりがなくなるまでDoループすればどうかな。
0140デフォルトの名無しさん2016/02/26(金) 12:12:44.30ID:ZKuQ06pR
>>138
そうだよ。それで?続けて。
0141デフォルトの名無しさん2016/02/26(金) 12:16:28.41ID:J5IqE0Yl
>>139
アドバイスありがとうございます。
でもそれってアルゴリズム的には同じじゃないですか?

もしよろしければ具体的なコードを教えてほしいのですが。

たとえばシェイプがActivesheet.Shapes.Count個あって
大きさを変える場合は右にincX、下にincYだけ増やしたいとします。
重なるかの判定の関数は、
Function isOverlap (shp1 as Shape, shp2 as Shape) as Boolean
とでもすると
Doループの中のコードはどんな感じになりますか?
0142デフォルトの名無しさん2016/02/26(金) 12:20:47.73ID:x5+an1W2
お前ら本当によく暴投ばかりのキャッチボール続けられるな
0143デフォルトの名無しさん2016/02/26(金) 12:25:05.60ID:SzRtePL2
>>140
>>131の質問に答えよ
0144デフォルトの名無しさん2016/02/26(金) 12:27:35.29ID:ZKuQ06pR
>>143
だからそうだって答えてるじゃない。
それにどんな矛盾があるのか聞いてるんだけど。
だから続けてと言っている。
0145デフォルトの名無しさん2016/02/26(金) 12:35:08.69ID:ZKuQ06pR
ああ、多態性の定義ね。

むしろこっちが、そっちがどう思ってるのか聞きたいわ。

同じクラスで作成したインスタンスの振る舞いの違いを「多態性」と呼ばないということは、
.NetでいうDelegate、つまりVBAでそれはないが同じ結果を求めることが出来るCall By Nameとかは
「多態性」とは呼ばないと言っているんだよね。

これは何でだ?
0146デフォルトの名無しさん2016/02/26(金) 12:44:05.19ID:ZKuQ06pR
>>144
ネットで見てたらちょうどいい文言があったので、これを使わせてもらう。

「実行される処理の実体が、コールされたメッセージではなく、メッセージを受けたオブジェクトによって決定される性質」のこと。

VBAでは継承が使えないので移譲とか委託と言われている方式を使う。

それを持って多態性と呼ぶということでいいか?
0147デフォルトの名無しさん2016/02/26(金) 12:56:50.89ID:SzRtePL2
>>146
ああ、それでいいよ。悪かった。
こっちは「WorkSheetオブジェクトが属するクラスを実行時に変えて多態するほげふがな方法」の話かと期待していた。
0148デフォルトの名無しさん2016/02/26(金) 17:17:06.66ID:m7cX7XjE
昇順、降順、ユーザー設定の並べ替えがされたかマクロで検出できませんか?
worksheet_Changeじゃわかりませんよね?
0149デフォルトの名無しさん2016/02/26(金) 19:54:13.01ID:J5IqE0Yl
シェイプがいっぱいあって
それをCollectionに入れるとき
各シェイプのLeftプロパティとTopプロパティをこの順でソートして並べ替えるには
いい方法はありますか?

ひょっとして全部自分でソートのコードを0から書かないといけませんか?
0150デフォルトの名無しさん2016/02/26(金) 20:07:18.31ID:SzRtePL2
ソートのコードを書くのはかったるいかも知れないけど、汎用的なものを一度作ってしまえば、いろんなとこで使える。
0151デフォルトの名無しさん2016/02/26(金) 20:13:56.67ID:ep0rFBnF
>>146
問題はその「メッセージを受けたオブジェクト」によって、
「始末する」としている>>130の主張がどういう意図なのかなんだけどな。
0152デフォルトの名無しさん2016/02/26(金) 20:54:08.51ID:ep0rFBnF
>>149
ソートアルゴリズムならWorksheetに一回吐き出せば優秀なのが使える。
0153デフォルトの名無しさん2016/02/26(金) 20:59:38.60ID:faygSoUQ
俺は何度もチャレンジしたけどVBAで汎用性のあるソート関数は書けなかったな
良い書き方があるなら教えてほしい
0154デフォルトの名無しさん2016/02/26(金) 21:11:11.85ID:SzRtePL2
>>153
サイトは覚えてはないけど、VBAでのクイックソートのサンプルは結構上がってる。
難しさは求める汎用性の程度にもよるだろうけど。
0155デフォルトの名無しさん2016/02/27(土) 00:59:46.12ID:RZH3xb+7
>>149
これはよく読むと、一般的なSortプログラムは必要なさそうだね。

「Collectionに入れるとき」と明言しているということは、まだCollectionには何も入ってないときのスタートになるので、
最初の1回目は普通にaddして、その後はCollectionに積み立てたShapeを捜査し、Leftプロパティが
追加対象の同プロパティより大きくなった、またはLeftプロパティが同じでTopプロパティが追加対象の同プロパティより大きくなったとき、
その前に追加してやればいいんじゃないかな?
0156デフォルトの名無しさん2016/02/27(土) 18:10:19.33ID:AaTWQGJl
>>137
あらかじめセルの幅をshapeが被らないぐらい大きくしといて、
あとからセルの幅を自動で調整すれば良いだけでは?
0157デフォルトの名無しさん2016/02/27(土) 20:28:26.50ID:IvmFPQhF
Workbooks("1.xls").Activate
Worksheets("Sheet1").Select
これを1行で記述する方法はありますか?
0158デフォルトの名無しさん2016/02/27(土) 20:35:34.69ID:LKPjzWRE
>>157
Workbooks("1.xls").Activate: Worksheets("Sheet1").Select
もし1命令でって言うんなら無理
そのブックをSelectだけ出来ればよいなら
Workbooks("1.xls").Worksheets("Sheet1").Select
で出来る
0159デフォルトの名無しさん2016/02/27(土) 20:40:06.27ID:B9pq57vq
>>157
Workbooks("1.xls").Worksheets("Sheet1").Select

こういう事じゃ無いのか?
0160デフォルトの名無しさん2016/02/27(土) 20:40:54.65ID:IvmFPQhF
>>158
ありがとうございました。すっきりしました。
0161デフォルトの名無しさん2016/02/27(土) 20:44:40.73ID:IvmFPQhF
>>159
ありがとうございました。
0162デフォルトの名無しさん2016/02/27(土) 20:45:04.02ID:GQuhwfDJ
クリップボード使って値コピーするコード書く奴は滅びてほしい
0163デフォルトの名無しさん2016/02/27(土) 20:50:07.41ID:B9pq57vq
>>162
VBAマクロのHowToサイトで「マクロの記録機能を使ってみましょう」という教え方してる限り無くならないだろうな。
既存の有名なサイトを凌駕するようなExcelVBAマクロのサイトを作る以外にない。
0164デフォルトの名無しさん2016/02/27(土) 22:14:34.86ID:TnvXsjWd
>>162
もうちょっと品ぞろえを増やしてさー、〜べからず集とかないの?
0165デフォルトの名無しさん2016/02/27(土) 23:35:53.32ID:qno9RqRg
>>162
べつにいーじゃん
それでうごくんだから
0166デフォルトの名無しさん2016/02/27(土) 23:55:03.39ID:TnvXsjWd
他のアプリでもコピーが発生してたらどうなるんだっけ?
0167デフォルトの名無しさん2016/02/28(日) 00:04:29.01ID:wJzAdt4L
>>164
変数名は一文字にするべからずとか、
このスレでコードは書くべからずとか?
0168デフォルトの名無しさん2016/02/28(日) 00:41:52.16ID:b7qY0//8
おちんちん
0169デフォルトの名無しさん2016/02/28(日) 00:56:15.60ID:sl3mg8QG
目的によって選択すべき手段が変わるし、どんな環境で使うものかで適切・不適切が変わる。
それを考慮せずに推奨・非推奨の話を始めると宗派の問題もあって泥沼になる。
0170デフォルトの名無しさん2016/02/28(日) 02:49:21.29ID:/1Tq8dlS
Right関数を使って文字を抽出したいのですが
よねさんの解説では

 myStr = "ABCDEFG"
  Range("B3").Value = Right(myStr, 3)

一度変数に置き換えて抽出していますがわずらわしので
A1セルなどのセルに記載された数値や文言をダイレクトに指定して
文字を抽出するにはどうすればいいのでしょうか?
0171デフォルトの名無しさん2016/02/28(日) 02:51:41.53ID:/1Tq8dlS
>>170
これを書いて投稿したとたんに思いつきました!ww
Sub aa()
Range("B3").Value = Right(Range("a1"), 3)
End Sub
これでできるのですね。事故解決!!
0172デフォルトの名無しさん2016/02/28(日) 02:58:01.82ID:/1Tq8dlS
よねさんの解説は回りくどいので正直むかつきます 
あと例文に考える余地が隠されていて考えないと例文が理解できないようになっていたりするので急いでいると非常にむかつきます。 
複数のレベルで例文が記載されてたらもっと使う人が増えると思うが
私は極力見ないようにしています。
0173デフォルトの名無しさん2016/02/28(日) 03:02:16.63ID:/1Tq8dlS
回りくどい解説に振り回されると時間がもったいない!!
0174デフォルトの名無しさん2016/02/28(日) 03:09:34.52ID:sl3mg8QG
・よねさんって誰だよ。
・ここはお前の日記帳じゃないんだ。チラシの裏にでも書いてろ。
・そんな低レベルな事すら分かってないのに緊急でマクロ作るとか悪手過ぎるだろ。
0175デフォルトの名無しさん2016/02/28(日) 06:44:27.28ID:3hiq91mT
よねさんを知らないのか?
0176デフォルトの名無しさん2016/02/28(日) 09:45:37.94ID:emPXsfmM
「よねさん」でググったらすぐ出てきたけど、これ個人サイトだろ。
ぜいたく言っちゃいかんと思う。
0177デフォルトの名無しさん2016/02/28(日) 10:46:32.90ID:5Fk6wisR
>>156
どういいうことでしょう?
シェイプの話をしているのになぜセルの幅の話になるのでしょう?
0178デフォルトの名無しさん2016/02/28(日) 11:14:42.81ID:jDjzCPWr
>>172
悪いけどプログラマー向かないと思う。
0179デフォルトの名無しさん2016/02/28(日) 11:30:36.79ID:kYd0kHZJ
よねさんは知らんがエクセルVBAの解説をプログラマーしか理解出来んような文章で書いてたら文句言われんのも無理はないけどな
0180デフォルトの名無しさん2016/02/28(日) 12:44:17.68ID:5n5R60tK
解説記事に限らず情報発信は難しい。
誰ともわからないターゲットに向けて書くんだから。

>>178
急にどうした?話が飛躍してるぞ。
0181デフォルトの名無しさん2016/02/28(日) 12:51:47.81ID:awPHDJ6K
>>172
月末の深夜という時間を考えると
切実な思いではないかと勘ぐってしまう
0182デフォルトの名無しさん2016/02/28(日) 12:57:49.47ID:sl3mg8QG
月末の仕事で切羽詰まってるとしても、それでむかつく相手は無計画な上司か自分の不甲斐なさだろ。
0183デフォルトの名無しさん2016/02/28(日) 13:30:48.59ID:5n5R60tK
仕事の話??
0184デフォルトの名無しさん2016/02/28(日) 13:37:43.35ID://Tt5fxk
>>170
これでつまづくようでは、シート関数で頑張れとしか言いようが無い。よねさんがかわいそうW
0185デフォルトの名無しさん2016/02/28(日) 13:39:52.10ID:k2lRb1XX
>>162
MSには、アクティブシートでないと動作しない関数を無くしてほしいわ
Workbook("Book1.xls").Worksheets("sheet1")まで指定してるなら非アクティブシートでも動いていいだろ・・
0186デフォルトの名無しさん2016/02/28(日) 13:45:02.51ID:sl3mg8QG
アクティブシートじゃないと動かない関数ってなんかあるっけ?
0187デフォルトの名無しさん2016/02/28(日) 13:57:51.09ID:knUnpIjS
>>177
これではだめですか?
Option Explicit

'重なり解除処理メイン
'すべてのシェープのサイズ変更後一度だけコールする
Sub solve_overlaps()
Dim myshapes As Collection
Set myshapes = New Collection

get_all_shape myshapes:=myshapes

While (solve_a_overlap(myshapes))
Application.ScreenUpdating = False
Application.ScreenUpdating = True
'MsgBox
0188デフォルトの名無しさん2016/02/28(日) 14:00:51.93ID:W6vHfvKU
>>184
よねさんはなぜ変換する文字を変数に定義しているのか?
無駄な作業であるしRightの使い方とも直接関係が無い。
0189デフォルトの名無しさん2016/02/28(日) 14:04:32.93ID:knUnpIjS
'MsgBox "重なり解除しました"
Wend
End Sub

Sub get_all_shape(myshapes As Collection)
Dim shp As shape
For Each shp In ActiveSheet.Shapes
myshapes.Add Item:=shp
Next
End Sub

Function solve_a_overlap(myshapes As Collection) As Boolean
Dim targshape As shape, targ2shape As shape
For Each targshape In myshapes
For Each targ2shape In myshapes
If (Not (targshape Is targ2shape)) Then
'targshapeとtarg2shapeの位置比較
If (isOverlap(targshape, targ2shape)) Then
'重なり解除
move_shape targshape, targ2shape
solve_a_overlap = True
Exit Function
End If
End If
Next
Next

solve_a_overlap = False
End Function
0190デフォルトの名無しさん2016/02/28(日) 14:05:28.07ID:knUnpIjS
Function isOverlap(shp1 As shape, shp2 As shape) As Boolean
If ((shp1.top + shp1.Height < shp2.top) Or (shp1.top > shp2.top + shp2.Height) _
Or (shp1.Left + shp1.Width < shp2.Left) Or (shp1.Left > shp2.Left + shp2.Width)) Then
isOverlap = False
Else
isOverlap = True
End If

End Function

Sub move_shape(shp1 As shape, shp2 As shape)
If (shp1.Left < shp2.Left) Then
shp2.Left = shp1.Left + shp1.Width + 20
shp2.Select
Else
shp1.Left = shp2.Left + shp2.Width + 20
shp1.Select
End If
End Sub
0191デフォルトの名無しさん2016/02/28(日) 15:24:01.03ID:+tan6Mbq
>>188
無駄な作業かと言われればそうかもしれないけど、
その辺は自分に合ったように代えてやればいいだけ。

別に回りくどいだのむかつくだのと、がなり立てる時間があるなら頭のいい奴ならその分作業に回すわな。

逆に変数を使わないで直接設定されてた方式が書かれていたとして、
読んだ方が複雑な加工とか手持ちに抱えていたら何で変数に入れるような初心者向けの書き方をしないんだって文句言うかも知れないしな。

こういう輩と付き合ってたらきりがないと思うぞ。
0192デフォルトの名無しさん2016/02/28(日) 16:09:57.62ID:YwfZTd1C
>>188
そのサイト見てないけど
文字列が変わる事も考慮してあとから関数化したり
クラス化したりする事も見込んでるからじゃね
0193デフォルトの名無しさん2016/02/28(日) 16:19:27.47ID:DLtammmL
>>156
単に重なんなきゃいいだけなら
大きさ変えた時に
・その図形より右の図形全てをその分だけ右にずらす
・その図形より下の図形全てをその分だけ下にずらす
でいいだろ
ただこれだと不要な移動が発生するから、結構スカスカになるが
0194デフォルトの名無しさん2016/02/28(日) 16:58:03.01ID:emPXsfmM
>>188
あいつらは
ロバの正しい使い方も知らない
バカだ!
0195デフォルトの名無しさん2016/02/28(日) 18:59:41.19ID://Tt5fxk
>>188
書店に行って2000円ぐらい出せばVBAの入門書が買えるからまずそこからやるべきだね。つうか、シート関数も良く分からない
レベルなんじゃね?よねさんに謝れよw
0196デフォルトの名無しさん2016/02/28(日) 19:07:55.45ID:kYd0kHZJ
ここクソサイトを話題にするスレだっけ?
0197デフォルトの名無しさん2016/02/28(日) 19:23:57.14ID:eCLIeqLo
よねさんて何者?
0198デフォルトの名無しさん2016/02/28(日) 20:03:57.66ID:PslYhxFh
大人しく田中さん読んどけ
0199デフォルトの名無しさん2016/02/28(日) 21:30:33.33ID:emPXsfmM
自由に定義されたどんな大小関係でも配列をソートできる関数を発明しました。
0200デフォルトの名無しさん2016/02/28(日) 23:20:08.21ID:KtfSADQf
>>198
田中最高
0201デフォルトの名無しさん2016/02/29(月) 00:45:41.03ID:tABY92kx
田中さんで大体事足りるが馴れてくると緑色のページに実用的なコードがかいてあって手っ取り早い
行き詰まるとオレンジのページを見ると答えが書いてある場合がある。関数ならたまによねさんを見る
0202デフォルトの名無しさん2016/02/29(月) 00:48:50.36ID:tABY92kx
基礎は上のサイトプラスExcelでお仕事とかってサイトで覚えた
本は一度も読んだことが無い。w
02031772016/02/29(月) 10:11:38.10ID:MR//pEg8
>>187
神!
素晴らしい。ありがとうございます。
コードを解読しました。ちゃんと動きそうですね。
シェイプは100個くらいあることがあるんですが処理速度がどうなるか楽しみです。
0204デフォルトの名無しさん2016/02/29(月) 12:05:09.77ID:MR//pEg8
まれなことだけど問題点を発見。
もしいくつかのシェイプを拡大したときに
2つじゃなくて3つ(あるいはそれ以上)のシェイプが重なることがあるんです。

図ではうまく書けないけど
[ 1 ] [ 2 ] [ 3 ]
の3つがシェイプだとしてそれぞれが3倍の大きさになれば3つは重なることがイメージできるでしょう。

そのとき>>187のコードでは各シェイプの水平レベルにおける順番は保障されるでしょうか?
つまり実行後の順番が例えば
[ 2 ] [ 3 ][ 1 ]
となってはまずいわけです。
0205デフォルトの名無しさん2016/02/29(月) 12:08:44.55ID:MR//pEg8
保障されてる気もしますね。
0206デフォルトの名無しさん2016/02/29(月) 13:00:03.70ID:/xxXVfSp
1と3の間隔が1の拡大幅に比べて十分広ければ大丈夫ですがそうでなければ逆転します
(左端の位置がより右のものを移動してるので左端位置が逆転するとダメ)
上下にずれてるものがかぶる時に左右のずれが小さくなるとか
下のシェープの方が左にあることがあるとかだとぐちゃぐちゃになるので使えないと思う
0207デフォルトの名無しさん2016/02/29(月) 20:17:38.19ID:VE+sVuWQ
いい加減、ここでコード書いて貰おうとするんじゃなくて、
仕事発注サイトか何かで金出して作って貰った方がいいと思うわ。
0208デフォルトの名無しさん2016/03/01(火) 00:37:23.14ID:zdx9sUTB
よねさんは何歳ですか?
0209デフォルトの名無しさん2016/03/02(水) 12:01:33.30ID:c0Q8HsxZ
Collectionで
その中に特定のデータが入ってる要素が存在するかどうか確認するメソッドってないでよね。
だからそれを自作する場合、その作成したメソッドisExist()はどこに置けばいいですか?
継承がないからそのCollectionに入れられないし。

具体的には
Dim Col as Collection
Set Col = New Collection
(中略)
If Col.isExist(tmpObj) Then
のようにCollectionのメソッドとして使えれば便利だけど使えないじゃないですか。
0210デフォルトの名無しさん2016/03/02(水) 12:15:23.44ID:L3RjSFzH
>>209
> Collectionのメソッドとして使えれば便利だけど

便利か?
今時はフリー関数派が大勢じゃないのかな?
0211デフォルトの名無しさん2016/03/02(水) 12:23:28.49ID:TALPhVNW
意識高い系がVBAスレまで進出してきたか
0212デフォルトの名無しさん2016/03/02(水) 12:34:24.92ID:47TZ9f/Z
VBA脳の人達にそういう相談しても無駄
0213デフォルトの名無しさん2016/03/02(水) 12:53:42.93ID:TALPhVNW
VBA脳てどんなのう〜ねえねえおせ〜て〜
0214デフォルトの名無しさん2016/03/02(水) 14:10:10.41ID:L3RjSFzH
「〜脳」って言い方をするときは大体思考停止系な人々のことを表現してるんだろう。
0215デフォルトの名無しさん2016/03/02(水) 14:21:01.91ID:NWeCetC1
oh!脳
0216デフォルトの名無しさん2016/03/02(水) 14:54:02.93ID:afwFBq34
>>209
.Net使えば?
0217デフォルトの名無しさん2016/03/02(水) 19:47:22.64ID:Plx5NeC5
ゲーム脳もそうだけど、○○脳というとはじめは「○○によって思考が硬直している人間」を批判する言葉として生まれるけど、
最終的になんでもかんでも○○が悪いことにしている思考硬直人間を指す言葉になっていく。
0218デフォルトの名無しさん2016/03/02(水) 22:53:55.42ID:scOQ3I+w
>>209
コレクションをプロパティとして持つクラスを作って
そのクラスのメソッドとして定義しとけば良いんじゃない
0219デフォルトの名無しさん2016/03/03(木) 08:51:46.56ID:sDd8C7iY
>>217
中二病と同じようなものだな。

勝手に定義が拡大されていって、元あった定義からかなりズレてる。
アスペもそうだし、ステマもそうだし、ネトウヨというのもそうだな。

定義拡大しすぎて乱用し、挙句には左翼活動家の行動をネトウヨ
とか言い始める馬鹿までてる始末。
0220デフォルトの名無しさん2016/03/03(木) 09:20:31.40ID:mDpo7bQQ
防ぐ手段はなさそうだ
0221デフォルトの名無しさん2016/03/03(木) 11:21:09.37ID:sDd8C7iY
>>220
ま、今後も増えるだろう

JRにとってはいい薬になるだろ。山手線で何度も真夏の炎天下の中、クーラー切って缶詰
とかやったのは忘れないよ。
0222デフォルトの名無しさん2016/03/03(木) 11:57:55.84ID:amF+AuYt
>>220-221
話の脈絡が全く分らない
どこらへんがVBAに関係してるんだ?
0223デフォルトの名無しさん2016/03/03(木) 12:02:27.33ID:mDpo7bQQ
>>222
VBA脳の話の続きさ。
ところでどのレスがVBA脳なんだっけ?
0224デフォルトの名無しさん2016/03/03(木) 20:14:14.32ID:amF+AuYt
>>223
いやまぁそっちはまだつながりが分るんだけど、
>>221のJRがどうとかってのがなんだかさっぱり分らないんだよね
0225デフォルトの名無しさん2016/03/03(木) 20:35:42.98ID:BwHv50Vv
     )、._人_人__,.イ.、._人_人_人
   <´ VBAじゃ、VBAの仕業じゃ! >
    ⌒ v'⌒ヽr -、_  ,r v'⌒ヽr ' ⌒
// // ///:: <   _,ノ`' 、ヽ、_ ノ  ;;;ヽ  //
///// /::::   (y○')`ヽ) ( ´(y○')    ;;|  /
// //,|:::     ( ( /    ヽ) )+     ;| /
/ // |:::     +  ) )|~ ̄ ̄~.|( (       ;;;|// ////
/// :|::       ( (||||! i: |||! !| |) )      ;;;|// ///
////|::::    +   U | |||| !! !!||| :U   ;;; ;;;| ///
////|:::::       | |!!||l ll|| !! !!| |    ;;;;;;| ////
// / ヽ:::::       | ! || | ||!!|    ;;;;;;/// //
// // ゝ:::::::: :   | `ー----−' |__////
0226デフォルトの名無しさん2016/03/03(木) 21:03:59.66ID:nAqCV8y8
グループ化した中にオブジェクトが3つあって

-------
|○ ○|
| |  
|   ○|
-------
↓こうしたいんだけど、グループ内で中央揃えって方法ない?
-------
|  ○|
| ○ |  
|   ○|
-------
0227デフォルトの名無しさん2016/03/03(木) 21:07:12.78ID:nAqCV8y8
=======
◎  ○

    ○
=======


=======
    ○

    ○
=======

すいません、こういうことです。
0228デフォルトの名無しさん2016/03/03(木) 22:56:20.15ID:TxOSABuy
各オブジェクトの縦位置の最小と(最大+高さ)の平均を出してやればええで
0229デフォルトの名無しさん2016/03/03(木) 23:15:37.34ID:XKX5WeWD
グループ内で縦方向に組になるものを判定する→
それぞれの組をひとつのオブジェクトと見てそいつらを上下方向に中央揃え?
0230デフォルトの名無しさん2016/03/04(金) 00:34:01.78ID:GMRSy9SY
vbaできれば食ってけますか?
0231デフォルトの名無しさん2016/03/04(金) 00:50:37.36ID:JTAQpjsa
>>230
月15万ぐらいの給料でも生活できるとか
そういう人じゃないと厳しいんじゃない?
VBAだけでは多分ろくな求人が無いよ
0232デフォルトの名無しさん2016/03/04(金) 01:03:10.27ID:kHA/YI44
VBAだけが必要って仕事は考えづらいしな。
ある言語が使えるのに別の言語が全く出来ないなんてのも考えづらいけど。

プログラミングだけで食っていくのは難しいけど、
プログラミングが出来るっていうのを武器に仕事するなら食うには困らない。
0233デフォルトの名無しさん2016/03/04(金) 02:18:36.51ID:+fNnjxqD
VBAでAIを書くことは可能ですか? 事例はありますか?
0234デフォルトの名無しさん2016/03/04(金) 08:24:04.83ID:kHA/YI44
何をもってAIとするのかにもよるけど、WindowsやLinuxベースで動くAIがあるならVBAでも出来るんじゃないかな。
VBAもCも見た目が違うだけで中身一緒だし。
0235デフォルトの名無しさん2016/03/04(金) 08:25:38.85ID:oBgAFUgq
>>234
一緒 とは?
0236デフォルトの名無しさん2016/03/04(金) 09:02:11.17ID:kHA/YI44
>>235
何言語で書こうがコンパイル後に注目する限りは同じ物を作る事が出来るという話ね。

JavaとかECMAとかRubyとかのアプリケーションを噛ますヤツ(いわゆるスクリプト言語)は少し違うけど、
都度コンパイルできるように解釈されているのだと考えれば同じと言えなくもない。
0237デフォルトの名無しさん2016/03/04(金) 11:32:35.87ID:8G/y/52V
配列をパブリック変数で指定した場合
eraseしてもiarrayがtrueになるのだがどうにかならない?
0238デフォルトの名無しさん2016/03/04(金) 11:43:31.10ID:oBgAFUgq
>>237
LBound <= UBound であることを確認すればいいんじゃない?
または()なしのAs Variant で宣言するか。
0239デフォルトの名無しさん2016/03/04(金) 11:58:02.55ID:kHA/YI44
VBAにとって動的配列は鬼門だから、これを関数の外に出す作りは避けた方がいいな。
可変要素数のものを異なる関数間でやりとりするならCollection型とかかな?
0240デフォルトの名無しさん2016/03/04(金) 12:17:17.67ID:caIAl3e0
>>239
つーかさ、いい加減にその仕様変えてほしいわ。

今時動的配列もまともに扱えない言語なんてないでしょww 入門者にとっても熟練者にとっても
全くといっていいほど何の得にもならない仕様。
0241デフォルトの名無しさん2016/03/04(金) 12:50:39.97ID:LsWJiYwn
毎秒実行させたいプロシージャをApplication.OnTimeで1秒おきに実行し、
毎分実行させたいプロシージャは毎秒実行プロシージャが60回実行されたら実行・・・という処理があります

しかしやはり無理があるのか時刻とズレが現れ始めるのが気になります

うまく毎秒、毎分実行させる方法はありませんか?
0242デフォルトの名無しさん2016/03/04(金) 13:03:01.51ID:kHA/YI44
>>240
またお前か。

というのは置いといて、動的配列が未初期化かどうか判定する直接的な方法がないというのは確かに不便なんだよな。
SgnやNot Notで一応の判定は出来るけど本来の用途ではないから使うのは躊躇われる。
APIで判定する方法もあるけどライブラリ無かったらアウトだし(考えにくいけど)、そもそもあれってアドレス値を返しているだけで、
未初期化なら0(つまりNull)なんだからIsNullで何故判定出来ないのかという疑問が出てきたり。

ま、いかなる言語であれ文句を言い始めたらキリが無いから、今の仕様で付き合っていくしかないけどね。

>>241
Sub Procedure()
Static sec As Single, min As Single
If Timer - sec > 1 Then
毎秒起動
sec = Timer
End If
If Timer - min > 60 Then
毎分起動
min = Timer
End If
End Sub

こんなのをずっと回しておくとか。
0243デフォルトの名無しさん2016/03/04(金) 14:35:01.01ID:oBgAFUgq
>>239
ちょっと意味不明
なんの不自由があるんかね?
0244デフォルトの名無しさん2016/03/04(金) 14:40:30.56ID:31c/HYsd
君たち、いつになったら.Net使うの?
0245デフォルトの名無しさん2016/03/04(金) 14:46:58.64ID:yJ/z6IGI
>>244
ここVBAのスレ。君場違い。わかった?
0246デフォルトの名無しさん2016/03/04(金) 14:48:44.24ID:31c/HYsd
>>245
VBAで.Net使う話だよ。
Collectionが嫌ならArrayList使えばいいじゃない。
0247デフォルトの名無しさん2016/03/04(金) 16:28:46.94ID:swDkdG7k
毎朝エクセルファイルを8個開きます(別プロセスで)。
8個全てのファイルはPrivate Sub Workbook_Open()でApplication.WindowState = xlMaximized '最大化 していました。
このときまでは何の問題もありませんでした。
今週、8個のファイルのうち1つのPrivate Sub Workbook_Open()で
Application.WindowState = xlMaximized '最大化
Application.DisplayFullScreen = True
と変更しました。1つだけ全画面表示にしたのです。
そうしたところ、他の7個のうちのいくつかがいつの間に全画面表示になっていたりします。
起動時に全画面表示になるものもあります。
起動時に全画面表示となれば通常の最大化に直したりするのですが、
時間が経過するといつのまに全画面表示になっていたりします。
よくわからない現象です。

原因不明の現象に困惑しています。
致命的な不具合ではありませんが非常に面倒です。
なにかわかりますでしょうか?
0248デフォルトの名無しさん2016/03/04(金) 16:33:21.02ID:kHA/YI44
>>247
完全に終了しない内に次のブックを開くせいで設定が残ったままになるんじゃないの。
プロパティが特定の状態にある事に期待した作りにしないで実行時に初期化した方がいいよ。
0249デフォルトの名無しさん2016/03/04(金) 17:48:20.76ID:31c/HYsd
>>248
意味わからん
0250デフォルトの名無しさん2016/03/04(金) 18:29:08.08ID:DcNHwK2h
>>237
基本的に配列はPublicで宣言できないはずだけど
Variantで宣言して配列を持つのは可能だけど

Eraseは配列の要素を初期化するだけで、要素を初期化されようが配列は配列のまま
IsArrayがTrueなのは当たり前だと思うが
むしろ要素が初期化されたら配列じゃ無くなる方が困るわ
0251デフォルトの名無しさん2016/03/04(金) 18:32:28.62ID:DcNHwK2h
>>240
VBAは今時の言語じゃないから仕方がない
VBが出た当時の動的配列はどっちかって言うと配列としては革新的だったんだが
0252デフォルトの名無しさん2016/03/04(金) 18:40:46.55ID:DcNHwK2h
>>242
>動的配列が未初期化かどうか
VariantでEmptyだろ普通
0253デフォルトの名無しさん2016/03/04(金) 18:47:14.50ID:DcNHwK2h
>>247
まず環境ちゃん書け
>毎朝エクセルファイルを8個開きます(別プロセスで)。
これが疑わしいんだが
どうやって別プロセスで動いてる事確認した?単に別ウィンドウなだけじゃないか?
0254デフォルトの名無しさん2016/03/04(金) 19:02:59.35ID:oBgAFUgq
みんな結構配列変数として宣言してるのか。意外だな。
0255デフォルトの名無しさん2016/03/04(金) 20:03:39.10ID:meEGXqpu
>>251
へぇ、そうなの。なんか、今じゃ普通に使ってるから、最初からこういう
メモリ上の入れものを用意して、操作するって普通のことだと思ってたわ。

多言語で特に疑問もなく、難しくもなく使ってたからVBAの配列は使いづ
らくて仕方ないなぁ。かといってイチイチ書き出してたら速度面でものす
ごく遅いしね。
0256デフォルトの名無しさん2016/03/04(金) 20:12:55.83ID:JTAQpjsa
>>250
>基本的に配列はPublicで宣言できないはず

宣言できたよ

Option Explicit
Public hoge() As Variant 
Sub test()
 Call checkArray("初期状態")
 ReDim hoge(0)
 Call checkArray("Redim実行後")
 Erase hoge()
 Call checkArray("Erase実行後")
End Sub
Sub checkArray(str As String)
 If IsArray(hoge) Then
  If Not Not hoge Then
   Debug.Print str & ":配列で要素あり"
  Else: Debug.Print str & ":配列だけど要素なし"
  End If
 Else: Debug.Print str & ":配列ではない"
 End If
End Sub

↑これで試した結果、
Public hoge() のところは他の型でもいけたけど、
Public hoge() As Object で宣言したら、
初期状態とErase実行後では、 LBound(hoge) = 0 、
UBound(hoge) = -1 、というちょっと変な状態になった
あと、 カッコを取って Public hoge としたら、
Redim実行後の If Not Not の所で型が一致しないというエラーになった
0257デフォルトの名無しさん2016/03/04(金) 20:41:27.34ID:Q+o0VpBQ
>>255
Cなんかよりは扱いは簡単だよね?
面倒なのはLBoundが0固定じゃないことくらいかな。
0258デフォルトの名無しさん2016/03/04(金) 20:58:15.27ID:TK6DKGZO
初めてvbaで配列使った時、え?ReDimってなんやねん。
こんなん自分でするの?って思った記憶。
0259デフォルトの名無しさん2016/03/04(金) 21:08:07.73ID:kHA/YI44
スクリプト言語に慣れてるとコンパイラ言語は不便で仕方ないだろうな。
0260デフォルトの名無しさん2016/03/04(金) 21:43:50.54ID:Q+o0VpBQ
あー最後尾に追加していけるとか期待してるのか。そういうのは自作しなくちゃならないな。
0261デフォルトの名無しさん2016/03/04(金) 21:57:02.50ID:lZVh/WrC
>>259
今時大抵の言語には List とか Collection 位は使えるからたいして変わらん
不便に思ってるのはC使いぐらいだろ
0262デフォルトの名無しさん2016/03/04(金) 22:00:16.71ID:Q+o0VpBQ
Erase した配列は Array()とも違う変な状態になるんだな。

Erase した配列 : IsArray がTrue、LBoundとUBoundは取得不可、次元は0
Array() : IsArray がTrue、LBound = 0、UBound = -1、次元は1

これは知らなかった。
0263デフォルトの名無しさん2016/03/04(金) 22:33:02.77ID:Q+o0VpBQ
>>242の言っていたことがやっとわかった。
動的配列って、Dim var() As ... で宣言したやつのことで、
未初期化というのは ReDim する前のことか。

自分は普段
Dim var As Variant
ReDim var (...
のパターンしかやらないからな。

どっちの場合にも使える判定は次元を確認してからやるしかなさそうだ。
0264デフォルトの名無しさん2016/03/04(金) 22:38:45.11ID:kHA/YI44
>>261
線形リストくらいなら自作しても大した手間ではないと思うけどね。
Variant型作れって言われたら悶絶するけど。
0265デフォルトの名無しさん2016/03/04(金) 22:45:59.06ID:JTAQpjsa
>>262
Erase時の挙動は宣言したときの型にも因るみたいだよ
ためしにObject型で宣言した配列でEraseしてみてよ

IsArray がTrue、LBound = 0、UBound = -1、次元は1

になるから
0266デフォルトの名無しさん2016/03/04(金) 22:54:18.30ID:Q+o0VpBQ
>>265
なるほど、奇怪な挙動だ

ちなみにさっきこんなのも発見した

Erase した配列を IsMissing の引数に入れると、アプリが落ちる

www
0267デフォルトの名無しさん2016/03/04(金) 23:08:28.79ID:9YWpHsMn
>>264
> 線形リストくらいなら自作しても大した手間ではないと思うけどね。
リスト自体はたいして難しくないけど、領域の確保・解放が面倒

> Variant型作れって言われたら悶絶するけど。
Win32API を前提にしていいなら意外と簡単
0268デフォルトの名無しさん2016/03/04(金) 23:08:39.93ID:DcNHwK2h
アンドキュメンテッドな方法で取り扱ったりしてるけど
VBAでの配列は、要素の無い状態ってのが実は定義されてないからなぁ
UBoundが-1とか、not notとか、全部保障外の動作
0269デフォルトの名無しさん2016/03/04(金) 23:49:36.96ID:Q+o0VpBQ
>>264,267
素のVBAの機能だけで線形リスト?
かなり無理があると思うけど。
0270デフォルトの名無しさん2016/03/05(土) 03:36:09.39ID:C1oJ0ySj
要素数が設定されていない配列の状態を確認するにはAPIを使うんじゃなかったっけ?

もう長いことそういう扱いのものはCollectionかDictionary使ってるから忘れたけど
0271デフォルトの名無しさん2016/03/05(土) 05:28:34.38ID:gRV1tzdL
>>240
コレクション
0272デフォルトの名無しさん2016/03/05(土) 09:02:48.20ID:jMWeenKu
確かに話の流れも読めない君にはかなり無理かも
0273デフォルトの名無しさん2016/03/05(土) 09:29:02.48ID:rDXleBwt
言語機能の話とライブラリの話がごっちゃだからか
0274デフォルトの名無しさん2016/03/05(土) 09:53:02.66ID:dXAlBDep
>>228
どういうことでしょうか?
0275デフォルトの名無しさん2016/03/05(土) 10:23:53.54ID:JVq4KSH+
>>270
>Collection
それを使うと、例えば、メモリ上で2次元の入れてもの的なものが作れて、
簡単にレコード追加や削除、要素数の調査などが出来るのかね?
0276デフォルトの名無しさん2016/03/05(土) 12:27:16.08ID:u3wuja+A
>>275
出来るんじゃね
0277デフォルトの名無しさん2016/03/05(土) 12:27:54.96ID:9TDU+P7f
>>275
少しはググれよ
0278デフォルトの名無しさん2016/03/05(土) 12:44:32.31ID:c/pBSWps
いまのところ>>269が無能大賞
02792692016/03/05(土) 13:06:06.56ID:qwZo4R1u
いや無理だよ。
「読むは毎日」の「毎日」を「012(まるいちに)」と読むくらい無理があるよ。
0280デフォルトの名無しさん2016/03/05(土) 13:18:01.29ID:1s6rQbQH
線形リストの意味と実現手段によると思うけど、もとの発言の「自作」ってのはどういう意味だったんだ?
0281デフォルトの名無しさん2016/03/05(土) 13:34:00.19ID:LlD1+gMh
レスを追えば分かるけど

(配列の扱いについて)
「スクリプト言語は自動で拡張するがコンパイラ言語は明示的に拡張しないとならないから不便」
 ↓
「大抵のコンパイラ言語にはListやCollection等の線形リスト型クラスが用意されているので強調するほどの不便さはない」
 ↓
「だがC言語にはListやCollection等の線形リスト型クラスが存在しないので不便である」
 ↓
「線形リストであればC言語でも書けるので、ListやCollectionを根拠にするならC言語を強いて分ける理由にはならない」
 ↓
「C言語ではクラスがないのでメモリの解放が保証されず、これを確実に管理できないのでやはりC言語は不便である」

という感じの流れ。
0282デフォルトの名無しさん2016/03/05(土) 14:09:05.52ID:JVq4KSH+
>>277
お前には聞いてないよ
0283デフォルトの名無しさん2016/03/05(土) 14:31:26.49ID:C1oJ0ySj
>>282
あ、そう。
0284デフォルトの名無しさん2016/03/05(土) 18:11:50.55ID:Kra6+IMS
>>253
>>247です。レス遅くなりすみません。

>まず環境ちゃん書け

Win7 64bit + エクセル2010 32bitです

>>毎朝エクセルファイルを8個開きます(別プロセスで)。
>これが疑わしいんだが
>どうやって別プロセスで動いてる事確認した?単に別ウィンドウなだけじゃないか?

別ウィンドウなのかもしれません。別プロセスで開いていると思ってました。
PC買い換えた時にレジストリいじった覚えはあるのですがよく覚えていません。すいません。
ファイルを開くときはアイコンを単にダブルクリックしているだけです。
タスクマネージャーのプロセスタブには"EXCEL.EXE *32"が複数並ぶので別プロセスで開いていると思っていました。

別プロセスなのか別ウィンドウなのか判別する方法はありますか?
また、単に別ウィンドウで開いているとすると今回の不具合は説明がつくのでしょうか?
0285デフォルトの名無しさん2016/03/05(土) 19:04:44.01ID:kHthb7bF
msgbox で変数が現在いくつかを確認していますがループ処理で何千回も繰り返す場合
OKボタンを何千回も押さなければいけなくかなり苦戦していますが、
リアルタイムに変数が今いくつかをわかりやすく表示するいいい方法がありましたら教えてください。
よろしくお願いいたします。
0286デフォルトの名無しさん2016/03/05(土) 19:06:49.19ID:nsijM380
プロセスとスレッドのちがいわかっていってんのか
0287デフォルトの名無しさん2016/03/05(土) 19:15:41.23ID:u3wuja+A
>>285
debug.printとか
0288デフォルトの名無しさん2016/03/05(土) 19:21:11.51ID:kHthb7bF
>>287
こんな物があるとは、、これは便利ですねありがとうございました。
0289デフォルトの名無しさん2016/03/05(土) 19:22:23.00ID:LlD1+gMh
>>285
複数の表示が必要ならユーザーフォーム使うと便利かもしれない
0290デフォルトの名無しさん2016/03/05(土) 19:34:13.01ID:4DqfsxCG
非常にエスパーな質問になってしまうことを始めに謝罪します。

私は最近中小企業に入社しました。
既に退職した方が作っている、VBAアクセスを用いたユーザーフォームに入力する形の勤怠表を使っています。
リストから従業員の名前を選んで、時間とか入力するだけで、そのあたりの使用には全然問題が無いです。
このシステムは複数のパソコンで使えるようになっていて、排他処理が出来ないので使うのは誰か一人だけとなっています。
問題は、私の使っているパソコンでかつて使っていた担当者の名前が自動的に入力印字されることになってしまっており
これをどうにかして自分の名前に変えたいのです。
システムを利用するユーザーフォーム内には無いので、コンピューター内のクエリ?アクセス?を読んでると思うのですが・・・
これどこから読んでるか探す方法ってあるでしょうか?
0291デフォルトの名無しさん2016/03/05(土) 19:49:06.02ID:kHthb7bF
>>289
ありがとうございます。
これは高度なようでぱっと見どうやるのかわかりませんが挑戦してみます
0292デフォルトの名無しさん2016/03/05(土) 19:52:59.41ID:LlD1+gMh
>>290
ユーザー名から読み込んでいると思うので、PCが個人名になっているならPCのユーザー名を変えればいいし、
そうでないならユーザー名と照らし合わせている対照表が存在するはずなので、
個人名が記録されたテーブルが無ければコードを全て検索にかければ出てくるんじゃないかな。
0293デフォルトの名無しさん2016/03/05(土) 19:53:01.73ID:yziJisVB
>>290
vbaのソースは見れるの?
たぶん実行時にコンピュータ名を取得してんじゃないのかな。
UserNameでソース検索してみると引っ掛かるかも。
0294デフォルトの名無しさん2016/03/05(土) 19:59:14.70ID:fx7njDcC
上に相談して金出させなさい
話はそれからだ
0295デフォルトの名無しさん2016/03/05(土) 20:21:57.03ID:4DqfsxCG
>>292
PCは会社名と数字なので、違うと思われます。
>>293
システムを開くと、エクセル画面の手前にユーザーフォームが出て来て、VBAコードをどうすれば見れるか分かりません・・・
どうしたらいいでしょう?
一応基本的なVBAなら学校で習いましたので、私もコードが見れたら分かるとは思うのですが・・
0296デフォルトの名無しさん2016/03/05(土) 20:25:29.18ID:LlD1+gMh
>>295
Shiftキー押しながら開けば内部が見える。
開いた後にAlt+F11キー押せばコード画面が見える。

PCが会社名と数字ならテーブルで管理している可能性が高い。
0297デフォルトの名無しさん2016/03/05(土) 20:31:48.48ID:4DqfsxCG
>>296
ありがとうございます
テーブルというのはアクセスでしょうか?
0298デフォルトの名無しさん2016/03/05(土) 20:39:13.73ID:yziJisVB
>>297
とりあえずコード見ないと。
テーブルはアクセスのデータ。
名前とかを一人一行で保存してそっからとってるかもね。
あとはエクセルシートに書いてある可能性も。
0299デフォルトの名無しさん2016/03/05(土) 20:42:31.99ID:4DqfsxCG
>>298
どうもありがとうございます
月曜日やってみます!
0300デフォルトの名無しさん2016/03/05(土) 23:47:07.55ID:pW8OrA+L
すみません、教えて下さい。

Excel 2003 で、VBAでマクロを組んでいます。

・表の数値を、スクロールバーによって入力させたいです。
・前回作ったものがあり、それはちゃんと動作しています。
・そのBookからスクロールバーをコピーして、今回のBook内にペーストしました。
・貼り付け先の今回のBookでもちゃんと動作し、前回Bookと同じ位置のセルに、数字が表示されます。
・このセル位置を変更したいと思い、デザインモードで、そのスクロールバーを右クリック。
・そしてプロパティを開き、LinkedCellの数値を見ると、J14が入っています。
・この数値を、今回表示したいセル位置の座標値、例えば、C3 と書き込んだのですが、

1. Linked Cellに書き込んでも、文字書けません。白いままです。
    以下の画像を見て下さい。
http://imgur.com/jkhPHef

2. 前回に戻そうと、CTRL+Zしたのですが、前回の値にさえも戻りません。

3. 試しにスクロールバーを動かしてみても、どのセルにも表示されません。
4. あきらめて、再度以前のタブからコピーペーストすると、ちゃんと数値表示されます。
5. しかし、Linked Cell の値を変更すると、全く同様になります。

質問
なんとか、思い通りのセル位置にスクロールバーの値を表示させたいのですが、
どのようにしたら良いでしょうか?
どうぞ宜しくお願いします。
0301デフォルトの名無しさん2016/03/05(土) 23:56:26.68ID:vycAzidd
従業員数20人の零細企業勤めなんだが、VBA使って仕事してたらメッチャ有能だと勘違いされてええ気分やわ
0302デフォルトの名無しさん2016/03/06(日) 03:55:58.52ID:1eS/+yt+
お山の大将は、スグに抜かれるよ。
いい気分に浸っていないで、日頃から勉強しておかないと。
0303デフォルトの名無しさん2016/03/06(日) 10:00:53.14ID:8jI/Xwdu
>>302
零細企業の職場内での評価なんて>>301もそこまで執着してないと思う
例えてみたら誰かにもらった宝くじがたまたま当たってたとか
せいぜいその程度のもんでしょ
0304デフォルトの名無しさん2016/03/06(日) 10:03:52.04ID:l5x+OWKs
大企業でもvba書ける奴なんて少数だよ。
本当にもうvbaなんて書きたくない、俺はもっと高貴なc++とか書きたいんじゃー
0305デフォルトの名無しさん2016/03/06(日) 10:19:01.07ID:covgZswb
訂正:
本当にもうC++なんて書きたくない、俺はもっと高貴なvbaとか書きたいんじゃー
0306デフォルトの名無しさん2016/03/06(日) 10:35:11.33ID:EaPvtK9y
いや、今からならC#勉強しようよ
これからはXamarinとか使える言語の方がいいよ
0307デフォルトの名無しさん2016/03/06(日) 11:14:47.28ID:ziAQb5iv
c#とかwww
あんなゆとり低俗言語やる気しねーわ
0308デフォルトの名無しさん2016/03/06(日) 12:20:43.48ID:CI3ynwI1
>>306
会社で使うPCには大抵Office製品が入っている=VBAで書ける環境が整っている=つまり彼は・・・
0309デフォルトの名無しさん2016/03/06(日) 12:32:55.25ID:euq/4jEg
>>301
俺はさらに零細の従業員10人の会社にいたけど入社してすぐに参謀格扱いだったわ
AccessでVBA使って社内システム作ってやったわ

社長は何かあるたびに俺に相談、コンピュータ関係は全部俺に丸投げ状態だったわ
0310デフォルトの名無しさん2016/03/06(日) 12:38:05.50ID:uXhlHP6G
このスレで言ってもね。
VBAで高貴な書き方をする方法をひねり出せばいい。
0311デフォルトの名無しさん2016/03/06(日) 12:47:46.09ID:Pwozu15r
>>300
新規でスクロールバー追加してもダメ?
その状況を再現しようとしたけど さすがに Excel2003じゃないから わかんなかった

Linked Cellへ 入力してる時 文字は表示されるの? Enter押すと消えるの?
0312デフォルトの名無しさん2016/03/06(日) 14:49:21.66ID:EaPvtK9y
>>307
どうした?
何か辛いことでも有ったのか?
0313デフォルトの名無しさん2016/03/06(日) 18:06:47.58ID:nfMUp1Uo
>>301
良いなぁ。俺なんか「これ、ネットで拾ったんだろ?」なんて言われるんで自分だけこっそり使ってる。
VBAどころかシート関数だってSUMしか知らないヤツが大半の底辺企業だから下手に気の利いた事をやってみせると
色々とメンドクセー事をやらされそうだし、「それ、俺に教えろ」と言われるのが一番困る。
0314デフォルトの名無しさん2016/03/07(月) 00:47:06.08ID:addXPaOO
自分の作業を自分で効率化するのになんら遠慮する必要はないだろう。
0315デフォルトの名無しさん2016/03/07(月) 02:14:25.55ID:5wV32mLN
>>311
どうもありがとうございます。

>新規でスクロールバー追加してもダメ?
すみません、新規での作り方が良くわからないんです。
VBEで、ユーザーフォームを新規で作って、そこに○○ボックスを表示して、その中の
スクロールバーをフォーム上にドラッグする、そこまでは解ったのですが、
スクロールバーだけを、自分のシート上に持っていく方法がわからずに止まっています。
それなら
既存のスクロールバーをcopyして、使い回した方が良いと思い、そうしました。
でも数値表示位置が思い通りにならない、と、ココで止まっています。

>その状況を再現しようとしたけど
わざわざありがとうございます。大変すみません。

>Linked Cellへ 入力してる時 文字は表示されるの? Enter押すと消えるの?
はい、値を入力するときに表示される、縦棒のカーソル(アイカーソル)も出て、
数値も打てて、打っている最中は表示されます。でも、Enterを打った途端に、
値が消えて、真っ白になってしまいます。

何かヒントがあったら、教えてくださいませんでしょうか。
0316デフォルトの名無しさん2016/03/07(月) 02:29:19.02ID:4xjfDqmL
>>315
改行されてるだけだったりしない?
0317デフォルトの名無しさん2016/03/07(月) 02:49:52.90ID:UpfyO0Bs
>>315
>すみません、新規での作り方が良くわからないんです。

それはユーザーフォームに作成してからシート上に持ってくるんじゃなくて
シート上に直接作成するんですよ

2003を持ってないんでちょっと違うかもですが、
2000だとコントロールツールボックスというのが有りまして
(ちなみにVBEのアイコンとデザインモードのアイコンの間に
コントロールツールボックスのアイコンがありました
スパナとハンマーがX字状に交差したマークのアイコンです)
その中にスクロールバーも用意されてます

そのスクロールバーをシート上の好きな位置に貼り付けて
サイズ適当に整えてから
右クリックでプロパティー出して
LinkedCellのところにセルのアドレス書いて
デザインモードを終了させたら完了です
0318デフォルトの名無しさん2016/03/07(月) 23:37:36.70ID:i+8zAlAm
VBAでソートするとたまにエクセルが動作を停止してしまい困っています。

使用するマクロがこれで
Range("S11:X10000").Sort Key1:=Range("T11"), ORDER1:=xlDescending
Range("S11:X10000").Sort Key1:=Range("S11"), ORDER1:=xlDescending

シートBから範囲をコピーし、シートAに貼り付け後ソートします。その際シートBは開いたままです。
1万行までソート範囲設定してますが、実際は3000ちょいです。
シートAは400万セル計算式が入っており、ソート後ほぼ全てのセルが再計算されます。
計算式自体は簡単なのでソートの時間2秒、再計算2秒くらいです。CPU2600k


クラッシュの原因は分かりますか?
データが重いのは承知しているのですが、他で改善できる点があれば教えて欲しいです
0319デフォルトの名無しさん2016/03/08(火) 00:27:00.64ID:vutO7knO
Rangeを使用範囲に限定するマクロにするとか
マクロ中の計算を中止するとか
0320デフォルトの名無しさん2016/03/08(火) 00:47:53.82ID:8QSEtr5P
メモリが足りんのだろう
ソートで落ちてるのか計算で落ちてるのか調べてみては
0321デフォルトの名無しさん2016/03/08(火) 00:51:54.57ID:RMZNymTq
スレチかもだけど
A_B_C_D_E_Fって名前のファイルを
BE_Aにリネームするマクロってどんな感じになりますか?
0322デフォルトの名無しさん2016/03/08(火) 01:26:22.87ID:bwi0BspM
>>321
http://officetanaka.net/excel/vba/statement/Name.htm
0323デフォルトの名無しさん2016/03/08(火) 19:57:54.75ID:9s/oHe/S
初心者です
多重ネストを回避するにはどうすればいいんでしょうか
少し複雑なプログラムを書くと、だいたいifの多重ネストが発生してしまいます。
select case や do whileなどは状況に応じて使い分けているのですが、それらもifの親だったり子だったりします。
何かコツというか、アドバイスを頂けると嬉しいです。
0324デフォルトの名無しさん2016/03/08(火) 20:17:21.12ID:RMKFy6zt
exit subとかgotoとか使う
0325デフォルトの名無しさん2016/03/08(火) 20:18:05.37ID:fR2CUJwx
>>323
おまえがどういう条件で入ってくる値を分類するかによる。
0326デフォルトの名無しさん2016/03/08(火) 20:32:55.36ID:nBW8sWlC
>>323
多重ネストから抜ける方法じゃなくて回避する方法、とな?
0327デフォルトの名無しさん2016/03/08(火) 20:52:02.31ID:Vc6G9loF
>>323
Accessとかでデータベース弄ってみると解決のヒントになるかも。
俺も最初の頃は物凄い複雑な多重ネストしてたけど、二次元配列にすればだいたい単純化出来ると知った。
0328デフォルトの名無しさん2016/03/08(火) 20:54:03.15ID:9s/oHe/S
>>327
そういう話が聞きたかったのです
ありがとうございます
0329デフォルトの名無しさん2016/03/08(火) 21:07:40.52ID:835pn7ET
>>327
なにそれ
詳しく教えて
0330デフォルトの名無しさん2016/03/08(火) 21:17:39.28ID:h5qI0BBp
単純にネストの深さ下げるのなら別プロシジャに切りだすのが常套手段だが
まあ、ロジック見直すのが第1だな
0331デフォルトの名無しさん2016/03/08(火) 21:31:41.20ID:Vc6G9loF
>>329
多重ネストっていうのは、ネスト階層そのものがメモリの役割を果たしているわけだから、
その階層を記録そのもので代替すればネスト階層を少なく出来るし、ループ処理しやすくなる。
0332デフォルトの名無しさん2016/03/08(火) 21:50:26.37ID:rEDH5rdc
本当に多重ネストが必要なら再帰にするのが普通
そうでないなら条件分けが論理的でないとか
0333デフォルトの名無しさん2016/03/08(火) 22:18:08.86ID:MOSr64Vh
ネストを深くしないコツは、Exit FunctionやExit Subでさっさと弾くこと
そもそも関数に分けてないのは論外
0334デフォルトの名無しさん2016/03/08(火) 22:18:39.27ID:Murbzmcd
for i = hoge to fuga
if not 条件1 then
go to continue
end if

if not 条件2 then
go to continue
end if

if not 条件3 then
go to continue
end if

continue:
next i

function hogehoge()
if 条件1 then
hogehoge = fugafuga
exit function
end if

if 条件2 then
hogehoge = fugafuga
exit function
end if
end function

平気でgoto文使ってるわ…
continue文とreturn文、OrElseAndAlso条件式vbaにも欲しいよー
0335デフォルトの名無しさん2016/03/08(火) 22:41:28.42ID:Vc6G9loF
VBAにもReturn文はある。あるにはある・・・。
0336デフォルトの名無しさん2016/03/08(火) 23:18:30.06ID:yqVtrlfP
>>334
それな
0337デフォルトの名無しさん2016/03/08(火) 23:41:33.25ID:nBW8sWlC
配列にしたうえで、ループ処理自体を関数化すればかなり簡素化できる。
0338デフォルトの名無しさん2016/03/09(水) 00:10:33.98ID:m+VCUuOs
>>321
ary=sprit("A_B_C_D_E_F", "_")
newname=ary(1) & ary(4) & "_" & ary(0)
0339デフォルトの名無しさん2016/03/09(水) 01:37:19.14ID:ISN2ur/+
do
if not cond1 then exit do
if not cond2 then exit do
if not cond3 then exit do
if not cond4 then exit do
if not cond5 then exit do
if not cond6 then exit do
loop until true
0340デフォルトの名無しさん2016/03/09(水) 18:00:15.34ID:DOBDJjUi
ループに入ると応答無しになるのは
doeventsで対応出来たのですがデメリットなどありますか?
0341デフォルトの名無しさん2016/03/09(水) 19:41:01.70ID:bmHnXMYB
デメリットというか、ググってもらえれば色々書いてあるけど
単純に処理速度が遅くなる、そのループ中にユーザーが他のボタンを押したりや、イベントを発生させる事ができるからどんなエラーが出てもおかしくないってのが挙げられるね
処理中のキャンセルボタンとかには必要だけど、エラー処理しっかりしないと変な使い方されるとバグるよって感じ
0342デフォルトの名無しさん2016/03/09(水) 19:49:50.90ID:8rDFbZP8
>>341
なるほど
その辺はdoevents使うときにグローバル変数でも使えば対象出来そうですね
0343デフォルトの名無しさん2016/03/09(水) 20:18:05.86ID:fhz9XN7U
DoEvents使うような処理は必ずモーダルなユーザーフォーム通すようにルールづけするといい。
世の中に出回る大抵の「ユーザーに途中で弄られるとバグるシステム」は、この方法で回避してる。

ついでに進捗率とキャンセルボタン付けておけば便利。
0344デフォルトの名無しさん2016/03/09(水) 20:37:29.21ID:zuimL+5M
>>343
うーーーん勉強になる!
0345デフォルトの名無しさん2016/03/09(水) 21:02:53.20ID:8rDFbZP8
>>343
進捗率どうやればいいの?
0346デフォルトの名無しさん2016/03/09(水) 21:19:50.18ID:fhz9XN7U
>>345
何が「どう」なのか分からないけど、

・率の計算なら現在値/全体値で出せる。ただし全体の数と、現在を示す値がどれか分かっていなければ当然出来ない。

・進捗率バーを出したいならユーザーフォームのツールボックスの空いてる所を右クリックして
 「その他のコントロール」からProgressBarを選べばいい・・・はずだけど俺のPCでは何故か見あたらない。

・値を表示したいならラベルのCaptionに突っ込んでもいいし、ProgressBarが見当たらなくて自作したいなら、
 適当なラベルで同じ大きさのものを二つ重ねて背景色をつけて、
 上の方に表示されているラベルの横幅を、下の方に表示されているラベルの横幅に進捗率掛けても出来たはず。
0347デフォルトの名無しさん2016/03/10(木) 07:04:11.23ID:+km6LsFg
役にたたねぇ
0348デフォルトの名無しさん2016/03/10(木) 09:40:35.29ID:0HUIwvkk
処理の進捗状況をラベルで表現する
http://www.moug.net/tech/exvba/0090015.html

すぐに出てくるだろーが
0349デフォルトの名無しさん2016/03/10(木) 19:14:57.62ID:ktNP4enh
いままで知らなかったんだけど
プロシージャをコールするときに引数をカッコで囲むと値渡しになるのな
今日、知らずにそれやってて1時間ぐらい嵌っちまった
0350デフォルトの名無しさん2016/03/10(木) 19:39:52.03ID:KtHC/EJ0
>>349
奇遇だね。俺は昨日はまった。(マジ)
0351デフォルトの名無しさん2016/03/10(木) 19:41:26.38ID:YDCDLTcE
じゃあ明日は俺がはまるわ。
0352デフォルトの名無しさん2016/03/10(木) 19:43:57.85ID:KtHC/EJ0
値渡しになってしまう条件を正確に特定したい。
カッコで囲んでかつ関数の返り値を捨てるとそうなるのはわかった。
0353デフォルトの名無しさん2016/03/10(木) 19:54:02.89ID:4xET+MUO
>>352
関数とかプロシージャの側でby refとかby val付けたら参照渡し、値渡しじゃなかったっけ?
0354デフォルトの名無しさん2016/03/10(木) 20:03:02.67ID:YDCDLTcE
>>352
Sub test1(x)
x = x + 1
End Sub

Sub test()
test1 (i)
Debug.Print i
End Sub

これでも普通に起きるから、カッコ自体が値を返してるんじゃないの。
カッコが返した値に対して色々やってるから一見すると値渡しに見えるだけだと思う。

俺も初めて知ったけど、これ便利だな。同じ関数で値を保護するかしないか選べるのがいい。
0355デフォルトの名無しさん2016/03/10(木) 20:10:47.12ID:4xET+MUO
仮説だけど
iでは無く (i)がtest1に渡されるのでは?

関数の形式で書くと
test1( (i) )

call test1(i) 参照渡し
call test1((i)) 値渡し
と予想
0356デフォルトの名無しさん2016/03/10(木) 20:24:42.26ID:ktNP4enh
>>352-355

http://home.att.ne.jp/zeta/gen/excel/c04p11.htm

ここに書いてあった
>括弧で囲まれた引数を式として評価するために一時的にメモリの別領域に値が確保されたためです。
引数として渡したのはあくまで別に確保された領域のポインタを参照渡ししただけで、元のデータの場所ではありません。

ってのが割りと分りやすい説明だと思う
0357デフォルトの名無しさん2016/03/10(木) 20:29:43.73ID:KtHC/EJ0
>>354-355
そういうことなのかもね。
自分がはまったのは、以下のようなパターン。
result = func(a)
とやると参照渡しになるのに、
func (a)
のように返り値を受け取らないと値渡しになってしまう。
双方ともカッコはあるんだけど、その意味が変化してしまうようだ。
前にスペースがあくのも怪しいし。
0358デフォルトの名無しさん2016/03/10(木) 20:39:47.39ID:KtHC/EJ0
>>356
なるほどね。
「返り値を利用する」だけど、普通に受けとる、"Call" を頭に付ける、以外にも、
メソッド呼び出し(返り値がオブジェクト型のとき)を後ろに続けてもいいみたいだ。
0359デフォルトの名無しさん2016/03/10(木) 20:41:01.66ID:LNX/blvp
>>351
いや、わかってるなら嵌るなよ
0360デフォルトの名無しさん2016/03/10(木) 20:41:59.77ID:YDCDLTcE
>>357
引数と関数の間にちょっとスペースが入っただけっていう考え方に草
0361デフォルトの名無しさん2016/03/10(木) 20:50:04.66ID:ktNP4enh
>>357
>func (a)
>のように返り値を受け取らないと値渡しになってしまう。

これちょっと違うっぽい
返り値云々じゃなくて、頭にCallを付けてるかどうかの問題らしい

Call hoge(a) :参照渡し
hoge a    :参照渡し
Call((a))   :値渡し
hoge (a)   :値渡し
0362デフォルトの名無しさん2016/03/10(木) 20:52:14.68ID:ktNP4enh
1ヶ所間違えた
Call hoge(a)   :参照渡し
hoge a      :参照渡し
Call hoge((a))  :値渡し
hoge (a)     :値渡し
0363デフォルトの名無しさん2016/03/10(木) 20:56:34.88ID:xRgSerYm
>>352
式にすればいいだけじゃね?
(x) とか x+0 とか x * 1 とか
なんか最適化されそうでちょっと恐いから、誰か試してみて
0364デフォルトの名無しさん2016/03/10(木) 21:04:23.07ID:E15ymOk9
バージョン:Excel 2010
VBAのレベル:スーパーど素人(見はじめてから3時間ぐらい、プログラムのスキルはごく簡単なbashを、インターネットを駆使して、何とか自力でかけるレベル)

VBAの構造としてはこんな感じです
-----------------------------
Dim hogehoge As Long ←変数の宣言?がいくつか書いてある
※1
Sub ボタン1_Click() ←1個目のサブルーチン?
なんかのコード
End Sub

Sub suburuchin() ←2個目のサブルーチン?Sub サブチーチン名()がこの下に4つある
Dim yamayama As Integer
なんかのコード
End Sub
※2
-----------------------------

コードの動きとしては、ボタンを押すと、上記コードが実行されて、実行時に選択されていたセルに値をいれて、選択セルから一つ下に下がる。
(実行時にA1が選択されていたら、A1に値を入れる→A2に下がる、A2が選択されている状態で実行すると、A2に値が入って、A3にさがる)
というVBAです。(人に作ってもらいました・・)

これを、指定した回数繰り返させたいのですが、VBA的に簡単な方法はありませんでしょうか。よろしくお願いします。

※1に
Sub Macro1()
  For i = 1 To 10 と入れて、

※2に
  Next i
End Sub と入れて、コード全体をサブルーチン化してしまえばうまくいくんじゃね?と思ってやってみたけどダメでした。
0365デフォルトの名無しさん2016/03/10(木) 21:11:01.91ID:xRgSerYm
>>364
> やってみたけどダメでした。
どうダメだったのか書けよ
0366デフォルトの名無しさん2016/03/10(木) 21:14:40.98ID:YDCDLTcE
>>364
Sub Macro1()
 For i = 1 to 10
   ボタン1_Click()
   suburuchin()
 Next
End Sub

こう書く。
0367デフォルトの名無しさん2016/03/10(木) 21:27:09.48ID:n+nn3+Tv
>>361
Callがどうこうじゃなくて、引数が(構文的に必要ない余分な)カッコでくくられてるかどうか
カッコでくくられた部分が式として評価されるから、元の変数とは別物になるだけ

ややこしいのはプロシジャ呼ぶ時のカッコの必須/省略可能のルール
0368デフォルトの名無しさん2016/03/10(木) 21:32:25.24ID:E15ymOk9
>>365
入れた後も、入れる前と動きは変わりませんでした。


>>366
ありがとうございます!うまくいきました!
全部囲わずに、中に入れればよかったんですね・・・。
0369デフォルトの名無しさん2016/03/10(木) 21:42:47.62ID:ktNP4enh
>>367
>ややこしいのはプロシジャ呼ぶ時のカッコの必須/省略可能のルール

いや、俺もそういう意味で言ってる
Callのあるなしでカッコが必須かどうかが変わるってのが前提にあって
Callなしで引数に括弧を書くと構文上不要なカッコとみなされるって話だから
>>357のように
result = func(a) と対比するなら
func(a) じゃなくて
result = func((a)) のほうだよねってこと
0370デフォルトの名無しさん2016/03/10(木) 21:44:41.53ID:TmlGNQiU
ちゃんとbyval byref書いてないクソコード見たくねぇ…
自分で書いてても理解しづらいし、エラーが起きた時に探すのに時間はかかるし、恥ずかしいし…
型宣言もないのか…
0371デフォルトの名無しさん2016/03/10(木) 21:45:18.98ID:fibsVr8n
ByRef書けや
0372デフォルトの名無しさん2016/03/10(木) 21:50:55.60ID:bAfaOEHz
そもそも関数呼び出しに省略可能なカッコとかないのだが君達は何を勘違いしてるのかね?
0373デフォルトの名無しさん2016/03/10(木) 21:59:24.40ID:ktNP4enh
>>372
言ってる意味が分からん
おれは関数呼び出しってのは
Functionプロシージャをコールするって意味で使ってるんだが
何か別の意味があるのか?

ちなみに返り値を使わないFunctionコールなら括弧無しで書ける
返り値使わないのにFunctionにする意味があるかは別の話
0374デフォルトの名無しさん2016/03/10(木) 22:02:00.01ID:BlUpxWze
>>370-371
「ByRef書いても値渡しになってしまう」現象について話し合われている、

っていうのはわかってるよね?
0375デフォルトの名無しさん2016/03/10(木) 22:02:31.94ID:YDCDLTcE
>>373
「つけてもつけなくてもいいよ」っていうカッコが無いって意味だろ。
0376デフォルトの名無しさん2016/03/10(木) 22:04:37.32ID:fibsVr8n
すいません。
良く読んでませんでした。
0377デフォルトの名無しさん2016/03/10(木) 22:07:11.96ID:7stvDyts
>>373
カッコなしで書けるではなく、カッコを使ってはいけないが正解だな。
0378デフォルトの名無しさん2016/03/10(木) 22:10:29.12ID:ktNP4enh
>>374
サブプロシージャのコールや
返り値無しのファンクションプロシージャのコールなら
Call付けて括弧もつけるか
Callなしで括弧もつけないかでどっちも参照渡しだから
省略できるカッコと看做せるんじゃないかっていう解釈もありじゃない?
0379デフォルトの名無しさん2016/03/10(木) 22:13:15.89ID:ktNP4enh
>>377
いや、カッコつけると値渡しになるのは別にいけないことではないと思うけど?
マイクロソフトだって正式に仕様として公開してるんだし
0380デフォルトの名無しさん2016/03/10(木) 22:17:23.35ID:7stvDyts
>>378
お前自分で書いておいて>>356の意味分かってないだろ。
「参照渡しが値渡しに変わった」のではないって意味だぞそのリンク先に書いてるのは。
0381デフォルトの名無しさん2016/03/10(木) 22:19:33.62ID:ktNP4enh
>>380
いや、現象として参照渡しと同じ結果なんだから
その理由は別にいいじゃん
なんか違う結果が出るシチュエーションってある?
0382デフォルトの名無しさん2016/03/10(木) 22:20:53.12ID:ktNP4enh
ゴメン、間違えた
>現象として参照渡しと同じ結果
じゃなくて
値渡しな
0383デフォルトの名無しさん2016/03/10(木) 22:22:46.38ID:YDCDLTcE
プログラミングで低レベルな部分を理解していないとどんな弊害が出るかっていう実例だなぁ、これ。
0384デフォルトの名無しさん2016/03/10(木) 22:23:24.86ID:7stvDyts
>>381
もはや何を言ってるのか訳分からんが
どうやって呼び出そうが参照渡しは参照渡しのままだ。
独自の解釈を編み出すより、まずそこを理解する努力をしろ。
0385デフォルトの名無しさん2016/03/10(木) 22:32:25.83ID:Fe+LxwxG
>>367
> ややこしいのはプロシジャ呼ぶ時のカッコの必須/省略可能のルール
ややこしいか?
'?' が引数だとして、構文が
Call hoge(?)
hoge ?
の二種類あるだけ
なので、
> Call hoge(a) ⇒ ?= a:変数なので参照渡し
> hoge a ⇒ ?= a:変数なので参照渡し
> Call hoge((a)) ⇒ ?= (a):式なので値渡し
> hoge (a) ⇒ (a):式なので値渡し
ってなるだけでしょ
0386デフォルトの名無しさん2016/03/10(木) 22:39:34.58ID:7stvDyts
惜しいなあ、そこは一時変数の参照渡しだ。
ヤキモキするからもうやめるわ。
0387デフォルトの名無しさん2016/03/10(木) 22:40:37.98ID:ktNP4enh
>>384
>もはや何を言ってるのか訳分からんが
>どうやって呼び出そうが参照渡しは参照渡しのままだ。

そうはいってもマイクロソフトもこう言ってるしな
別に独自の解釈って訳でもないのよ

https://msdn.microsoft.com/ja-jp/library/cc436535.aspx
>引数渡しの方法の決定
>引数を渡す方法は、プロシージャの宣言によって決まります。
>宣言で ByVal が使用されている場合、呼び出し元のコードでそれを変更することはできません。
>しかし、ByRef を使って引数が宣言されている場合は、
>呼び出し元のコードで引数名をかっこで囲むことによって、値渡しで渡すように変更できます。次に例を示します。
0388デフォルトの名無しさん2016/03/10(木) 22:40:42.91ID:BlUpxWze
>>385
Sub の場合はそうだけど、Function の場合が嵌りやすいね。
0389デフォルトの名無しさん2016/03/10(木) 22:48:29.46ID:6K4R3xGy
まとめると
byrefを引数に持つ関数やサブルーチンの呼び出し側で変数以外の式をパラメータとして与えると、
その式の結果を格納する一時領域が参照元になり、結果的にbyvalと同じ挙動に見える
という現象であって

>>385
で値渡しと書いてしまうとまた混乱が起きると思う
暗黙の一時変数が参照元になる仕組みをどう呼ぶかの話だけど
呼び出された関数/サブから見れば参照渡しは参照渡し
0390デフォルトの名無しさん2016/03/10(木) 22:56:18.57ID:YDCDLTcE
>>389
ByValも変数を別領域にコピーして利用するという仕様だから挙動的にはどちらも「値渡し」でいいんだろ。
問題はその「暗黙の一時変数」というもの自体を理解出来るかどうかだと思う。
0391デフォルトの名無しさん2016/03/10(木) 23:12:35.70ID:ktNP4enh
>>389
マイクロソフトがこれは値渡しだっていってんのに
どう呼ぶも糞もないわ
0392デフォルトの名無しさん2016/03/10(木) 23:18:22.79ID:1xnVZ4wK
VBAなんか全部ByValでいいよ
パフォーマンス的にはどうせExcel操作がボトルネックになるんだから
参照渡しなんか紛らわしいだけ
0393デフォルトの名無しさん2016/03/10(木) 23:20:00.55ID:TmlGNQiU
結局はcallもbyval byrefも書かないクソコードだからこんなことになるんだろう
返り値返さない関数はcall使えよ、んでbyval byref書けよ
しょーもな
0394デフォルトの名無しさん2016/03/10(木) 23:26:51.00ID:6K4R3xGy
まあ呼び方はどうあれ、これはトラブルの種だよ
呼び出し側で勝手にbyvalにできますなんて、関数/サブの定義を無視するような行為だからねえ
結局この仕様を知らないと、一見して何がおかしいか判らない上に、
動かしてもエラーにもならず、なぜか結果だけがおかしい
被害が1時間では済まないかもしれない
0395デフォルトの名無しさん2016/03/10(木) 23:30:35.11ID:BlUpxWze
>>393
callはともかくとして、みんなbyval byrefは書く前提で話してるようだが?
0396デフォルトの名無しさん2016/03/10(木) 23:36:07.63ID:4xET+MUO
>>394
値渡しに変更できると言う解釈もあるだろうけど

ただ単に式を評価した結果をメモリに置いて其処への参照を渡しているとも解釈できる

括弧で囲むと式になるというのはプロシージャの引数の時に限らない
0397デフォルトの名無しさん2016/03/10(木) 23:38:42.45ID:BlUpxWze
>>932
いやむしろ基本ByRefであるべき
変数を直接渡したくないときはコピーを作って代入すればいいんだし。
さすがに y = func((x)) と2重カッコにするのはやらないだろ。

個人的にはExcel操作なんかあまりやらない。
関数呼び出しのたびに変数のコピーなんかされたら大変なことになっちゃう。
0398デフォルトの名無しさん2016/03/10(木) 23:48:50.40ID:qFayifgR
VB.NETではByValがデフォルトでクラスライブラリのメソッドもほぼ全てByValだけどね
最近のプログラミング言語では基本的に常に値渡しを使用し、
参照渡しのようなことがしたいときはオブジェクト参照の値渡し(VBAだとByValでオブジェクトを渡す)を使うのが一般的になっている
0399デフォルトの名無しさん2016/03/10(木) 23:53:03.75ID:BlUpxWze
>>398
配列が ByVal で参照渡しになればそれでいいんだけどね。
>>397は言葉足らずだったが、「呼び出しのたびに配列のコピーされたんじゃかなわん」に読み替えてほしい。
0400デフォルトの名無しさん2016/03/11(金) 05:37:41.18ID:KiCPGGTy
>>398
Cの頃からそういう仕様だろ。ポインタを自由に扱える言語はそれでいいんだよ。
VBAみたいにポインタを隠匿する言語にはByRefの様な仕様が必要になるのであって、なんとなく参照渡しがあるわけではない。
0401デフォルトの名無しさん2016/03/11(金) 08:09:55.21ID:7Z/AuMHW
ポインタがなくて値渡しだけの言語なんていくらでもあるが。
参照渡しが必要だからあるわけじゃなく、VBがそういう設計思想だっただけだ。
0402デフォルトの名無しさん2016/03/11(金) 09:09:03.62ID:TWxKqqOQ
>>401
それは言い過ぎ。参照渡しが必要な場面があるんだからさ。
0403デフォルトの名無しさん2016/03/11(金) 11:24:01.36ID:nAypi/ek
VBAでもCollectionとClassを活用すれば全部ByValでいけないことはない
旧時代言語のVBAだとその辺はまだあまり洗練されてないから現実的にはByRefを使わざるを得ないけど
0404デフォルトの名無しさん2016/03/11(金) 11:37:46.96ID:0Hu19p0z
>>403
Collectionについて、犬にもわかるように優しい解説してるところない?
オタッキーな人が書いてる怪文書なものではなく。
0405デフォルトの名無しさん2016/03/11(金) 12:31:48.96ID:We4YLNv1
VBは難しい事は知らなくてもいいようにデフォルト参照渡しになっている
中途半端な知識を身につけて悩んでるような奴等は黙ってByRefにしときゃいいんだよ

お前らのためにVBがあるのだから
0406デフォルトの名無しさん2016/03/11(金) 13:13:17.67ID:ME9cp217
>>404
コレクションだから自分が集めたいものを集めたもの

名前の様な役割をするkeyやコレクション内での順番を指定するとものを取り出せる
0407デフォルトの名無しさん2016/03/11(金) 14:17:24.30ID:TWxKqqOQ
追加と削除とパフォーマンス上のトレードオフについてオタクっぽく解説を!!
0408デフォルトの名無しさん2016/03/11(金) 20:25:05.99ID:KiCPGGTy
>>407
線形リストっていうのはですね、その利便性に対してパフォーマンスがほとんど落ちない事が特徴なんですねデュフッ
一つ一つの要素はデータ部とノード部にンフゥ分かれるんですがね、これによってですね、
評価と探索を再帰的に行う事が出来てコンパイラ言語においても美しくコードが書けるんですねポホゥ
そして線形リストというのは探索一つとっても特徴的なものでウヒッ追加中にソーティングと同じ効果を与える事も出来るんですね
おっと、その特徴があるからOSのタスク処理でも広く使われているわけで、こんな事は常識ですな、こりゃ失敬オッポゥ
このノード部というのは当然ですがポインタなわけで、これによって連続した領域を確保する必要がないというのも利便性を上げている要因の一つなんですねヒョホッ
逆に予め一定の連続した領域を確保しておくとですねンンッキャッシュヒットレシオを向上させられるのでさらにパフォーマンスが上がるんですね
しかもKeyの様なユニークIDのみで一次検索をしますと容量を抑えられますから場合によっては線形リスト全体がキャッシュに乗ってしまう可能性もあるんですねオホッ
まぁ今のCPUは古参の我が輩には信じられないくらいのキャッシュ容量がありますからンフフッあまり気にしなくてもコーディングできてしまうかもしれませんがねコポォ
0409デフォルトの名無しさん2016/03/11(金) 20:46:11.49ID:1/lTJA2g
いいぞ
0410デフォルトの名無しさん2016/03/11(金) 22:27:37.87ID:FUuFvB4q
>>401
> ポインタがなくて値渡しだけの言語なんていくらでもあるが。
具体的な言語名書いてみそ
0411デフォルトの名無しさん2016/03/11(金) 22:28:40.82ID:9lXM9rzx
>>407
線形リストが出たので探索の観点て書いてみる
ExcelやDBのような複数フィールドを持つデータ構造では、何らかのフィールドによって
順序化された状態で扱われ、任意のフィールドをキーにしたソートが頻繁に行われる
しかしデータが何万行ともなるとソート処理を毎回正直に行うのでは遅すぎて使い物にならない
そこでソートに使わるフィールドに対しインデックスを保持しておくことにする
インデックスを参照すれば、ソート要求で実際にソートせずに見かけ上ソートと同じ出力結果を
データ量に比例した定数時間O(n)で得ることが可能になる
ちなみに毎回ソートする場合は最短でもO(n log n)時間となる (O(n) < O(n log n))

データの追加や削除については、インデックスにより順序化されていれば平均O(log n)時間で済む
線形リストでは、ある順序に基づく追加や削除の場合O(n)時間が掛かってしまう (O(log n) < O(n))

探索においてはデータの順序以外にキー自体のチューニングが存在する
SmalltalkやLispでいうところのシンボル(インターンドシンボル)は、
同一の文字列が一意に管理されるデータ構造で、文字列同士の比較はアドレスの比較と等しく、
探索はその文字列をインターン化した時点で完了する
これを一般化したものが連想配列等で使われるハッシュ構造O(1)である
また、文字列をトライや基数木で管理すると、文字列を走査した時点で探索が完了し、
この仕組みはハッシュ構造よりも高速であり、圧縮アルゴリズム等でもよく使われる
0412デフォルトの名無しさん2016/03/11(金) 22:40:00.71ID:9lXM9rzx
>>410
ちょうどLisp系なんかがそうだね
この場合VBAでいうオブジェクトの参照の値渡しに相当するから
それらを関数内から書き換える手段はいくらでもある
ちなみにLISPはマクロを使うと参照渡しっぽく記述できる
(あくまでそう見えるだけで実際に参照渡しを行っているわけではない)
値渡しといってもやりとりは全てアドレスかその領域に収まる即値だから効率も良い
GC前提の言語だとなんとか渡しみたいな指定のある言語は逆に少ない気がする
0413デフォルトの名無しさん2016/03/12(土) 01:33:53.67ID:Vp+P3H45
VBAのByRefと代入演算子=との関係は少しおかしなところがあるよ。
0414デフォルトの名無しさん2016/03/12(土) 01:55:29.41ID:L1DCwZtH
>>413
どこがどうおかしいのか詳しく
0415デフォルトの名無しさん2016/03/12(土) 02:57:20.50ID:4xL8NTYB
ポインタかぁ。
Cのことはよく知らないんだが、
テーブルジャンプが使えるのには恐れいったわ。

もっとも、もっと洗練された形のDelegateがある今
無いアドレスを指定してしまったりする怖さがあることを考えると、ちょっとなぁ。
0416デフォルトの名無しさん2016/03/12(土) 07:23:24.06ID:DI01AjHI
>>411
何かよく分からないけど、ExcelってシートにDB見たいにINDEX持てるんだ?

因みにキーから値を引っ張りたい場合、配列に設定してループで取ってくるのと
CollectionやDictionaryに設定して取ってくるのとどっちが早いんだろ。
0417デフォルトの名無しさん2016/03/12(土) 10:09:17.55ID:ZuDRYyOf
データベースをエクセルでも使いたいよなぁ。エクセルファイル内に保存できるようにしてほしい。
>>416
Keyが判明している限りはKeyで取ってくる方が早いよ。
一万要素あるDictionary型で実験した限りだとKeyで探る方は計測不能なくらい短い時間だったし。
0418デフォルトの名無しさん2016/03/12(土) 10:14:29.27ID:+KV61A6e
さすがにC#やVB.NET使えよ
どうしてもExcelに拘るんならシートをテーブルに見立ててOLEDBでも使え
0419デフォルトの名無しさん2016/03/12(土) 12:51:20.27ID:3TH7PHr+
すでに目の前にあるものだけがデータベースではない
基本的にデータベースは作るものだ
その為にエクセルマクロはお前の前にある
0420デフォルトの名無しさん2016/03/12(土) 12:53:33.97ID:LUcF5SRy
Accessあるじゃろ
エクセルvbaからアクセスにクエリ投げれるし
0421デフォルトの名無しさん2016/03/12(土) 12:55:42.38ID:2d1xhU2z
>>412
> ちょうどLisp系なんかがそうだね
Lisp なんて全てポインタみたいなもんなんだが w

> GC前提の言語だとなんとか渡しみたいな指定のある言語は逆に少ない気がする
GC と渡し方の指定は関係ないと思う
0422デフォルトの名無しさん2016/03/12(土) 13:02:57.66ID:dvfrI9vN
データベースといえば普通どうやってクエリの結果を取得するんかね?
自分はODBCツールで配列変数に一括読み込みするパターンなんだが。
0423デフォルトの名無しさん2016/03/12(土) 13:10:38.61ID:xmc3dh7U
>>422
MSQUERY
0424デフォルトの名無しさん2016/03/12(土) 13:22:38.49ID:dvfrI9vN
なるほどいったんシートに取り込むのか
0425デフォルトの名無しさん2016/03/12(土) 14:02:40.99ID:ZuDRYyOf
>>418
自由にツール使えればいいんだけど説得材料がないと申請がなかなか通らなくてな。VS高いし。
.NETとかで作ったDLLを参照設定にいれた場合って、他のPCで使おうと思った時はどうなんの?
エクセルファイル内に情報が含まれて、DLLを別個に送らなくても使えるなら説得材料になるんだけど。

OLEDBってADOとかだろ。できれば一つのエクセルファイルとして扱いたくてな。
複数ファイルに分かれていいならAccess掴んでアクセスファイル利用で解決するんだけど。

今はDictionary型を三つ使ったDBもどきなクラスを作ってやりとりして、
Terminate時にListObjectに保存してるんだけど、ListObjectって処理速度的にどうなんだろ。
まだ本格的な検証ができないせいでいまいち分からん。
0426デフォルトの名無しさん2016/03/12(土) 14:08:42.91ID:1YcKG8up
なにも開いていないのに
createobject("Shell.Application").windows.count
の値が1になるのですがこれはなんですか?
0427デフォルトの名無しさん2016/03/12(土) 18:27:17.32ID:BsaNud7m
さあなんでしょうね? FOR EACH でループ回して調べてみれば?
count=1 ならループしないで .Windows(0)でもいいとは思う
0428デフォルトの名無しさん2016/03/12(土) 22:40:06.05ID:0aWKpcQq
そこまで困っているわけじゃないのですが、
VBEの超高機能版みたいなエディタでお勧めのモノってありますか?
出来れば無料でお願いします。

プログラミング自体はVBAしか使えず、VBEでセコセコやってきたのですが、
職業プロウラマーの人は(言語までは聞かなかったのですが)、
もっと高機能なエディタを使っていそうです。
0429デフォルトの名無しさん2016/03/12(土) 22:50:51.64ID:Vp+P3H45
>>428
Vim for OfficeVBA K-edition
0430デフォルトの名無しさん2016/03/12(土) 22:51:37.29ID:Vp+P3H45
間違えた

Vim for OfficeVBA N-edition
0431デフォルトの名無しさん2016/03/12(土) 23:52:09.26ID:sJL6dJyL
高機能なエディタ使ってる俺カコイイってなわけでもあるまいに
0432デフォルトの名無しさん2016/03/13(日) 07:13:34.52ID:lSMOH+xf
でも気持ちは分かる。
VB.NetやっててVBAのコード書こうとすると
そのインテリセンスの機能の低さに愕然とするもんな。
0433デフォルトの名無しさん2016/03/13(日) 10:06:29.58ID:bEOCVA73
クラスのインスタンス変数(メンバ変数)をPrivateにしたときって、自モジュール内でも他のインスタンスのメンバには直接さわれないの?
other.member = Me.member
がエラーになるんだけど。
0434デフォルトの名無しさん2016/03/13(日) 11:30:25.64ID:8iD0JTja
>>433
他のインスタンスのメンバーもPrivateなんだろ? だったら触れないだろ。
0435デフォルトの名無しさん2016/03/13(日) 11:42:50.26ID:bEOCVA73
>>434
自クラスなのに?ダメなの?

やりたいことはcloneメソッドです。

自分と同じ内部データを持ったインスタンスをcloneで作って、一部のメンバだけ変えたい。
具体的には「プラスマイナスの符号だけ異なる別インスタンス」を作りたいんです。
「符号」は単純なプロパティなので、Public なProperty GetとProperty Setを作るつもり。
でもそれ以外な内部状態をあらわすものなので、外部からコントロールさせたくない。

cloneができればいいんだけど。
0436デフォルトの名無しさん2016/03/13(日) 11:50:28.92ID:8iD0JTja
>>435
クラス内でClone作ってプロパティ越しに吐き出すようにすりゃいいだろ。
0437デフォルトの名無しさん2016/03/13(日) 11:52:16.25ID:bEOCVA73
>>436
set clone = New クラス
としたあとの
clone.member = Me.member
ができないので困ってるんですよ。
0438デフォルトの名無しさん2016/03/13(日) 11:53:58.98ID:kQ6WFkk9
全部publicでいいじゃん
というか関数と構造体でいいよ
お前はVBAに一体何を求めてるんだ?まさかVBAで多人数開発でもやるつもりか?
0439デフォルトの名無しさん2016/03/13(日) 12:11:10.02ID:8iD0JTja
>>437
そのクラスが普段データを蓄積するために使うPublic関数から流し込んでやるんだよ。
それが嫌なら渡したいメンバー自体Publicでやれ。
04404282016/03/13(日) 12:12:20.68ID:18LsKVIr
>>430
>>429
ご回答ありがとうございますが・・

そのままぐぐっても、それらしきものが見当たりません。
該当ソフトウェアの配布元のURLを教えていただけませんでしょうか。

>>431
もうちょっとエディタに気遣いが欲しいなというのが希望です。
コメント閉じたり、Whileやifが入れ子になっているときに
片方のWhileや、Ifにカーソル当てると、対応するWendや、Endifが強調表示されたり(プロが使うエディタには普通にあるそうです)
気遣いのあるエディタがあればなぁ・・と思い質問しました。
0441デフォルトの名無しさん2016/03/13(日) 12:27:29.00ID:bEOCVA73
>>439
うーん、どうやらPublicでやるしかなさそうですね。
Public関数から流し込むにはその履歴保持が必要になっちゃうからいったん諦め。。

そもそも自クラスのPrivateにアクセスできない仕様が意味不明だけど。
0442デフォルトの名無しさん2016/03/13(日) 12:44:19.88ID:VQ49EEy6
>>441
消えろ
0443デフォルトの名無しさん2016/03/13(日) 13:05:39.36ID:LdX4fma4
>>442
なんでや。真っ当な話だろ。
0444デフォルトの名無しさん2016/03/13(日) 16:11:13.87ID:Wv1UMaca
>>441
クラスのプロパティならFriendってアクセスレベルあるからそれで良いんじゃね

>自クラスのPrivateにアクセスできない仕様
Privateっていうのは、クラスに対してじゃなくて、インスタンスに対してだから
同じ人間でもその心の中は個人の秘密だろ
0445デフォルトの名無しさん2016/03/13(日) 16:11:16.53ID:lSMOH+xf
>>441
ちょっと待て。
プロパティはPublicでメンバ変数はPrivateなんだろ?
普通それで出来ると思うんだが。

メンバ変数の型は何だ?それもインスタンスなら、SetterはLetの代わりにSet使わなければエラーになるし、
GetterでもSetterでも代入の祭には頭にSet付けていなければVBAだとエラーになるぞ。

構造体と言うかユーザ定義型ならまたちょっと違う問題が有るんだが今回は関係無さそうだな。

ひょっとしてそう言うオチなんじゃないのか?
0446デフォルトの名無しさん2016/03/13(日) 16:25:05.49ID:lSMOH+xf
ああ、よく読んだら同じクラスで生成した別インスタンスで
Private指定したメンバ変数を持って来ようって話か。
そらダメだろな。

>>444
VBAのクラスってFriendのスコープ使えるんだ。
初めて知った。
0447デフォルトの名無しさん2016/03/13(日) 16:33:32.91ID:bEOCVA73
>>444
Friend?
ちょっと試してみるけど、VBAのFriendってどういう効果が生まれるのかググってもいまいちわからんね...
0448デフォルトの名無しさん2016/03/13(日) 16:47:33.48ID:Wv1UMaca
>>446
何故かフィールドには適用できないけどな
タイプライブラリに書きこまれないとか、どうも実行時にいろいろ小細工してそう

Friendって、1ブック内でしか処理しないのなら実はPublicと大差ないからあまり意味が無いけどな
0449デフォルトの名無しさん2016/03/13(日) 16:54:13.20ID:bEOCVA73
privateの意味についてちょっとググってみた

クラスメンバーのアクセス修飾子
https://hydrocul.github.io/wiki/programming_languages_diff/class/modifier.html

C++とJava ⇒ 同一クラスであれば他のインスタンスからもアクセス可能。
Scala のprivateは他のインスタンスからのアクセスが可能なものと不可能なものの2種類あるようだ

VBAの場合はC++やJavaと異なり、他インスタンスからのアクセスも禁止するすごく厳密な仕様なんだな。
0450デフォルトの名無しさん2016/03/13(日) 21:34:12.60ID:kQ6WFkk9
厳密なんじゃなくて手抜きなだけ
Rubyなんかもそうだけど、コンパイル時の静的バインディングのない言語で素直にprivateを実装するなら
単に「インスタンス外からは見えない」ということにして実装してしまうのが簡単なんだよ
レキシカルスコープは実装面倒だからな
0451デフォルトの名無しさん2016/03/13(日) 21:54:51.85ID:Wv1UMaca
VBAは参照設定された奴は(可能ならば)コンパイル時にバインディングしてる筈だけどな
静的かどうかにかかわらず、外部公開しないことにして実現してるのはその通りだろうけど
0452デフォルトの名無しさん2016/03/13(日) 22:15:56.20ID:bEOCVA73
>>450
まあできないことを愚痴ってもしゃあないんで、適当にヌルーしながらほげふがすることにします。
具体的には単にメソッド一覧に載せないことをもってprivateとするとか...
(swapマジックでなんとかならないかな・・・)
0453デフォルトの名無しさん2016/03/14(月) 02:13:40.95ID:g7NdZw4d
ネットのページのソースから、
@カッコで囲まれた4つのランダムな数字(****)の数字部分を全て取り出し、変数に
格納したいです。なお、このカッコで囲まれた数字は複数存在し、ランダムに配置されています。

A別のページのソースでは、****pdpsという風に、後ろに特定の文字列
0454デフォルトの名無しさん2016/03/14(月) 02:18:01.77ID:g7NdZw4d
すみません、途中で途切れました。
A上記のように、文字列 "pdps" が後ろに必ずついている状態で、これも同様に数字部分を
全て取り出したいのですが、どのようにすればよいでしょうか?
0455デフォルトの名無しさん2016/03/14(月) 05:07:45.91ID:813TYYJm
VBA 正規表現 でググって正規表現の使い方を覚えるんだ
実際のパターンは正規表現のスレがあったはずだからそこで聞いてみてくれ
0456デフォルトの名無しさん2016/03/14(月) 12:42:43.00ID:v6y0Q57V
「"変数の値"と"同じ名前の変数"に加算」する場合の記述の仕方を教えて下さい。


「arr」と「みかん」という2つの定義済み配列があります。
arr(0)の値には商品名が入っています。
この値(商品名)と同じ名前の配列変数(今回の場合だと「みかん」)に、金額や個数を加算するプログラムを作りたいです。

例えば以下の様な場合、
--------------------------------------------
'売れた商品
arr(0) = "みかん" '商品名
arr(1) = 3 '個数
arr(2) = 120 '金額

'加算処理
みかん(1) = みかん(1) + arr(1) 'みかんの売れた個数をみかん(1)に加算
みかん(2) = みかん(2) + arr(2) 'みかんの売れた金額をみかん(2)に加算
--------------------------------------------
arr(0)の値は「みかん」なので、「みかん」という配列変数に個数と金額を加算したいです。

商品は数百種類ある為、商品ごとにif文等で加算処理を書くのはキツいので、なんとか自動的に商品名と同じ変数名に加算処理をしたいです。
よろしくお願いします。
0457デフォルトの名無しさん2016/03/14(月) 13:49:26.24ID:813TYYJm
>>456
悪い事は言わないから設計見直せ
普通は変数名を動的に変えたりはしないから
0458デフォルトの名無しさん2016/03/14(月) 14:23:36.82ID:HFOl9Mv1
>>456
dictionary使えば?
0459デフォルトの名無しさん2016/03/14(月) 15:08:43.45ID:18hvGh7e
>>456
そこが自動化できたとしても配列変数を数百個用意するのは嫌ではないのか?
0460デフォルトの名無しさん2016/03/14(月) 15:39:14.00ID:4ToVeZlp
処理が自動化出来れば変数宣言の自動化ぐらいわけなかろ
0461デフォルトの名無しさん2016/03/14(月) 15:51:08.22ID:18hvGh7e
配列宣言の自動化!?!?
0462デフォルトの名無しさん2016/03/14(月) 18:00:36.27ID:nTKtwcvi
クラス使えば簡単だけど
糞設計をどうにかした方がいい
0463デフォルトの名無しさん2016/03/14(月) 18:18:50.53ID:UwZkzskb
オブジェクト変数というものがあるということを知ったばかりの段階なんですが

Set ワークブック変数 = Workbooks.Openメソッド

こういう風にワークブック変数の中にメソッドが入ってて、それなのに以降その変数を
記述してもOpenメソッドが実行されるわけじゃないっていうのが意味わかりません。
Setっていうのは変数に値を代入するものとは違うんですか?
0464デフォルトの名無しさん2016/03/14(月) 18:44:23.46ID:/tUil7vL
>ワークブック変数の中にメソッドが入ってて
ここが違う
Workbooks.Open が返す Workbookオブジェクトが入る
0465デフォルトの名無しさん2016/03/14(月) 19:03:29.59ID:UwZkzskb
>>464
メソッドの結果(?)みたいなものが代入されるっていう仕組みなわけですか。
ありがとうございました。
0466デフォルトの名無しさん2016/03/14(月) 19:10:49.29ID:DzDVqAyb
その辺て前からちょっと気にはなってたけど
コレクション側(Workbooks)がOpenやAddでして生成されたインスタンス側((Workbook)がクローズって違和感あるよね
インスタンス(Workbook単体)をnewする手段が用意されてないから
コレクションによるオープンがコンストラクタ相当って考えればいいのんかな
COMの参照カウンタ式だとこれが自然な実装なのかな
それともこれも歴史的経緯ってやつなのかな
0467デフォルトの名無しさん2016/03/14(月) 19:26:14.79ID:18hvGh7e
自然か?と聞かれたら自然じゃないかもしれないけど、それ気にしたら禿げるやつや
0468デフォルトの名無しさん2016/03/14(月) 19:43:39.57ID:3u8ko9yD
>>456
そおゆうときは ゆーざーていぎがたへんすう をつかえって たなかのじーちゃん がゆってた
http://officetanaka.net/excel/vba/variable/12.htm
0469デフォルトの名無しさん2016/03/14(月) 19:48:15.00ID:hCKIGns+
普段必要な時しかvba触らないんですが
触らないと感覚が鈍るというか忘れちゃうというかそんな感じです。
定期的に何かしらは作って触っていたいとおもうんですが今は特に必要なものがありません。
そんなとき皆さんはどうしてますか?
0470デフォルトの名無しさん2016/03/14(月) 19:52:17.33ID:18hvGh7e
>>469
不可能と思われていることにトライする
0471デフォルトの名無しさん2016/03/14(月) 19:59:59.98ID:4ToVeZlp
>>466
Workbooksに属さないWorkbookが単独で存在するのは非常に不自然な状態であるから
そういう状態が起こりえないようにWorkbook単体のNewを禁止するのはごくごく自然な実装
0472デフォルトの名無しさん2016/03/14(月) 20:28:00.62ID:FBZnFsGZ
>>456
ディクショナリーでキー使え
0473デフォルトの名無しさん2016/03/14(月) 20:51:52.99ID:huhKpIQ6
変数名自体がほしいことって度々あるけど、
Dim りんご とやっても実際に"りんご"という名前の変数が作られるわけじゃないから仕方ないんだよな。

ということが分かっていてもなお、変数名が取得したい。特にエラー吐く時に。
0474デフォルトの名無しさん2016/03/14(月) 20:59:12.04ID:83gsBVGi
>>469
そうだなぁ。
自分に興味のあることでちょっと無理と思えるものを作るかな。
で、作り終わったらまたちょっと無理と思えるものを作っていく。

例えばだけど、こんな手順で。
ライフゲーム → テトリス → ぷよぷよ → パズドラ → 彼女 → 子供

因みに作ったものは使える部分を部品化しておくと後に繋がるよね。
0475デフォルトの名無しさん2016/03/14(月) 21:09:16.21ID:83gsBVGi
>>473
エラーだけならエラーオブジェクトのSourceプロパティから取得出来なかったっけ?

あれってVB6だけだったかなぁ。
0476デフォルトの名無しさん2016/03/14(月) 22:44:54.62ID:hCKIGns+
>>470
>>474
ありがとうございます。
難しいものにトライします。
0477デフォルトの名無しさん2016/03/14(月) 23:01:42.72ID:TLENZEbQ
>>473
> Dim りんご とやっても実際に"りんご"という名前の変数が作られるわけじゃないから仕方ないんだよな。
え?
普通に作られるけど?
0478デフォルトの名無しさん2016/03/14(月) 23:13:05.86ID:QTE/dgcg
VBA実行中の状況を知る方法ってなにがよいでしょうか?

Debug.Printでイミディエイトウィンドウにログを出してみたのですが
処理が重くなるとログ自体も停止してしまいます
0479デフォルトの名無しさん2016/03/14(月) 23:23:56.96ID:FcVGtuk4
フォームにラベルで現在作業中のプロシジャ名を出している
フォームが無いものだったらステータスバーにでも表示させたら?
0480デフォルトの名無しさん2016/03/15(火) 00:02:36.47ID:DdL3juM3
>>478
イミディエイトはせいぜい200行くらいしか表示できない。
0481デフォルトの名無しさん2016/03/15(火) 04:01:06.97ID:sOE53YFm
>>475
あれどんなエラー起きても大概がVBProjectだからなぁ。
Help見ても「自前で関知できないような場合にメモ帳として使え」的なことが書かれてるから、
基本的にあのSourceプロパティって使えないんだよな。

エラーが起きた瞬間に上書きされるせいで事前に書いておくってこともできないから、
Sourceプロパティから戻そうとすると、一度スルーしておいて書き込んで返すとかしかなくなる。

自前でエラーログを取るもの作ってなんとかしてるけど、変数名と変数を列挙する必要があってソースが汚い。
0482デフォルトの名無しさん2016/03/15(火) 05:25:41.86ID:H3qJTEJr
>>478
テキスト出力
0483デフォルトの名無しさん2016/03/15(火) 10:38:37.05ID:Q/3qqT0J
クラスのメリットってなんですか?
0484デフォルトの名無しさん2016/03/15(火) 10:53:55.56ID:N1dckU7v
クラスで一番かわいい女の子に告白して付き合ってエッチできることです。
0485デフォルトの名無しさん2016/03/15(火) 12:27:05.24ID:aLiUTHoD
マジか俺もクラスするわ
0486デフォルトの名無しさん2016/03/15(火) 15:09:44.47ID:DdL3juM3
ターゲットを誤るといい思いできないのは似てるな。
0487デフォルトの名無しさん2016/03/15(火) 19:49:30.29ID:sOE53YFm
必ず解放しなきゃならない類いのオブジェクトをTerminateで確実に解放できるところは利点だな。
TextStreamとか解放しないとロックかかるタイプのは異常終了しても閉じられるので助かる。
0488デフォルトの名無しさん2016/03/15(火) 20:07:50.67ID:DdL3juM3
ちょっと疑問なんだけど、Set Nothingをせずにエクセルを閉じようとするとリソースの解放はできないよね?
0489デフォルトの名無しさん2016/03/15(火) 20:15:18.00ID:sOE53YFm
Objectに相当する変数はEndステートを通る時にNothingが代入されてるらしいけど。
0490デフォルトの名無しさん2016/03/15(火) 21:29:31.88ID:vbavnT06
wshでcsvをopentextfileで読み込んでるんだけどreadlineの中身がmsgboxで見ると
ドット二個、空白、空白、空白だけで以降の複数行が全く読まれずに終わるんですけど原因わかる人いませんかね、、?
今そのcsvが手元にないのでテスト出来ないんですけど、、、
0491デフォルトの名無しさん2016/03/15(火) 21:36:41.43ID:Qi5mg9Mn
>>489
Endステートってなんだよ
Endステートトメント(End命令)でプログラム終わらせたらTerminate走らんぞ
変数がNothingされるのは、正確にはその変数の寿命が尽きたときな
End Sub(やFunciton)で直接処理されてるわけではない

>>488
エクセル閉じようとした時もTerminate走ってないっぽいな
VBA的にはEnd扱いだと思われる
0492デフォルトの名無しさん2016/03/15(火) 21:46:58.60ID:Qi5mg9Mn
>>490
WSHはスレ違いな気もしないでもないけど
>以降の複数行が全く読まれずに終わる
意味不明だな
そもそもopentextfileはファイルオープンするだけで読み込みなんてしないし
readlineは1行しか読み込まないんだが

まあどうせ文字コードが違うってオチじゃないのかね
0493デフォルトの名無しさん2016/03/15(火) 22:14:19.86ID:vbavnT06
>>492
お?スレチマジか

やっぱり文字コードかな?いやこちらもどうぐぐればいいかわからない意味不明現象で困ってる
https://gallery.technet.microsoft.com/scriptcenter/fe4b8006-08b9-4d6a-a8f2-716c07ca3e52

単純なこれが出来ない。atendofstreamが止まらないor最後まで行かず止まる
0494デフォルトの名無しさん2016/03/16(水) 00:31:56.59ID:P1US5avI
クラスの仕様があまりにひどい。
まともに扱えるオブジェクトがMeだけじゃんかよ。
0495デフォルトの名無しさん2016/03/16(水) 01:35:36.47ID:k6ukW3Ea
>>494
え?どういうこと?
0496デフォルトの名無しさん2016/03/16(水) 02:53:26.43ID:lGeuWDGV
クラス連中があまりにひどい。
まともなやつはオレだけじゃんかよ。
0497デフォルトの名無しさん2016/03/16(水) 03:04:24.75ID:OZ8BJTSu
どうせまた言語間の仕様の違いを吸収できなくて文句言ってるんだろ。
0498デフォルトの名無しさん2016/03/16(水) 03:46:41.74ID:4BDrWnpI
>>490
CSV には、様々な形式があって、
" などの特殊文字のエスケープの仕方が色々あるので、
データ中に、ちょっとでも想定外の文字が入ると誤動作する

TSV タブ区切りの形式の方が、誤動作しにくい

また、文字コードが異なっても誤動作する

WSH・VBScriptのスレで聞けば?
0499デフォルトの名無しさん2016/03/16(水) 06:37:26.60ID:P1US5avI
>>495
Newしたオブジェクトを返すメソッドを書こうとするとまともなカプセル化を保てない。
言語間の仕様の違いとかの問題じゃない。カプセル化がまともにできないのを「仕様」と呼ぶんじゃなければね。
0500デフォルトの名無しさん2016/03/16(水) 07:20:15.86ID:gYeAB//s
>>499
何を今更。>>433の話題が出てきた時点で気付かないと。
0501デフォルトの名無しさん2016/03/16(水) 08:57:34.13ID:dewCsMpx
音声ファイルや動画ファイルには長さとかタイトルとかいろんな情報がくっついていることは
フォルダで見たときそれらを表示させることで見ることができることからわかりますが
それらの情報をFileSystemObjectのプロパティかなにかからVBAで取得するにはどうしますか?
0502デフォルトの名無しさん2016/03/16(水) 09:47:56.17ID:P1US5avI
>>500
まさに>>433のことを言ってるんだよ。今更とかじゃなくてちゃんと広めるほうがいいだろう。
0503デフォルトの名無しさん2016/03/16(水) 12:19:00.42ID:Yo6ZYJ/B
知らないのはお前だけだから変な心配しなくてもいいよ
0504デフォルトの名無しさん2016/03/16(水) 12:22:13.55ID:P1US5avI
そのあとの反応を見れば明らか。
0505デフォルトの名無しさん2016/03/16(水) 12:26:04.62ID:P1US5avI
特に>>434とか>>439とか
0506デフォルトの名無しさん2016/03/16(水) 12:40:07.09ID:dewCsMpx
さあいかがでしょうか?
0507デフォルトの名無しさん2016/03/16(水) 13:23:01.13ID:SDJrVpb1
>>502
プライベートなフィールドに自分以外のインスタンスがアクセスできないことが、どう
>Newしたオブジェクトを返すメソッドを書こうとするとまともなカプセル化を保てない
ことになるのか解説してくれ
むしろ同一クラスでも他インスタンスからさわれない方が厳密にカプセル化出来てると思うけど
Newしたオブジェクトを返すメソッドに限定してるのも俺には理解できん
0508デフォルトの名無しさん2016/03/16(水) 13:37:07.26ID:P1US5avI
>>507
秘密というものは「誰と共有するか」が重要。自分だけしかアクセスできないんじゃ大したことはできない。
Newしたオブジェクトは「自分」ではないが、そこに必要な属性を設定して返したいのに触れないんじゃどうしようもない。
そうすると余計なPublicメソッドを実装するはめになる。
秘密を仲間内で共有する方が結果的にカプセル性は向上する。
0509デフォルトの名無しさん2016/03/16(水) 13:49:23.00ID:wUBmweec
>>501
FSOじゃ情報とれないかもよ
下のコードでアクティブシートに 情報が表示されるので このコードを元に作ればいいかと

Sub TEST()
 Set shel = CreateObject("Shell.Application")
 Set Folder = shel.Namespace("D:\動画")
 Set TARGET = Folder.ParseName("ヌルポ.mp4")
 Row = 1
 For I = 0 To 9999
   name = Folder.GetDetailsOf(Nothing, I)
   Value = Folder.GetDetailsOf(TARGET, I)
   If name <> "" Then
     Cells(Row, 1) = I
     Cells(Row, 2) = name
     Cells(Row, 3) = Value
     Row = Row + 1
  End If
 Next
End Sub
0510デフォルトの名無しさん2016/03/16(水) 14:19:22.18ID:SDJrVpb1
共有したら秘密じゃないし
秘密を覗ける・変更できる時点でカプセル化できてないし

まあ、現実的には出来た方が楽な点が多いってのは事実だが
0511デフォルトの名無しさん2016/03/16(水) 14:32:08.38ID:P1US5avI
>>510
秘密は「仲間内で共有するもの」じゃないの?
0512デフォルトの名無しさん2016/03/16(水) 17:38:57.76ID:FUX0WtD6
インスタンス内でしか利用しないgetterやsetterまでprivateじゃなくpublicで宣言しないといけないからとかかな

そういうのは全部publicでも良いような気がするけども
0513デフォルトの名無しさん2016/03/16(水) 19:41:25.63ID:OZ8BJTSu
通信(データのやりとり)は隠匿されていた方が利用範囲が広がって扱いやすいけど、
そもそもVBAはフロントエンドを作る為のものだから、そんな隠匿が必要なバックエンドのやりとりは守備範囲が違う。

JavaScriptでOS作るくらい守備範囲が違う。
0514デフォルトの名無しさん2016/03/16(水) 19:49:42.09ID:iNKCnWDy
全てが自分のさじ加減でどうにでもなるエクセルマクロでprivateとか意味ないからな
だまって全部publicにしとけばいーんだよ
0515デフォルトの名無しさん2016/03/16(水) 20:00:21.07ID:tD6FjLEI
>>513
なんだ、そのアホ理論は w
その理論なら普通のアプリケーション開発言語は全部 public でいいってことになるぞ
0516デフォルトの名無しさん2016/03/16(水) 20:00:31.98ID:08Q65Pye
>>498
どうもです。原因は文字コードでした、、
文字コード変わると出力される文字がガチャガチャになるだけだと思ってましたが
まさか先頭行でeofやスクリプトがテキストの終わりを見つけられなくなり無限ループにハマるのは知らなかったので中々勉強になりました。。
0517デフォルトの名無しさん2016/03/16(水) 20:02:34.40ID:XCH1ZELV
>>513
もちろんそれもある。
だがその前にVBAのPrivateのスコープが糞なら>>449が言ってるみたいにC++やJavaのPrivateが同クラスから生成したとは言え、
見えてしまうのもまた糞なんだということに気付かない
このC++使いが糞なんだと思うよ。

確かにVBAは古い言語だし、
複数人で一つのシステム作るようなことは
少ないから然程問題でも無いかも知れないけど、
大きなシステムを作ることを前提とした言語では、
この問題は大きいのかもしれないね。

取り敢えず、>>494には「ブーメラン乙」と言っておこうかな。
0518デフォルトの名無しさん2016/03/16(水) 20:06:33.63ID:P1US5avI
全部Public?たけのこの里抹茶味以上にありえんわ
0519デフォルトの名無しさん2016/03/16(水) 20:11:31.74ID:08Q65Pye
いやー理論的には全てpublicでいいと言えばいいはずですがな
だってオブジェクトやプロパティの秘匿性なんてコンピューターからしたら何の利点もなく
人間がただ自縛プレイしてるだけとも言えるちゃ言えるはずですがな。

理論的には
0520デフォルトの名無しさん2016/03/16(水) 20:12:59.38ID:iNKCnWDy
>>518
聞きかじりの浅はかな知識でプログラミング議論ごっこをしたいならマ板にいってやれ
あっちならお前に付き合ってくれる暇人も大勢いるだろ
0521デフォルトの名無しさん2016/03/16(水) 20:20:08.01ID:P1US5avI
Privateデータをパスワードか何かと混同していないか?
何度も言うように秘密というのものは内輪で共有し、外に秘匿することで価値が出るんだよ。
実際自分のクラスでさえPrivateが触れないんじゃclone作るのに支障があるし、逆にPublicにしたらユーザーコードからさえ見えてしまう。
0522デフォルトの名無しさん2016/03/16(水) 20:23:09.45ID:OZ8BJTSu
VBAは単体でコードをDLL化出来ず、そのもの人間に読める様な状態で、かつ書き換え可能な状態でしか利用できないので、
Privateはインテリセンスで一覧にドバッと表示されるのを抑制する程度の意味しかない。

だからカプセル化という発想そのものがVBAでは無意味。.NETでやるべき。
0523デフォルトの名無しさん2016/03/16(水) 20:41:47.06ID:raSxUhkM
>>522
無難だな
0524デフォルトの名無しさん2016/03/16(水) 20:45:48.53ID:XCH1ZELV
>>521
君の持論はどうでもいい。

内輪って何を持ってして言ってるんだ?
同じクラスで生成したものに覗かれたくないとき
どうすんだよ?

同じクラスの奴だって宗教とか性癖とか知れたら個人情報漏洩だろ?

君だって家族に自分が隠しているエロ動画が入ったフォルダ位置知られたくないだろ?

VBAは逆にPrivateが他所から見えないから
他所に見せるとなればPublic指定するしかないと
なればそれはそれで不味いけどな。

一人の世界でちまちま作ることが多いから問題になりにくいだけで。
0525デフォルトの名無しさん2016/03/16(水) 20:50:14.86ID:055k0p4j
>>524
オブジェクト指向を理解してないなら無理しなくていいんだよ
0526デフォルトの名無しさん2016/03/16(水) 20:51:33.31ID:XCH1ZELV
>>525
でもそう言うことだろよ
0527デフォルトの名無しさん2016/03/16(水) 20:54:42.71ID:055k0p4j
>>526
どういうこと?
例え話はいいから具体的に同じクラスの他のインスタンスのprivateメンバにアクセスできて困る状況を教えて
0528デフォルトの名無しさん2016/03/16(水) 20:56:55.51ID:X1wUkCGN
それ以前にPrivateがなんで必要なのかすら説明できなそう
0529デフォルトの名無しさん2016/03/16(水) 20:59:09.97ID:P1US5avI
自分以外ぜんぶ秘密にしろと言う奴とぜんぶPublicでいいと言う奴を同時に相手にすることはできない。
0530デフォルトの名無しさん2016/03/16(水) 21:02:32.65ID:08Q65Pye
個人的にはvbsのクラスはどっちかと言うともはや構造体の方が近いけど(最近の言語は構造体にプロパティは勿論メソッドも付けれてビックリ)
scripting.filesystemobjectとかos依存のフレームワーク的なモノも関わってくるからそれじゃ"印象"として構造体と呼ぶに相応しくないから
オブジェクトと呼んで、オブジェクトと呼ぶからついでにクラスと呼ばせてるとか想像

もちろんこれはオブジェクト指向のオブジェクトとはかけ離れた内容という
0531デフォルトの名無しさん2016/03/16(水) 21:06:57.13ID:XCH1ZELV
まんま>>524の話を置き換えてみれば分かるだろ?
君の家族で個人の情報を扱うクラスがあって、
例えばどんなカテゴリの商品を普段買っているかを取得するメソッドがあったとしよう。

Privateな変数に、買った商品名からカテゴリ分けするために、一時的に買った商品名が格納されるとしよう。

他のインスタンスから幼女がどうのとか見えちゃうんだぜ?
0532デフォルトの名無しさん2016/03/16(水) 21:13:07.14ID:055k0p4j
>>531
何の問題もない。なぜなら同じクラスだから。
その個人情報を扱うクラスを作ったのが俺なら、
そのクラスの実装の詳細はもともと全て俺の手中にある。インスタンスが違おうが関係ない。
そもそも根本的なところを勘違いしてるみたいだが、Privateの目的はクラスの内部状態を隠蔽することで
クラスの実装変更の影響が外に及ばないようにすることにある。
0533デフォルトの名無しさん2016/03/16(水) 21:18:00.41ID:XCH1ZELV
>>532
ふと気になったんだがC++やJavaの場合、インターフェースを使ったものでも互いに内部が見えてしまうのか?
0534デフォルトの名無しさん2016/03/16(水) 21:25:40.64ID:OZ8BJTSu
VBAのPrivateが同一クラス別インスタンス間でも隠匿されているという仕様は変えようがないので、
これにいくら疑問を投げかけようが、同一クラス間でのPrivateの共有がいかに便利かを説こうが無意味だから別スレでやれ。
0535デフォルトの名無しさん2016/03/16(水) 21:26:56.16ID:08Q65Pye
この話題で荒れる理由はvbsのクラスとオブジェクト指向のクラスが全くの別物であるという事だと思いました
0536デフォルトの名無しさん2016/03/16(水) 21:28:01.91ID:P1US5avI
念のため言っておくと「Privateにすると手間ばかりかかるくせに大したガードにならないからやってらんねー」という意見を否定するつもりはない。
しかし言語を擁護するような発言は理解しがたい。一緒にVBAをこき下ろせばいいのに。
0537デフォルトの名無しさん2016/03/16(水) 21:30:53.11ID:XCH1ZELV
>>534
全くその通りだな。
まだ「こうすると代用が効く」と言う話ならともかく、
ただ重箱の隅を突いて「VBAのクラスは糞だ!C++SUGEEE」って言ってる奴から
何か学べることが有るのかと言われると疑問ではあるな。

どっちかといえば、またC++かと思うだけだ。
0538デフォルトの名無しさん2016/03/16(水) 21:31:17.58ID:055k0p4j
>>535
そんなことはない
継承ができない以外はだいたい一般的なクラスベースのオブジェクト指向言語のクラスと同じだよ
念のため言っておくが俺は同じクラスの別インスタンスのPrivateを触れないなんて大した問題ではないし
VBAでカプセル化なんてどうでもいいと思っている方だ
0539デフォルトの名無しさん2016/03/16(水) 21:41:43.36ID:P1US5avI
>>537
重箱の隅?
実際に大いに困ってるから言ってんじゃねーか。
それに代用案はもともとこっちが知りたかったことだ。
意に反して「そんなの必要ない」の声が出てきたからどっかにいっちゃったけど。
0540デフォルトの名無しさん2016/03/16(水) 21:44:27.31ID:XCH1ZELV
>>539
何をそんなに大いに困ってるんだ?
そもそもVBAでPublic指定にしてそんなに困ることって何よ?

何かVBAにやらせること間違ってるんじゃないの?
0541デフォルトの名無しさん2016/03/16(水) 21:50:26.51ID:X1wUkCGN
>>539
ネーミングルールでいいじゃん
名前にウンコチンコ付いてたら触ろうとは思わないでしょ
0542デフォルトの名無しさん2016/03/16(水) 21:51:08.11ID:08Q65Pye
>>538
例えば今流行りのswiftはクラスじゃなく構造体でプロパティとメソッド作って、それぞれpublicとprivate設定出来て
それでいてクラスやオブジェクトはまた別に"オブジェクト指向でプログラミング出来る"という線引きを持って
それぞれswift内で存在してるんだけどvbsにはそういうしっかりとした区別無いでしょう?

swift内で構造体と呼べるものがvbsではクラスオブジェクトと呼べてるし
0543デフォルトの名無しさん2016/03/16(水) 21:58:31.99ID:XCH1ZELV
>>542
俺はswift知らないけれど
あれやってる人はみんないいって言うよね。

ただMac買ってまでやりたいとは思えない。
0544デフォルトの名無しさん2016/03/16(水) 22:05:01.48ID:P1US5avI
>>540
オブジェクト(Me)の属性のうち1ヶ所だけを変えたオブジェクトをNewして返すメソッドを作りたい。
それ以外の属性としてはそれなりの過程を経て組み立てられたDouble行列なんかを複数持っている。
内部的な整合性の面ではデリケートに扱わざるを獲ない感じ。
変えたい属性は単なるLong値なのでPublicでもいい。
だからclone作りたい。
0545デフォルトの名無しさん2016/03/16(水) 22:10:28.91ID:6prA8Vtk
>>544
あきらめろ
0546デフォルトの名無しさん2016/03/16(水) 22:11:32.97ID:XCH1ZELV
>>544
うむ。あきらめろ。
0547デフォルトの名無しさん2016/03/16(水) 22:19:16.12ID:iNKCnWDy
>>544
いや勝手に作れよw
ここでクダクダ暴れてる暇があればとっくに出来てるだろそんなもん
0548デフォルトの名無しさん2016/03/16(水) 22:35:11.31ID:XCH1ZELV
冗談はともかく、自分の中で自分を生成して属性移し替えてその1箇所だけ値変えて返却するんじゃ駄目なの?
0549デフォルトの名無しさん2016/03/16(水) 22:42:24.68ID:P1US5avI
>>548
えっえっそんなことができるの?
0550デフォルトの名無しさん2016/03/16(水) 22:58:36.65ID:XCH1ZELV
>>549
て言うかObject指向知ってるんだよね?
今までC++ではシングルトンパターンとか使ったことないの?
0551デフォルトの名無しさん2016/03/16(水) 23:06:13.93ID:055k0p4j
その属性移し替えたり一箇所だけ値変えたりするためには
同じクラスの別のインスタンスのPrivateフィールドにアクセスする必要があります
以下ループ
0552デフォルトの名無しさん2016/03/16(水) 23:06:49.26ID:XCH1ZELV
一応VBAでも試して見たけど普通に出来るな。
0553デフォルトの名無しさん2016/03/16(水) 23:10:47.78ID:XCH1ZELV
>>551
別のインスタンスと言うより生成した自身のプロパティだろ?
何でループする必要があるんだ?
0554デフォルトの名無しさん2016/03/16(水) 23:16:17.22ID:P1US5avI
>>553
クローンだよ。自分そのものじゃないよ。
0555デフォルトの名無しさん2016/03/16(水) 23:21:42.03ID:XCH1ZELV
>>554
ごめん、何をもってクローンと言ってるのか分からない。

自分自身の内部で生成するということは当然格納されているアドレスも違うし
インスタンスとしても別物だし、プロパティに設定すれば当然別の値として設定される訳だけど、

何をもってクローンと言ってるの?
0556デフォルトの名無しさん2016/03/16(水) 23:23:04.93ID:P1US5avI
クローンて一般化してる用語だから通じてると思ったけど一応。
http://java.keicode.com/lang/clone.php
フィールドの値まるごとコピーだけど別の実体。
クローンに何か操作しても元のオブジェクトにはもう影響は及ばない。
0557デフォルトの名無しさん2016/03/16(水) 23:25:52.96ID:XCH1ZELV
>>556
その認識があってなんで自分そのものって話が出て来るの?
0558デフォルトの名無しさん2016/03/16(水) 23:27:00.84ID:08Q65Pye
もしかしたら色々間違えてるかもしれないけど上で言ってるシングルトンみたいに
パブリックメソッドで自身をオプション付きで生成するしか無いんじゃないですかね?その内容なら
どの道言語仕様としてやり方が極端に少ないからそんなのしか思い付かない、、
0559デフォルトの名無しさん2016/03/16(水) 23:28:40.04ID:P1US5avI
>>553
Function clone() As myClass
Set clone = New myClass
' ここ
End Function

「ここ」でどうやってMeの属性をcloneにコピるかだけど、
Me ≠ clone だからclone のPrivate属性には触れないよ。
0560デフォルトの名無しさん2016/03/16(水) 23:32:36.78ID:XCH1ZELV
>>559
そのメソッドはMyClassに書かれているという認識でいい?
0561デフォルトの名無しさん2016/03/16(水) 23:38:58.03ID:iNKCnWDy
なんでまたprivateになってんだよw
0562デフォルトの名無しさん2016/03/16(水) 23:44:04.84ID:P1US5avI
>>560
そうだよ
>>561
一貫してPrivateを主張している。別にまだ諦めているわけではない。自分ももくは誰かが裏技を思い付く可能性はまだある。
0563デフォルトの名無しさん2016/03/16(水) 23:47:04.33ID:iNKCnWDy
>>562
ねーよwとっととその無駄なこだわりは捨てろw
0564デフォルトの名無しさん2016/03/16(水) 23:49:04.03ID:P1US5avI
>>563
お前最初っから下らないレスしかしてないじゃん。
ゴミ。
0565デフォルトの名無しさん2016/03/16(水) 23:58:10.46ID:XCH1ZELV
MyClassの中

Private m_Hoge As Long
Public property Let Hoge(ByVal value As Long)
m_Hoge = value
End Ploperty
Public property Get Hoge() As Long
Hoge = m_Hoge
End Property

Public Function GetClone() As MyClass
Dim clone as New MyClass
Clone.Hoge = 1
Set Getclone = clone
End function

俺が言いたいのは、Public指定でもこれで要件が満たせるから何を大いに困ることがあるのかと言うことなんだけど。

このクラスを生成したとき、Hogeには0が入っているがGetCloneで取得したときには1が入る。
他も自分自身から取得して、自分の中で生成したインスタンスのプロパティに設定すればそのままの値となるわな。

別にPublic指定で、今回の件について困るとは思えない。
0566デフォルトの名無しさん2016/03/17(木) 00:01:06.36ID:SViIjcu4
>>564
下らないのはお前だわw
最初から素直に聞いてればいくらでもいい方法教えてやるっつーのに
マジで損してるぞお前
0567デフォルトの名無しさん2016/03/17(木) 00:01:21.08ID:t5Tl0ItQ
うむ、iPhoneで打ってるから大文字小文字が色々おかしいな。
0568デフォルトの名無しさん2016/03/17(木) 00:10:21.08ID:8qNHX2Vh
>>565
そのProperty Let Hoge が Public だから全くの外部からでも(でたらめな)属性をセット可能となっている。
>>544で書いたように、そんなことはしたくない。
あなたは「オブジェクト指向が〜」と言ってたからそれはわかるよね。
0569デフォルトの名無しさん2016/03/17(木) 00:19:58.82ID:XFm+eMc1
>>568
privateだpublicだなんてのはオブジェクト指向とはみじんも関係ねーわw
生半可な知識で意地はってないで素直に頭下げろって恥ずかしい
0570デフォルトの名無しさん2016/03/17(木) 00:20:34.85ID:t5Tl0ItQ
>>568
論点がずれていると思うんだが。

したい、したくないと
大いに困ると言うのはまた別の話だ。

で、結局のところ何に大いに困ってるのか。
Privateのスコープが同クラスで他のインスタンスには効かなくても別段困らない例を
一つ挙げてしまっただけな訳だが。
0571デフォルトの名無しさん2016/03/17(木) 00:30:45.73ID:t5Tl0ItQ
>>568
ついでを言うと、ではこの新たに内部で生成されたインスタンスが返却されるまでにどうやってHogeにデタラメな値を入れるのか。

そもそも内部で大元のインスタンスがPrivate宣言で作成されているものだから、外部から変えようがないと思うんだが。

ちょっと、生成されてから返却されるまでに外部からHogeにデタラメな値を設定するコードを書いてみてくれないか?
0572デフォルトの名無しさん2016/03/17(木) 00:34:09.94ID:Opt/41wo
publicだからデタラメな値が入ってそれが嫌なのは理解出来るけどもprivateでもデタラメな値入らないってわけでもないから
その辺どうしたい?エラー値が来たらフィルタリングして規定値で我慢とか???
0573デフォルトの名無しさん2016/03/17(木) 01:33:22.63ID:8qNHX2Vh
>>572
メソッド内部で行った計算に従って内部の行列値が推移するんであって、計算結果を外からセットする訳じゃない。エラー値が来たらなんて状況はそもそもない。
値が推移する際、ある不変条件を保ちながら変化していくんだけど、値を丸ごとコピーするクローンならその不変条件を守れる。
0574デフォルトの名無しさん2016/03/17(木) 03:28:42.76ID:O2I/XSsC
Excelアドイン(*.xlam) と Friendキーワード使えば似たことは出来なくもなさそう
ただしマクロアドイン用に別ファイル(*.xlam)が必要になるけど

■ Excelアドイン(例: test.xlam → ★例としてVBAProject名をMyClassPrjとかにする)
'****** MyClassクラス(★MyClassクラスのInstancingプロパティを “PublicNotCreatable” に変更)
Private m_Hoge As Long
Friend Property Let Hoge(ByVal value As Long)
 m_Hoge = value
End Property
Friend Property Get Hoge() As Long
 Hoge = m_Hoge
End Property
Public Function GetClone() As MyClass
 Dim clone As New MyClass
 clone.Hoge = 1
 Set GetClone = clone
End Function

'****** 標準モジュール(★ PublicNotCreatable のクラスは、外部の参照元からNewが出来ないため用意する)
Public Function CreateMyClass() As MyClass
 Set CreateMyClass= New MyClass
End Function

■ 参照元のExcelブック本体(例: Book1.xlsm → ★参照設定で上記のアドインファイル(VBAProject:MyClassPrj)を追加)
Sub main()
Dim obj As MyClass
Dim obj2 As MyClass
Set obj = CreateMyClass
Set obj2 = obj.GetClone
End Sub
0575デフォルトの名無しさん2016/03/17(木) 05:05:01.31ID:Bi20tHSa
>>532
>その個人情報を扱うクラスを作ったのが俺なら、
>そのクラスの実装の詳細はもともと全て俺の手中にある

つまりそのクラスの実装を知ってるから、クラスの内部状態を変えれても問題ないんだと

この主張ならPrivateかPublicかなんてどうでもいいと言ってるのと同じですが
自分が実装をしってるかどうかで好き勝手やっていいとか
カプセル化全否定の主張
0576デフォルトの名無しさん2016/03/17(木) 05:23:46.48ID:Bi20tHSa
>>544
>それ以外の属性としてはそれなりの過程を経て組み立てられたDouble行列なんかを複数持っている。
>内部的な整合性の面ではデリケートに扱わざるを獲ない感じ。
それなりの過程は公開された方法で設定されてるんだろ
それで設定出来ない理由がない、つまりCloneできない理由が無い
デリケートに扱えば良いだけじゃないか。それが「内部的な」整合性にどうかかわるのか知らんが


つまりお前の主張は、邪魔くさいからカプセル化原則崩して横入させろって話

これが出来れば楽な面が多いのは否定しないけど
それを言語の欠陥見たいに言われてもなぁ

ちなみにVBA的な解決方法はFriend使う事だってとっくに指摘されてる筈だけど
0577デフォルトの名無しさん2016/03/17(木) 06:14:34.52ID:idn05aqO
>>575
意味不明すぎる
クラス作成者がクラスの内部状態を制御できなくて誰が制御するんだよw
0578デフォルトの名無しさん2016/03/17(木) 06:42:52.62ID:8qNHX2Vh
>>576
変遷の過程を全部記録してろと?
まず初期状態、それからメソッドが呼び出された順番やそこで渡された引数、ことによったら時刻まで必要になるんだぞ。
それに「とっくに指摘」って言うけどFriendのことは3時間前に出てきた話のようだが?
0579デフォルトの名無しさん2016/03/17(木) 06:45:23.39ID:8qNHX2Vh
そもそも「カプセル化崩すな」という意見と「全部Publicでいい」という意見が混在してるが?
0580デフォルトの名無しさん2016/03/17(木) 06:47:31.75ID:XFm+eMc1
>>576
> つまりお前の主張は、邪魔くさいからカプセル化原則崩して横入させろって話
それで全然構わんのだが
カプセル化されたデータを弄りたい事なんていくらでもあるし
publicだからカプセル化されていないという事でもない
そのデータをどう扱うかは全てプログラマー次第

いいかげんに覚えたての言葉をわめきちらすのやめろ
0581デフォルトの名無しさん2016/03/17(木) 06:51:36.93ID:8qNHX2Vh
>>576
同一クラス内でPrivateに触れるのを「カプセル化を崩す」と思うのは間違っている。
むしろカプセル化を推進している。Friendだってそう。
はっきり言語の欠陥なんだよ。
0582デフォルトの名無しさん2016/03/17(木) 06:53:58.47ID:8qNHX2Vh
>>580
Publicにするとそのデータを触るののが「他のプログラマーやユーザー」になる訳だが?
0583デフォルトの名無しさん2016/03/17(木) 07:03:08.23ID:idn05aqO
クラスっていうのはデザイン上「このクラスは俺が作ったからインスタンスは俺が責任持って管理する」
という静的な責任範囲であって、実行時のオブジェクトの振る舞いとは直行する考え方なんだけど
>>575はその辺が理解できてないみたいだな
0584デフォルトの名無しさん2016/03/17(木) 07:04:24.95ID:JRt4GWBY
馬鹿が現れると荒れるなぁw
0585デフォルトの名無しさん2016/03/17(木) 07:44:51.97ID:XFm+eMc1
>>582
触れるから触らなければいけないという事にはならない
publicでも触りたくならないデザインにして規約を設ければ済む話

アクセス修飾子なんてのはその為の補助機能であり、なくてもなんら問題はない
0586デフォルトの名無しさん2016/03/17(木) 07:44:53.23ID:8qNHX2Vh
Aさんがクラスを作る→Bさんがそれを使う

B「この変なメソッド何?使うなってコメントされてるけど」
A「使うと整合性か保証できなくなる。内部的な処理でだけ使う。」
B「じゃあprivateにしとけよ」
A「でもcloneを実装するには...」
B「ちょっとは工夫しろよ。publicである以上使っちゃうぞ?」
0587デフォルトの名無しさん2016/03/17(木) 07:46:48.69ID:8qNHX2Vh
>>585
そんな主張は全く認められない
0588デフォルトの名無しさん2016/03/17(木) 07:47:10.13ID:XFm+eMc1
>>586
直後にそのバカレスはずかしいなw
0589デフォルトの名無しさん2016/03/17(木) 08:18:33.52ID:yET/+Bsj
>>580
> カプセル化されたデータを弄りたい事なんていくらでもあるし
基地害?
0590デフォルトの名無しさん2016/03/17(木) 08:39:42.53ID:jLSJwXmm
>>586
馬鹿は口を噤んでるといいよ。三流プログラマ君w
0591デフォルトの名無しさん2016/03/17(木) 08:50:05.99ID:hi6BrK3g
VBAでクラス使うような人って他の言語使える人じゃないの?
そんな人がVBAを必死に擁護する意味がわからん
公式にはVB.NETでJavaやC++と同様の仕様に変更された時点でどちらが正しいか議論の余地はもうないんだが
まさか意識高い系VB6専という希少種なのか
0592デフォルトの名無しさん2016/03/17(木) 08:59:16.40ID:LceOLJ+f
>>590
現実に起きそうな会話を書いたつもりなので、反論があるなら具体的にどうぞ。
0593デフォルトの名無しさん2016/03/17(木) 09:05:13.11ID:LceOLJ+f
>>583
>>591
全くその通りだよね。
disるべきところはちゃんとdisっとかないと、何が正しいのか混沌としてしまう。

>>575は基地害だが主張の一貫性はあるかもwww
0594デフォルトの名無しさん2016/03/17(木) 09:08:03.91ID:jLSJwXmm
>>592
馬鹿は口を閉じてるといいよ。
マ板に行け。消えろ。
0595デフォルトの名無しさん2016/03/17(木) 09:20:59.65ID:FvTUx9u3
セキュリティとかと似たような問題だな

個人情報を完璧に保護するには
個人情報を持たない事
つまり個人情報を利用しない事

セキュリティや原理を厳密に守ることで利便性が低下する
0596デフォルトの名無しさん2016/03/17(木) 09:38:55.36ID:LceOLJ+f
>>594
お前精神に障害でもあるんじゃないのか?本当に心配になってくるレベルだぞ。
0597デフォルトの名無しさん2016/03/17(木) 09:44:46.04ID:WKWxISAv
>>591
いや、VBAでその点が駄目なのはみんな分かっているとは思うが、

正直、だから?としか言えない。

VBAで多人数開発でもするつもりなの?

元々VB6を引き継いでるようなもので、
特に改善されなくても小さいアプリケーション内での
開発が多いから然程問題視されなかったというところだろ?

VBAにやらせようとすること間違ってるんじゃないの?
0598デフォルトの名無しさん2016/03/17(木) 09:46:47.72ID:jLSJwXmm
>>596
お前の精神に問題があるのはよくわかるよww間抜けが
0599デフォルトの名無しさん2016/03/17(木) 09:56:38.69ID:iopJbUiO
連番抜けチェックをさせたいのですが、丸数字の扱いがわからず、
相談お願いします

@あいう
Aかきく
Bさしす
Dなにぬ

・丸数字と文字列は同じセルに入っています
・丸数字は@はじまり、多くてIくらいまで
・文字列に規則性はありません

このとき、C抜けを検知させたいのですが、どうすればよいでしょうか
(BかD(か両方)のセルに色付け、など)
0600デフォルトの名無しさん2016/03/17(木) 09:59:37.75ID:gLZk6EBm
それはもう数字じゃなく文字なんだから左から1文字目がBだとして次のセルの同じく左から1文字目がCでない
んだったらなんらか印を付ける…ぐらいしかないでしょ。
0601デフォルトの名無しさん2016/03/17(木) 10:25:05.53ID:DbQdeQVj
>>599
接頭文字の@〜IをASCIIコードに変換して並びに抜けがないか確認すればいいんじゃないの?
0602デフォルトの名無しさん2016/03/17(木) 10:34:09.62ID:0LueaVXu
PQRS
0603デフォルトの名無しさん2016/03/17(木) 11:03:29.78ID:wB2trTuT
>>599
これでどうかな?

Sub TEST()
STR1 = "@ABCDEFGHI"  '並び順
START_ROW = 1          'チェックする最初の行

For I = 0 To Len(STR1) - 1
  With Cells(START_ROW + I, "A")
    If .Value = "" Then
      Exit For
    ElseIf Left(.Value, 1) <> Mid(STR1, I + 1, 1) Then
     .Interior.Color = vbRed
      Exit For
    End If
  End With
Next
End Sub
0604デフォルトの名無しさん2016/03/17(木) 19:07:42.03ID:Bi20tHSa
>>578
>>444でとっくに言われてるだろ
0605デフォルトの名無しさん2016/03/17(木) 20:39:20.57ID:+sywC49l
ExcelのVBAから
Webページの情報を取り出すツールを作っているのですが
もしそのWebページがフレームを使ってるとうまくいきません。

具体的には
CreateObject("Shell.Application").Windowsのコレクションのうち
該当するページをみつけてそれを
Dim IE as Object
のIE変数に入れます。

そして
IE.document.framesコレクションのうち
該当するフレームをみつけてそれを
Dim Page as Object
のPage変数に入れます。

そしてPage.Documentのなかを検索しようとしているのですが
その中身がうまく見れないのです。

なにか間違っていることありましたか?
0606デフォルトの名無しさん2016/03/17(木) 20:56:11.73ID:XFm+eMc1
Page.contentDocumentならどうだ
0607デフォルトの名無しさん2016/03/17(木) 22:59:13.25ID:kck3yFH+
>>605
c♯でブラウザコントロール使った時の話で参考にならんかもしれないけど、
フレームが複数あるとdocumentcompleteが複数発生してちゃんと最後まで待たないとフレームの中身とれないんだよね。

IE.busyのステータス見て完全に読まれるのを待てばとれるかも󾬅。
0608デフォルトの名無しさん2016/03/18(金) 00:06:39.79ID:gzqbq4hZ
>>317
>>300です。どうもありがとうございます。お礼が遅くなってすみませんでした。
その後いろいろ試したら、以下のことがわかりました。
結論的には、無事に目的は達成されました。
・同じことを、いくつかのPCで試すと、LinkedCellが記入できるものとやはり消えてしまうものとがありました。
  結局、消えてしまう゛んいんはわかりませんでした。
>>317の通りにやってみたら、LinkedCellこそできないものの、スライドバーを
   Excel表罫状に置くことができ、「その名前.value」で、現在のスライドバーの値を
   取り込むことができ、目的を達成しました。
どうもありがとうございました。
0609デフォルトの名無しさん2016/03/18(金) 01:13:26.33ID:jEcicrol
>>599
丸囲みの数字は、MSのCP932の環境依存文字だよ

他の環境では、使えない文字だから、使わない方がいい
0610デフォルトの名無しさん2016/03/18(金) 06:14:33.44ID:0x7A7Hbz
>>609
それここでする話かな
unicodeにも普通にあるしファイル名にもできる
VBAで見知らぬ環境のこと気にしても仕方ないでしょ
0611デフォルトの名無しさん2016/03/18(金) 07:09:47.90ID:5tpKuuIb
>>609
質問に関係ない俺ルールなんていらねーんだよ
与えられた質問に答えてやれアホ
0612デフォルトの名無しさん2016/03/18(金) 08:17:22.27ID:w3IkMPkd
お前らあのC++erが来てからエラい過敏になってるな。

「C++こそ至高ッ!!」
「C++を使っている我ららこそ最高ッ!!」
「だからお前らVBAをdisれッ」

って、畑違いのところで荒らしまくってたから分からないでもないけどな。
0613デフォルトの名無しさん2016/03/18(金) 09:00:55.60ID:FVNcSrUO
えっJava屋じゃなかったのか?
0614デフォルトの名無しさん2016/03/18(金) 12:31:09.56ID:aCc0i0GX
disるのは好き勝手にやってもらって構わん
質問すら出来ずに暴れてる奴はウザいから叩かせて頂く
0615デフォルトの名無しさん2016/03/18(金) 13:00:28.28ID:FVNcSrUO
じゃあ、イミディエイトもっと行数多く表示する方法ないですか?
0616デフォルトの名無しさん2016/03/18(金) 13:07:07.98ID:/sEv9MLS
>>614
うだうだと、Publicにすれば解決する問題を頑なにPrivateでなんとかしようとするオカシナ老人も
叩いてくれ。ここで議論なんて邪魔ですからね。
0617デフォルトの名無しさん2016/03/18(金) 18:26:18.33ID:Q3YFIWD/
>>616
> Privateでなんとかしようとするオカシナ老人
Public にすれば無問題とか言ってるアホもついでに逝ってくれ
0618デフォルトの名無しさん2016/03/18(金) 19:34:40.07ID:VVAqKgVC
>>617
プwww おまえみたいなアホの事を言うんだよww
0619デフォルトの名無しさん2016/03/18(金) 19:54:28.22ID:4tYt5GvE
アホが早速現れて笑える
自覚はあるんだなw
0620デフォルトの名無しさん2016/03/18(金) 20:10:07.16ID:OhlAheOJ
若林じゃないほう
0621デフォルトの名無しさん2016/03/18(金) 20:56:54.26ID:ftR+bG10
>>615
イミディエイトをあきらめてテキストファイルに吐き出してしまえば楽になれる。
0622デフォルトの名無しさん2016/03/18(金) 21:57:00.28ID:FVNcSrUO
>>621
いやそれは...
ログとかだったらそれでいいけど、イミディエイトをシェルがわりにしてるスタイルなので。
0623デフォルトの名無しさん2016/03/18(金) 21:59:48.59ID:FVNcSrUO
>>616
Privateかpublicかがオブジェクト指向と関係あるんだってさ〜。理由は責任範囲に関わってくるからなんだってさ〜。
意味不明だよね〜
0624デフォルトの名無しさん2016/03/18(金) 23:51:46.04ID:oMMRZOpR
固定長配列と可変長配列を区別するにはどうすればいいでしょうか?
ByRef As Variant で受け取ったとき、VarType とかで区別できると思ったのですが同じ値でした。
0625デフォルトの名無しさん2016/03/19(土) 00:17:01.16ID:ZkF236zX
>>624
凄い適当なことを言うと
Redimして落ちれば固定長
0626デフォルトの名無しさん2016/03/19(土) 01:31:21.44ID:ZkF236zX
Aさんがクラスを作る→Bさんがそれを使う

B「この変なメソッド何?使うなってコメントされてるけど」
A「人が作ったファイル勝手に触ってんじゃねーよ」
C「C++最高ォーッ!!」
A、B「死ね」
0627デフォルトの名無しさん2016/03/19(土) 08:37:05.36ID:WiXahnNx
>>626
本当はBさんが使うっていう想定の下で作るのはダメなはずだけど、
やっぱみんな普通にマクロファイル渡すよな。
0628デフォルトの名無しさん2016/03/19(土) 10:10:22.17ID:IAjs3zZu
.cls を公開するのに、本来PrivateであるべきものをPublicでいい、なんてあり得ない。
0629デフォルトの名無しさん2016/03/19(土) 10:20:10.28ID:H80uBE1C
Aさんがクラスを作る→Bさんがそれを使う

B「この変なメソッド何?使うなってコメントされてるけど」
A「気にするな。Bookごともってっていいぞ。」
B「ではお言葉に甘えて・・・」
>>628「.cls を公開するのに、本来PrivateであるべきものをPublicでいい、なんてあり得ない。」
B「いや、Book単位で公開するし」
>>628「C++最高ォーッ!!フォーッ!!」
A、B「おまわりさん、この人です」
0630デフォルトの名無しさん2016/03/19(土) 10:28:20.58ID:8xzNOdhj
>>628
じゃ、そうすれば?

ここで話題にしてる事はそういう事じゃないってのがわかってないようだが?ww
一部のアホが仕様上出来ない事をPrivatePrivateいって喚いてる事について語って
るのに、何詭弁持ち出してんの?ww
0631デフォルトの名無しさん2016/03/19(土) 10:45:20.86ID:IAjs3zZu
AさんとBさんの会話、言いたいことはわかるけど、そんな会話があると思うことがちょっと甘いと思う。
たいていは変なメソッドがあるなと思った時点で離れていくんじゃないか?
0632デフォルトの名無しさん2016/03/19(土) 11:06:06.35ID:KdJH+mhe
>>631
なら離れて行けばいい。

実際にこれが大きなシステム開発用であれば問題だろう。だからVB6はVB.Netになった。

VBAはその用途からそこまで厳密になるより旧態依然として残った方が都合良かったんだろう。
でなければVariantなんて危険な型、真っ先に消されているだろうしな。

というわけでその辺が納得行かないならとっとと
離れて巣に帰ってくれないか?

どう騒いだところで仕様が変わる訳でもなし、使って無理にストレス溜めることもないだろう。
0633デフォルトの名無しさん2016/03/19(土) 11:09:05.00ID:8xzNOdhj
>>632
今も昔も殆ど進化していないVBAはあくまでも個人で且つ、小規模な
ファイル内で動かすスクリプト言語だからね。

大規模開発(笑)だし、いわゆる現代のプログラミングのいろはで語る
ようなものでもないし。
0634デフォルトの名無しさん2016/03/19(土) 11:14:18.24ID:IAjs3zZu
>>632
なんでおれに言うんだよwww
0635デフォルトの名無しさん2016/03/19(土) 12:04:34.49ID:WiXahnNx
AccessファイルとかはADODB等のConnectionを通じてAccessを通さずに取得出来るけど、
Excelにそういうのは無いかな?

CurrentDBやThisWorkbookで指定しているマクロをうっかり移植してエラー起こすことがよくあるけど、
Accessファイルの場合はConnection通せば移植してもそのまま動くので、
これでExcelにも同じようなのがあれば楽だと思ったんだけど。
0636デフォルトの名無しさん2016/03/19(土) 12:22:17.36ID:aVqCTfNk
Public/Private の扱いが中途半端になってるだけでしょ
クラスにコンストラクタ持てないとか他にも中途半端な部分はある
開発された時代背景考えればいつまでも引っ張るような話題じゃないだろ

と言うことでMSは早く C# for Application もサポートしてくれ
0637デフォルトの名無しさん2016/03/19(土) 12:42:54.92ID:YkVYTtmN
そもそも同クラス間のコピーで別インスタンスのプライベートメンバーに
値を設定出来ないと騒いでるバカが話の元だからな
言語仕様上許されているからと言ってそんな暴挙をはたらいたら
ブライベートだろうとカプセル化の意味が台無しになると言うことが分かってない
0638デフォルトの名無しさん2016/03/19(土) 12:57:30.81ID:2Yqb1TGj
>>624
>>625氏の言ってるのが正解だと思う。事前に知ることは無理じゃないか。

>>637
言語仕様上は「許されてない」はずですよ?
0639デフォルトの名無しさん2016/03/19(土) 13:07:08.84ID:WiXahnNx
だからVBAはコードが見える状態で運用してんだからカプセル化もくそもねぇだろっていう・・・。
もしかしてオペコードのレベルでカプセル化とかいう状態が保たれるとでも思ってんのかね。
0640デフォルトの名無しさん2016/03/19(土) 13:27:19.53ID:gM0wAlBb
>>636「VBAはクラスにコンストラクタが持てない中途半端な言語」
俺ら「あっ(察し)」
0641デフォルトの名無しさん2016/03/19(土) 14:17:03.57ID:aVqCTfNk
>>638
> 言語仕様上は「許されてない」はずですよ?
仮定の話でしょ
日本語読めればわかると思うが...

>>640
言いたいことがあるならはっきり書けば?
0642デフォルトの名無しさん2016/03/19(土) 14:28:21.77ID:gM0wAlBb
>>641
いや、たぶん「コンストラクタが持てない」って
「コンストラクタに引数を渡すことができない」って
言うつもりで言っちゃったんだろうなって
察し易い文章だなって思ったんだ。
0643デフォルトの名無しさん2016/03/19(土) 14:41:35.82ID:H80uBE1C
>>642
>>641は突っ込まなければとんだ赤っ恥かかなくて済んだのに
世の中知らない方がいいことってあるよね
0644デフォルトの名無しさん2016/03/19(土) 14:56:31.53ID:IAjs3zZu
>>641
「言語仕様上許されているからと言って」を
「言語仕様上仮に許されたとしても」と解釈しろってか?
それこそ日本語として無理があるんじゃないか、
0645デフォルトの名無しさん2016/03/19(土) 14:56:47.93ID:8xzNOdhj
>>641
プw
0646デフォルトの名無しさん2016/03/19(土) 15:17:46.23ID:S6HwApMW
あの後vbsでオブジェクトのコピーを作る時にイニシャライザでprivateプロパティに好きな値を入れる方法模索したけど
平たく言うとしない方がマシな方法しか思いつかなかった

そいつがやりたい事はその時皆にしなくていいとかボカボカ言われてたけど俺はとてもよく理解出来るんだが無念
0647デフォルトの名無しさん2016/03/19(土) 15:22:54.25ID:H80uBE1C
>>646
模索は悪いことじゃないと思うけど・・・

何故にVBS?Excel持ってないからってこと?
0648デフォルトの名無しさん2016/03/19(土) 16:15:31.54ID:2Yqb1TGj
>>646 「しない方がマシな方法」
ちょっと聞きたい
0649デフォルトの名無しさん2016/03/19(土) 16:24:29.27ID:aVqCTfNk
>>642
ああ、そうだったな
うっかりしてたわ
まあ、はっきり「VBA もコンストラクタ位持てるわ、持てねーのはコンストラクタの引数だろ」って書いてくれればいい
主旨にはたいして影響しないし

>>643, >>645
そんなことにしか突っ込めないのかよ w
0650デフォルトの名無しさん2016/03/19(土) 16:27:43.33ID:aVqCTfNk
>>644
日本語不得意なの?

> そんな暴挙をはたらいたら

仮定に基づく行動だろ
0651デフォルトの名無しさん2016/03/19(土) 16:34:48.64ID:H80uBE1C
>>649
いやいや
人聞きの悪いこというなよ
勝手に突っ込んで自爆して
恥かいたのはそっちだから
0652デフォルトの名無しさん2016/03/19(土) 16:47:37.97ID:m2k0cx68
>>649
みんな生暖かい目で見守ってますよ〜( ´ ▽ ` )ノ
0653デフォルトの名無しさん2016/03/19(土) 16:57:05.21ID:M34OaI99
cadテキストファイルを読み込んでexcel上で見やすい形にして、エラー確認が出来たらaccessにぶっ込んで集計処理を行うっていうの作ってたのですが
あまりにも条件が多くなってきたことと2年ほど前から書いたコードだから統一がされてないのとで
超スパゲッティコードになってしまいました。

合計1万行、モジュール20、クラス4、ボタン10個、ユーザーフォーム2ぐらいあるんですが
こういうのはやっぱり新しく書き直した方がいいんでしょうか…?
またこのように自分で作ったプログラムを1から書き直したことがある方、気をつけることがあれば教えていただけますでしょうか?
0654デフォルトの名無しさん2016/03/19(土) 17:03:27.42ID:IAjs3zZu
とにかく>>637は日本語も主張の内容も両方おかしい。

「許されているからと言って」は仮定で使う表現じゃない。「許されてるとしても」等とすべきだ。

また、同一クラスの中で他のインスタンスのプライベートメンバに値を設定できたってカプセル化の破壊とは言えない。
VBAでは単にエラーになるってだけ。「カプセル化の破壊だから」禁止してるなんて言える根拠どこにもないだろ。
0655デフォルトの名無しさん2016/03/19(土) 17:57:04.45ID:EIXPsoT/
>>649
プw
0656デフォルトの名無しさん2016/03/19(土) 18:52:00.41ID:SmPDnaAH
>>649は色々間違えてるうっかりさんだけど言いたいことは何となく分かる
>>654が言ってることは正しいんだろうけど結構どうでもいい

だってVBAですもの
0657デフォルトの名無しさん2016/03/19(土) 18:56:00.65ID:S6HwApMW
>>535は俺だけどもう一回>>535を言いたいと思う
0658デフォルトの名無しさん2016/03/19(土) 19:16:22.90ID:EIXPsoT/
>>657
だいたい、今更な話だわな。
VBAって基本進化が止まってる今どきの言語じゃねぇのに、他の言語の
話もちこんであーだこーだ
0659デフォルトの名無しさん2016/03/19(土) 19:26:06.76ID:RudxjvbX
俺は諸事情で最近wshから入ってaspやらvbaやらと共通とすら知らないで
安かったからvbsのポケットリファレンス買って読んで
おおclassとかまであるんかとか思ったが最後まで読んであれ?classあるのに色々足りてない、???ってなったべ
0660デフォルトの名無しさん2016/03/19(土) 19:44:00.07ID:Wf9uNcUK
༛セയルछがிあਈるઁかཨら़VཱBಳAฯおもഖしহろਟいॆでཞそ
0661デフォルトの名無しさん2016/03/19(土) 19:52:16.09ID:WiXahnNx
使う言語間違えているだけなのに「この言語には○○機能が欠けている!」という自分本位な姿勢はなんなんだろうな。
0662デフォルトの名無しさん2016/03/19(土) 19:59:45.13ID:/sT7mkad
.Netやってからもう一度VBAに戻ってくると
最初は「あの手法を何とかVBAで再現出来ないか」って頑張るんだけど
その内その考えを持ち出すと色々破綻することに気がつくんだよな

例えば継承なんか本来 Is a 関係にあるものを我慢してインターフェースで何とかしても
じゃインターフェース自体の継承はどうするのとか

他にもちょっと上に出ていたシングルトンも
わざわざ標準モジュールとクラス組み合わせて再現させるならもう
標準モジュールに初期化関数で良いんじゃね?とか

で、その内そもそもVBAとは何かというところまで
考えを戻すようになって
VBAにはVBAのお作法があることに気がつくと
「そんなふうに考えてた時期が俺にもありました」ってなるんだよな
0663デフォルトの名無しさん2016/03/19(土) 20:01:09.63ID:S6HwApMW
>>661
というか言語側がクラスという単語の使い方が悪いな
class宣言をobject宣言にでもすりゃこんな面倒な会話起きなかった
0664デフォルトの名無しさん2016/03/19(土) 20:07:23.76ID:WiXahnNx
>>663
確かにC++なんかのClassと同じ物と考えると壁にぶち当たるんだよな。
機能と呼び方が言語ごとに違うのが当たり前だった時代の産物だしな。
0665デフォルトの名無しさん2016/03/19(土) 20:08:36.07ID:kZqOhklD
vbaでやれること、やるべきこと
vbaでやれないこと、やるべきではないこと
をまとめあげれば幸せになれるな
0666デフォルトの名無しさん2016/03/19(土) 20:20:16.80ID:Vh/tRJ7p
新たなバカ師匠ID:IAjs3zZu現わるw
0667デフォルトの名無しさん2016/03/19(土) 20:38:21.14ID:2Yqb1TGj
まあそこそこ有名なライブラリはちゃんとPrivate指定してるから作法としてのPrivateなんじゃなかろうか。
そうなってないと叩かれる、みたいな。
0668デフォルトの名無しさん2016/03/19(土) 20:42:38.47ID:ZHLdlz8S
>>653
そういう行為はリファクタリングと呼ばれてるからググれ

>>654
お前の揚げ足取りレベルの日本語指導なんていらんが
>プライベートメンバに値を設定できたってカプセル化の破壊とは言えない。
その言語で許されてるならば何をやっても考え方の原則に反してないと?
それともプライベートメンバはカプセル化で隠蔽されるべき情報ではないと?
0669デフォルトの名無しさん2016/03/19(土) 20:52:56.49ID:IAjs3zZu
>>668
そりゃプライベートメンバはカプセル化で隠蔽されるべき情報にきまってるが、ここで問題に成ってるのは隠蔽する「範囲」の話だ。
お前さんの考えは「同一インスタンス限り」なのか?
俺の考えは「同一クラス限り」だ。
0670デフォルトの名無しさん2016/03/19(土) 21:11:42.05ID:ZHLdlz8S
>>669
カプセル化の原則はあらゆる「範囲」で適用される考え方なわけだが
お前の考えは少なくとも、インスタンスのカプセル化原則を破壊してるわけだが

お前がインスタンスはカプセル化しなくても問題ないとか言う主張をするのなら勝手にすればいいけど
カプセル化の意味が台無しになると言う主張は何も間違ってない
0671デフォルトの名無しさん2016/03/19(土) 21:16:09.93ID:Vh/tRJ7p
バカがネギ背負ってやってきたな
なんだよ同一クラス限りのカプセル化ってw
そんなカプセル化ねえよ
0672デフォルトの名無しさん2016/03/19(土) 21:20:36.69ID:WiXahnNx
言いたいことは分かるけど、ネギ背負ってくるのはカモでないと意味がなくてだな・・・。
0673デフォルトの名無しさん2016/03/19(土) 21:22:07.11ID:IAjs3zZu
>>671
ここで言ってるのは「privateがどこまで見えているか」のはずだ。
それ以外に一般化するな。
0674デフォルトの名無しさん2016/03/19(土) 21:23:28.43ID:7CKqxOgF
>>670
「誰が」「誰に対して」カプセル化しているのかということだよ
同一クラスの別インスタンス間のカプセル化というのはつまり「俺が」「俺自身に対して」カプセル化しているわけだ
何の意味があると思う?
俺自身が信用できないならイスタンスメソッドからMeのフィールドへのアクセスだって信用できないだろう
0675デフォルトの名無しさん2016/03/19(土) 21:25:24.43ID:Vh/tRJ7p
>>673
見えるから破壊してもいいとは限らんのだぜ
ちなみに俺はネギがあればなんでも食えるぜ
0676デフォルトの名無しさん2016/03/19(土) 21:26:37.35ID:Vh/tRJ7p
また一人変な例えするバカがやってきた…
0677デフォルトの名無しさん2016/03/19(土) 21:26:49.29ID:IAjs3zZu
>>675
じゃあ同一インスタンス内でも隠蔽するべきだなwww
0678デフォルトの名無しさん2016/03/19(土) 21:28:43.75ID:Vh/tRJ7p
>>677←見えるから破壊してもいいと思ってた人
0679デフォルトの名無しさん2016/03/19(土) 21:30:36.13ID:qOC5h4tk
インスタンスメソッドがこっそり外のモジュール変数にパスワードを漏らしてるかも知れないからな
同一インスタンスでも隠蔽するべきだよ
0680デフォルトの名無しさん2016/03/19(土) 21:31:24.29ID:IAjs3zZu
>>675から急に「破壊」という言葉がでてきたな。なんかの罠か?
俺は言ってないぞ。
0681デフォルトの名無しさん2016/03/19(土) 21:36:06.02ID:2Yqb1TGj
たぶん、秘密の情報を仲間と共有とか社内で共有とかいう概念がない人がいるんだろう。
個人のプライバシーみたいなものを想像してるんじゃあるまいか。
0682デフォルトの名無しさん2016/03/19(土) 21:37:47.20ID:Vh/tRJ7p
>>680
単なる屁理屈なのかガチでバカなのかこっちが混乱するやつだなお前

面倒だから真面目に話をするけど
別インスタンスからの値の設定はカプセル化されたオブジェクトの破壊だ
カプセル化されたオブジェクト内の値の設定は常に自分自身によってなされるべき物
例え言語仕様で許されているC++やJavaであってもだ
それが作法というもの
0683デフォルトの名無しさん2016/03/19(土) 21:37:59.14ID:aVqCTfNk
>>667
外部に公開する必要のない情報は公開しない
スコープは可能な限り狭める
書き換える必要のない情報は読み出し専用にする
etc...

ある程度の規模のソフトを組んで痛い目にあった奴は普通にやってる
言語がサポートしてりゃ利用するし、サポートしてなきゃコメントなりドキュメント等の運用でやるってだけのこと
0684デフォルトの名無しさん2016/03/19(土) 21:40:01.61ID:/sT7mkad
VBAは言語仕様で隠蔽されているんだから仕方がない

もう一つ言うと他の言語がクラスのスコープが責任範囲だから
同一クラスのインスタンスのみがスコープの有効範囲になるという説明は片手落ち
0685デフォルトの名無しさん2016/03/19(土) 21:40:24.81ID:aVqCTfNk
>>651
> 人聞きの悪いこというなよ
そうは言っても事実でしょ? w
0686デフォルトの名無しさん2016/03/19(土) 21:42:27.21ID:M34OaI99
>>668
ありがとうございます。リファクタリングですね、
・外部的な振る舞いは変えない
・内部構造を洗練していく
・作業は一歩ずつ進める
・安全に変更を行う
非常にためになる言葉ですね。開発当時の自分をぶん殴りたい気分です。
内部構造の洗練はとても難しいですね。
でも調べてくうちに
excel標準機能にあるワークシート関数やら書式設定やらはコードに実装しない
if文やselect caseがあるとその分だけテストケース増やさなければならない=複雑になる
行数が多い=それだけ読まなければいけない=他の関数との凝集度が悪くなる
この辺は痛感しました…書き直してきます
0687デフォルトの名無しさん2016/03/19(土) 21:43:18.44ID:ZHLdlz8S
>>674
カプセル化の考え方では
プログラマが信用できるならカプセル内の情報にアクセスして良いとはならないのだよ

>イスタンスメソッドからMeのフィールドへのアクセスだって信用できないだろう
それはカプセル内の話
インスタンス外から、公開された方法によらずにインスタンスの情報をいじるのは
あきらかにカプセルの境界をこえてアクセスしてるから問題なんだが
0688デフォルトの名無しさん2016/03/19(土) 21:43:49.44ID:H80uBE1C
>>685
え?何が?
突っ込んで自爆したこと?
0689デフォルトの名無しさん2016/03/19(土) 21:45:58.17ID:7CKqxOgF
>>687
いいからどういうケースでどう問題になるのか具体的にとうぞ
0690デフォルトの名無しさん2016/03/19(土) 21:46:24.44ID:H80uBE1C
>>686
あ、単一責任の原則も一読しておいた方がいいよ。
0691デフォルトの名無しさん2016/03/19(土) 21:53:40.84ID:H80uBE1C
>>684
まぁそうだな。
あれだとPrivate指定したプロパティやメソッドが
他のクラスからも場合によって見れる説明がつかないもんな。
0692デフォルトの名無しさん2016/03/19(土) 21:56:45.03ID:IAjs3zZu
>>682
「値の設定は常に自分自身によってなされるもの」

そうだね。
いきなりother.member = val なんてやっちゃいかんよね。
でも自分で設定するためメソッド作ったとしてどうする?privateメソッドも他のインスタンスからは呼べないんだぜ?
0693デフォルトの名無しさん2016/03/19(土) 22:01:48.03ID:ZHLdlz8S
>>689
カプセル化が何のためにあるかわかる?
カプセルの境界を越えてアクセスするってことは、まさにそのオブジェクトを破壊できるって事だぞ
お前は自分が信頼できるからやらないって主張してるけど

俺は境界を越えてアクセスする事が便利な場面がある事を否定してないし
それをやったから問題だと言ってるわけじゃない

反則技を使おうとして、これは反則じゃないって主張してるから
いやそれは反則だよって指摘しただけ
0694デフォルトの名無しさん2016/03/19(土) 22:03:39.78ID:IAjs3zZu
アクセスの隠蔽に関してもトレードオフの問題だと思う。
そりゃパブリックインタフェースだけでは必要十分なら何も悩むところはない。
それだけでは無理なとき、「同一クラス内なら公開する」のと「パブリックインタフェース化する」のどっちを選ぶかって話。
0695デフォルトの名無しさん2016/03/19(土) 22:05:51.59ID:IAjs3zZu
>>694
「公開する」ってのはデータをそのまま晒せって意味じゃないよ。privateメソッドを呼べるようにするってのを含んだ概念だよ。
0696デフォルトの名無しさん2016/03/19(土) 22:07:57.73ID:Vh/tRJ7p
>>692
それはvbaでならどうするか?という質問だな。
どうしてもアクセス制御したいならリードオンリーのプロパティを公開すればいい
俺なら面倒だら全部publicでやるが
0697デフォルトの名無しさん2016/03/19(土) 22:37:09.48ID:IAjs3zZu
>>693
きみもプライベートな「データ」メンバに直接アクセスすることの是非しか問題にしてないみたいだね。
0698デフォルトの名無しさん2016/03/19(土) 22:44:45.63ID:ZHLdlz8S
>>697
カプセル化の原則の話をしただけで、べつにデータに限った話をした覚えはないが
0699デフォルトの名無しさん2016/03/19(土) 22:48:23.81ID:H80uBE1C
とりあえず考え的に正しいか分からないけど、
見つけたよ。VBAで同じクラスのインスタンスに
Privateなプロパティ設定する方法。

ちとまどろっこしいけどな。
>>684がヒントになったな。
0700デフォルトの名無しさん2016/03/19(土) 22:51:33.67ID:ZHLdlz8S
>>699
外部への依存なしに実現できるならぜひやり方晒してくれ
0701デフォルトの名無しさん2016/03/19(土) 22:52:24.17ID:IAjs3zZu
>>698
そうか。でもオブジェクトの破壊に繋がるようなことを言ってたよね。
値の設定はまあそのオブジェクトにメソッドに任せるさ。そうすりゃ自分自身の整合性は担保してくれるだろう。
でもその操作自体がクラス外には無関係なときはprivateにしたいのさ。
0702デフォルトの名無しさん2016/03/19(土) 23:01:28.59ID:IAjs3zZu
俺も昨日から考えて裏技は出来た。外部API依存あるけど。
データ破壊の可能性はあるもののクラス内で閉じていて、呼び出し側で変なことはできないので一応妥協範囲。
0703デフォルトの名無しさん2016/03/19(土) 23:16:32.96ID:H80uBE1C
なんか改行規制に引っかかるから3回に分けるな。

正しいかどうかは微妙なところだが、一応理に適っているとは思う。

任意の標準モジュール

Sub Hoge()
Dim cls1 As IClass
Set cls1 = New TargetClass
Dim cls2 As IClass
Set cls2 = New TargetClass
Set cls2 = cls1.GetClone()
Call MsgBox(CStr(cls2.TaegetValue))
End Sub

クラスモジュール:IClass

Option Explicit
Property Get TaegetValue() As Long
End Property
Property Let TaegetValue(ByVal value As Long)
End Property
Public Function GetClone() As IClass
End Function
0704デフォルトの名無しさん2016/03/19(土) 23:17:40.92ID:H80uBE1C
クラスモジュール:TargetClass
Option Explicit
Implements IClass
Private m_value As Long
Private Property Get IClass_TaegetValue() As Long
IClass_TaegetValue = m_value
End Property
Private Property Let IClass_TaegetValue(ByVal value As Long)
m_value = value
End Property
Public Function IClass_GetClone() As IClass
Dim cls As IClass
Set cls = New TargetClass
cls.TaegetValue = 1
Set IClass_GetClone = cls
End Function
0705デフォルトの名無しさん2016/03/19(土) 23:19:16.95ID:H80uBE1C
微妙というのは多分インターフェースのPropertyのデフォルトはPublicだということ。
だがインターフェースを介在させない場合Privateは隠蔽されるので、
通常通りにNewして見えてしまうことはない。
0706デフォルトの名無しさん2016/03/19(土) 23:43:25.08ID:ZHLdlz8S
普通に考えて、使いたいクラスはTargetClassだが、TargetClassとして宣言出来ないのはなぁ
IClassとして宣言して、TargetClassとしてNewして下さいってルールを徹底させる必要があるわけだが
それならこのメソッドは使うなってルールを徹底させるのと大差ない気がする
0707デフォルトの名無しさん2016/03/19(土) 23:50:00.02ID:H80uBE1C
>>706
ちょっとまて。
TaegetClassとして宣言すれば
Privateで設定されているプロパティが隠蔽されるって言ってるんだけど。
内容、読み取れてる?
0708デフォルトの名無しさん2016/03/19(土) 23:53:46.48ID:IAjs3zZu
>>707
Sub Hoge() の中のは違うってことか?
0709デフォルトの名無しさん2016/03/19(土) 23:59:43.58ID:H80uBE1C
>>708
一度インターフェースを噛ませるという手順を踏むことで
Privateのプロパティにもアクセス出来るようにしている例を挙げているんであって
Privateで指定されているプロパティだから通常のNewでは隠蔽される。
0710デフォルトの名無しさん2016/03/19(土) 23:59:48.64ID:ZHLdlz8S
>>707
ああ、通常使いたいプロパティはTaegetClassに別途設定しろって事か
0711デフォルトの名無しさん2016/03/20(日) 00:06:44.02ID:qgldDaIb
>>710
もしこの方法でよいということであれば、
利用価値が有るかどうかはともかく、
旧VBやVBAの方が細やかなスコープを設定出来るということになる。
良かったな。
0712デフォルトの名無しさん2016/03/20(日) 00:27:59.83ID:GdGOCP5U
あら?複製元は自分のパブリックメソッド内で自分のtargetvalueを触れるのはわかるけど複製先のtargetvalueを触れるの???
0713デフォルトの名無しさん2016/03/20(日) 00:29:29.84ID:TtjNwfG2
似たようなことはVB.NETでもインターフェイスの明示的実装という機能で実現可能
0714デフォルトの名無しさん2016/03/20(日) 00:36:40.94ID:TtjNwfG2
>>712
IClassだから触れるだろ
当然IClassにキャストすればどこからでもガバガバ
0715デフォルトの名無しさん2016/03/20(日) 00:39:03.27ID:qgldDaIb
>>712
動作確認済み。

>>713
そう。だけど、逆に同じクラス、違うインスタンスのPrivateなものを隠蔽することが出来ない。
するべきなのかどうかは置いておいてね。
0716デフォルトの名無しさん2016/03/20(日) 00:43:23.34ID:qgldDaIb
>>714
わざわざキャストさせるということは触ること前提だからそうなるね。
でもそれを言ったら.Netも同じ。
0717デフォルトの名無しさん2016/03/20(日) 08:44:46.30ID:TtjNwfG2
.NETなら内部クラスに宣言したPrivate Interfaceを明示的実装したら絶対に外からは触れない
元々他インスタンスのPrivateにアクセスできるから不要だけど
0718デフォルトの名無しさん2016/03/20(日) 09:00:59.71ID:qgldDaIb
>>717
そうか、インナークラスの概念か。迂闊だったわ。
ま、今回はインターフェースだけど同じだな。
0719デフォルトの名無しさん2016/03/20(日) 09:31:47.19ID:qgldDaIb
論点としては明示的にインターフェースを介在しなければPrivateに触れないということが、
カプセル化に足り得ることなのかどうかということと、
本当に同一クラスで違うインスタンスのPrivate宣言されたものが
隠蔽されるスコープが必要なのかということの2点か。

どうだろな。
0720デフォルトの名無しさん2016/03/20(日) 11:02:49.50ID:jHsQHzI2
だからVBAの仕様を変えられない以上は意味ないんだから別スレでやれ。
0721デフォルトの名無しさん2016/03/20(日) 13:05:40.51ID:8HbjV0ul
>>720
ですね。
0722デフォルトの名無しさん2016/03/20(日) 13:45:04.69ID:f66aE8wc
>>719
そこまで出来れば十分だろ
>>720の言うとおりこれ以上
マヌケなC++erに付き合う必要もないだろう
0723デフォルトの名無しさん2016/03/20(日) 14:07:56.82ID:pfOQftnX
AtCoderとかVBAで解いてる人いない?
0724デフォルトの名無しさん2016/03/20(日) 17:17:01.45ID:J2K9MuYg
>>719
好きにすればいいよ。
むしろ業務の方が要件を満たしてればそれ以上のカプセル化とか考えなくていいかも。
公開するんであればまた別だろう。

>>723
投稿できなからやらない
0725デフォルトの名無しさん2016/03/21(月) 00:12:02.37ID:K4l5ex/e
皆さんVBAの処理時間はどのくらいの物を作っていますか? 24時間動かし続けている人も居るのですか?
0726デフォルトの名無しさん2016/03/21(月) 04:03:07.99ID:lZ+XcLv2
>>725
処理によって1秒かからないものもあれば
1日以上かかるものもあるけど
何でそんなことを聞いているのかな?
0727デフォルトの名無しさん2016/03/21(月) 04:44:20.97ID:4m5Wnyvm
VBAを24時間もの長い間動かしていると奇妙で名状し難い不定な動きを引き起こすことについて宇宙的に議論したいんだよ
な?
0728デフォルトの名無しさん2016/03/21(月) 05:50:50.72ID:3ccLXt3S
https://www.youtube.com/watch?v=Q4gTV4r0zRs
0729デフォルトの名無しさん2016/03/21(月) 09:02:53.74ID:TTV7yA8/
>>728
いいね。
前にちらっと見たことがあるかも。
0730デフォルトの名無しさん2016/03/21(月) 09:26:02.08ID:Xz9aFOH3
今日も、アンチPublic使用教の信者が蠢いていますね。

何かに取り憑かれているのでしょうか?

終いにはグループで開発とかVBAでそんな寝言を言い始める人が出てくる始末で。
0731デフォルトの名無しさん2016/03/21(月) 09:51:04.04ID:hQVzfahh
>>730
その話はVBAもその気になればPrivateでアクセス出来るという話で落ち着いたから

PublicでもPrivateでも好きな方を選べ
0732デフォルトの名無しさん2016/03/21(月) 10:10:14.63ID:IyXG4J1C
>>730
> 今日も、アンチPublic使用教の信者が蠢いていますね。
今日 Public ガーって言ってるのは君しかいないが? w
0733デフォルトの名無しさん2016/03/21(月) 10:44:59.64ID:hQVzfahh
>>728
最初に使われてるパソコンが
X68000っぽいな
0734デフォルトの名無しさん2016/03/21(月) 10:49:06.77ID:TTV7yA8/
放っとけばいいのにわざわざ自分から蒸し返す心理とは...
誰かに不適切なPublicを指摘されたトラウマとかな?
0735デフォルトの名無しさん2016/03/21(月) 11:39:14.58ID:x3vAjPCr
変数でStaticってどういうときに使うの?
0736デフォルトの名無しさん2016/03/21(月) 12:31:30.37ID:9OwgQuju
>>735
? がついてるから質問なんだろうけど 質問の意図が分らない
Static がどんなものか 分らないんだったら↓
http://officetanaka.net/excel/vba/variable/10.htm
0737デフォルトの名無しさん2016/03/21(月) 12:51:59.24ID:S6t6aFh8
>>736
「また、Endステートメントを実行すると、やはり静的変数はクリアされます。」

これは知らなかったな。
0738デフォルトの名無しさん2016/03/21(月) 14:19:33.49ID:j2Rjw7j2
>>735
同じボタンを押した時、1回目と2回目で処理を切り分けたりするような
モジュールレベルのスコープにするほどでもないけど、
前回の状態を保持していたいような変数のときかな。

初期状態の設定が限られているし、本当にあまり使い道はないけどね。
0739デフォルトの名無しさん2016/03/21(月) 16:33:18.95ID:Tj/3rFFi
以下の手順で自動売買ソフトを
作っています。

(1)Excelシート2で定期的に為替レートを取得させる
(2)計算しある条件でフラグを立てる(1を立てる)
(3)シート2のフラグをシート1で表示する
(4)シート1で1が立つと、
別に用意したUwscというソフトが起
動して注文する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim test As Long
If Range(Target.Address).Value = 1 Then
test = Shell("UWSC実行までのpass", 1)
End If
End Sub


という事をやろうとしています。
自動でシート1に1が立ったらUwscをさせたいのですが、シート2で計算をしているので
シート1には計算式が入っています。

シート1で1を手入力すると実行するようにはなったのですが、
計算式の結果が1になっても自動で起動しません。

どう直せばいいでしょうか
0740デフォルトの名無しさん2016/03/21(月) 17:47:26.23ID:3ccLXt3S
>>728
VBAでもこの計算できるの?
アルゴリズムの組み込みとかも
0741デフォルトの名無しさん2016/03/21(月) 17:51:17.45ID:XSVJMcUi
>>739
この辺が参考になるんじゃないの?

http://m.chiebukuro.yahoo.co.jp/detail/q1175058971
0742デフォルトの名無しさん2016/03/21(月) 17:58:04.07ID:3/YvApPz
>>739
こんな感じ↓のユーザー定義関数

Function Uwsc() as long
Uwsc = Shell("UWSC実行までのpass", 1)
End Function

を作って、適当なセルに

=IF([フラグのセル]=1,Uwsc(),"")

と入れる、とか
0743デフォルトの名無しさん2016/03/21(月) 19:04:07.29ID:x3vAjPCr
>>735>>738
気持ち悪いな。
Static変数は初期化の代入をせずに使えってことか。
もし宣言後すぐに
 Static a as Integer
 a=100
すると意味がないから宣言だけしてa=100みたいなことはしちゃダメってことだし。
0744デフォルトの名無しさん2016/03/21(月) 19:05:12.57ID:x3vAjPCr
じゃStaticの文字列は
最初は文字なしのままの変数として使わないと強制されてるようなもんだよな。
0745デフォルトの名無しさん2016/03/21(月) 19:06:12.62ID:49NnzOUU
>>743
では、他の言語でも使ってろ
0746デフォルトの名無しさん2016/03/21(月) 19:10:17.34ID:Evlnb4qf
>>743
だからあまり使い道がないし、
ここもあまり話題にすらのぼらない。
0747デフォルトの名無しさん2016/03/21(月) 19:14:00.67ID:Evlnb4qf
あ、後何に使ったか忘れたけど
再帰のときに何となく使ったような

でも無理して使うようなもんじゃないことは確か
0748デフォルトの名無しさん2016/03/21(月) 20:35:53.39ID:hYgxa+c0
すみません教えてください

今日の夕飯にラーメンと餃子を食べて屁がとても臭いんです
c++やjavaならブレスケアを飲めば治るんですが
vbaはどうすればよいのでしょうか?
0749デフォルトの名無しさん2016/03/21(月) 20:37:15.41ID:Y+CQ6vla
ブレスケアをアナルに入れて新しい時代の幕開けを感じろ
0750デフォルトの名無しさん2016/03/21(月) 20:43:56.24ID:hYgxa+c0
>>749
ありがとうございます
試してみます
0751デフォルトの名無しさん2016/03/21(月) 21:05:13.65ID:Q4dyYWAF
>>742
動きました。
Uwscの定義を決めて
If分で1が表示されれば実行という意味ですね。
シンプルでわかりやすくなりました
ありがとうございます
0752デフォルトの名無しさん2016/03/21(月) 21:14:04.22ID:1m1Wp84G
>>743,744
Variantで宣言してEmptyかどうかチェックして初期化させるロジック書けばよい
0753デフォルトの名無しさん2016/03/21(月) 22:08:39.28ID:4hvaz5Bm
>>752
多分そういうとんち問答をしている訳ではないと思うよ
0754デフォルトの名無しさん2016/03/21(月) 22:34:01.88ID:Bm9213Hu
Staticは同一処理中に一意な値がほしくなった時とかによく使うけどなぁ
0755デフォルトの名無しさん2016/03/21(月) 22:35:11.26ID:1m1Wp84G
>>753
とんちじゃなくてStaticな変数を初期化するまっとうな方法だけど
Static変数は(Variant前提とはいえ)初期化されてるかどうか区別できるって話で
これをとんち問答だと言うなら、そもそもの発言の意図がわからんわ
0756デフォルトの名無しさん2016/03/21(月) 22:42:56.19ID:S6t6aFh8
>>754
「一意」って「唯一」の意味で言ってる?

>>755
数値は0でデフォルト初期化されるけど、初期値なのかたまたま0という値になったのか判別不能だから
あんたの考えで正しいと思うよ。
0757デフォルトの名無しさん2016/03/21(月) 22:53:29.96ID:4hvaz5Bm
>>755
じゃあStaticはVariantみたいなデカい枠使うことと
VariantはEnptyが必ず初期という決めにしておくということが必要になるということだろ?

それだったらString型のものがVbNullStringであったり
数値型のものが0であったり
Boolean型のものがFalseであるのと変わらない。

まだ自前クラスのインスタンスがNotingである方が
その判別のために使っていると明確に出来る分、分かり易くはなるが、
それでも結局はNotingである場合は初期化状態であるという決めが見て取れない、
初期で決められないのが気持ち悪いって話だと思うんだが。
0758デフォルトの名無しさん2016/03/21(月) 23:01:01.75ID:4hvaz5Bm
>>755
ひょっとしてVariantは一度何か設定すると二度とEmptyを設定出来なくなるのか?

だとしたら分からなくもないけどな。
0759デフォルトの名無しさん2016/03/21(月) 23:20:58.07ID:Y+CQ6vla
最近変な奴多いな
0760デフォルトの名無しさん2016/03/21(月) 23:23:32.17ID:4hvaz5Bm
ブレスケアをアナルに入れろとか言ったりな
0761デフォルトの名無しさん2016/03/21(月) 23:26:10.29ID:Y+CQ6vla
お前自覚あったのかw
0762デフォルトの名無しさん2016/03/21(月) 23:27:32.62ID:4hvaz5Bm
お前は自覚がないようだけどな
0763デフォルトの名無しさん2016/03/21(月) 23:33:31.98ID:wDZuq9VI
git みたいなバージョン管理ツールで管理する良い方法ってあります?
0764デフォルトの名無しさん2016/03/21(月) 23:35:17.19ID:p3S9wzo3
VBSでも使え
0765デフォルトの名無しさん2016/03/21(月) 23:47:53.45ID:49NnzOUU
>>763
ないです。
0766デフォルトの名無しさん2016/03/21(月) 23:54:14.48ID:S6t6aFh8
>>763
gitが使えないの?
0767デフォルトの名無しさん2016/03/21(月) 23:57:19.38ID:S6t6aFh8
>>758
Emptyを再度入力は出来るけどたいていの場合は想定外とできるだろう。
そんな仮定はおけないから厳密にやれと言うなら2フェーズコミットでもするしかない
0768デフォルトの名無しさん2016/03/22(火) 00:06:16.80ID:mGdonu1j
>>767
俺だったら別に気持ち悪くてもいいからそんな細かいこと考えずに使ってしまうか
それが嫌ならそんな面倒なこと考えずにモジュールレベルの変数にしてしまうがな

なぜそこまでStatic変数にこだわる必要があるのか分からん
0769デフォルトの名無しさん2016/03/22(火) 00:13:55.78ID:mGdonu1j
>>767
後よく分からんのだが、VBAで二層コミットってどうやってやるんだ?
0770デフォルトの名無しさん2016/03/22(火) 01:04:29.84ID:dJvZYtfq
相変わらず話がカオスってるなw
お前ら何がしたいんだよホントに
0771デフォルトの名無しさん2016/03/22(火) 07:46:36.57ID:MJ9VuNga
>>768
モジュールレベル変数でも初期化の問題は同じなんじゃ?
0772デフォルトの名無しさん2016/03/22(火) 08:24:45.98ID:99TVABME
>>771
標準モジュールなら初期化関数、クラスモジュールならコンストラクタとか、
いくらでも初期化するところを作れるでしょ。

初期化関数とかで銘打って初期化を行う場合、そこで行うことは初期化な訳だから
むしろそこで設定されている値は初期値であることが見て取れる訳だ。

それは例えばInteger指定した変数が1であっても1が初期値であることを見て取れるよな。

ところがStatic変数はInteger型であれば常に初期値は0固定。
しかも初期値として銘打った訳でもなく、常にデフォルト値であるから何のためにその初期値を設定しているかもへったくれもない。

初期値が設定出来ないからそれに合わせてプログラムを組んで行くことを良しとするなら
そもそもVariantがどうの何て関係ないし、
良しとしないならモジュールレベル変数を外部で初期化してそれを使えばいいって話。
0773デフォルトの名無しさん2016/03/22(火) 09:12:47.63ID:a24Ufvum
   A    B    C     D    E     F1
1 hoge   foo  bar    hige   moge
2 hoge       foo hige
3 hoeg             bar


Selection.End(xlToLeft).Select
を使うと、

セルF1にいれば、A1に移動することが出来ます。
セルF2や、F3だと途中で引っかかってしまします。

現在位置から、一番左端のセル(A列)に確実に移動させることのできる
方法を教えてください。Excelは2010です。お願いします。
0774デフォルトの名無しさん2016/03/22(火) 11:02:58.23ID:dSAc+Pcy
i=Selection.Row
Cells(i,1).Select

じゃダメ?
0775デフォルトの名無しさん2016/03/22(火) 11:34:58.64ID:MJ9VuNga
>>772
ちょっとよくわからない。
その初期化関数というのは誰がどのタイミングで呼ぶんだ?
0776デフォルトの名無しさん2016/03/22(火) 11:49:23.44ID:nMkuIUa1
>>775
772では無いが
book_open()とか?
0777デフォルトの名無しさん2016/03/22(火) 18:32:17.03ID:a24Ufvum
>>774
ありがとございます!
正直、その手があったか!って感じです・・。
発想力に脱帽です。
0778デフォルトの名無しさん2016/03/22(火) 21:13:31.63ID:7bpCpVCV
>>772
>モジュールレベル変数を外部で初期化してそれを使えばいいって話。
そもそもの議論はStatic変数の使いどころなんだから
プロシジャレベルのStatic変数で良いところを、スコープ広げてモジュールレベル変数使えば良いと言う主張なら勝手にやってくれ

Emptyを未初期化以外の状態として使おうなんて考えるやつは他の言語使うかプログラミングやめてくれ
0779デフォルトの名無しさん2016/03/22(火) 21:18:02.82ID:hxwXC9nK
つーかさ、最近のこのスレ

原理原則的なローレベルの話を今頃盛んにやってるのはどういう了見なわけ?
して意味有るの?wwこれから進化するわけでもないし、下手すりゃVBAなん
て消滅する可能性のほうが高いのに。
0780デフォルトの名無しさん2016/03/22(火) 21:19:22.05ID:7bpCpVCV
ああ、Integer型が初期化されてるかどうか判別できないってのが問題だって言うのも違う言語使ってくれ
言語のデフォルト値がセットされてるかどうか以外で初期化されてるかどうか判断できる言語を俺は知らんが
0781デフォルトの名無しさん2016/03/22(火) 21:20:48.45ID:7bpCpVCV
>>779
最近プログラミング初めて、最近の言語と比較して不足点が多いから文句言ってるんじゃないの?
0782デフォルトの名無しさん2016/03/22(火) 21:26:31.05ID:hxwXC9nK
>>781
言ってどうにかなるわけでもなし。飲み屋の愚痴じゃんww
そういうもんだとして受け止めるのがVBAでしょ。疑問を持つなと。
0783デフォルトの名無しさん2016/03/22(火) 21:28:15.42ID:plzhPaGG
>>780
C/C++「おっ、そうだな」

>>781
最近始めてっていうよりはスクリプト言語をしばらく学んでいて下手な自信つけたやつが、
いざ仕事始めたらVBAで初めてのコンパイラ言語に直面してプライドがガタガタになって、
必死にVBAのせいにしてる印象。

不満点もC/C++みたいな「ポインタがいじれない!」よりは、
「配列が勝手に伸びない!」みたいなスクリプト言語の特徴と比べてるものが多いし。
0784デフォルトの名無しさん2016/03/22(火) 21:43:07.31ID:9EEMgYOF
・スコープを諦める
・固定の初期値で我慢する
・Variant を使った少し面倒なコードを書く
のどれを選ぶかだろ
ケースバイケースだけど、個人的には Variant は極力使わない質なのでカウンタとかで初期値が 0 でいいとかでなきゃ、スコープを諦めることが多いかな
0785デフォルトの名無しさん2016/03/22(火) 22:04:12.54ID:dJvZYtfq
なんでお前らそんなに言語の機能に振り回されるん?
使いどころが分からなきゃ使わなければいいんだよ

理解出来ないもんは「今はまだ分からん」でほっとけ
本質を見誤ったままムリヤリ理解したつもりになっても
後々苦労するのは自分だという事も知っておいた方がいいな
0786デフォルトの名無しさん2016/03/22(火) 22:17:04.92ID:7bpCpVCV
>>782
他の言語でこういう機能を、VBAで実現するにはどうするか?という話ならまだ有益な面がある
VBAでのやり方に納得いかないなら他の言語使えって話だけどな

>>785
その言語の機能を理解しようとする事は良い事だと思うぞ
問題は、俺の理解と言語の機能が違うから、言語の機能がおかしいとか欠陥だとかわめくやつ
0787デフォルトの名無しさん2016/03/22(火) 22:27:39.94ID:plzhPaGG
VBAがVB6の仕様のまま残されたのは、VB6がそれだけ使いやすかったからだしな。
他の言語で学んだ作法を捨ててVBAと向き合えば使いやすくなる。
0788デフォルトの名無しさん2016/03/22(火) 22:34:50.40ID:tjbCDibP
>>778
>Emptyを未初期化以外の状態として使おうなんて

話の流れとはあまり関係ないけど、
何らかのサーチの結果「見つかりませんでした」を意味する値としてEmptyを入れることはある。
これは未初期化とはちょっと意味が違う。
0789デフォルトの名無しさん2016/03/22(火) 22:36:27.83ID:dJvZYtfq
>>786
悪いと言ってるのではない
知らない事を理解する為にはその背景にある思想や新たな概念が必要になる
自分の中にそのバックボーンの準備が出来てない時には回り道する事も重要なんだよ

それを億劫がって知らない部分だけピンポイントで理解しようとあがくから
最近のこのスレみたいなとっちらかったカオスな状態になってんだよw
0790デフォルトの名無しさん2016/03/22(火) 22:53:24.79ID:7bpCpVCV
>>789
いまさらVBAのバックボーンまで理解するメリットがあるかどうかは疑問だけどな
理解しようとしてるなら良いし、古い言語だしそう言うもんだと割り切るならそれはそれでよいんじゃない

VBAの言語仕様に文句あるならさっさと別の言語使えば良いだけの話
カオスなのはVBAでも俺の思う仕様でプログラミングしないと気が済まないって奴が暴れるからだよ
0791デフォルトの名無しさん2016/03/22(火) 22:56:31.81ID:9n/g/Em0
またC++か
0792デフォルトの名無しさん2016/03/22(火) 23:07:04.74ID:dJvZYtfq
>>790
お前もよく分かってないやつだな
なんで急にVBAのバックボーンなんて大げさな話になるんだよ
今の流れでバックボーン言ったらローカルスタティックが存在する理由だろ
それが分からずに初期化云々を話しても無駄だって事だよ
2フェーズコミットとか亜空間からのトンデモキーワードまで飛び出す始末だぞw
0793デフォルトの名無しさん2016/03/22(火) 23:25:18.54ID:tjbCDibP
2フェーズコミットってこれと勘違いしてるんじゃないかと思うけどな

ダブル・チェック・ロッキング
http://monobook.org/wiki/%E3%83%80%E3%83%96%E3%83%AB%E3%83%BB%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%BB%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0
0794デフォルトの名無しさん2016/03/23(水) 06:28:08.77ID:IK9U7Mum
微笑ましいなぁ
0795デフォルトの名無しさん2016/03/23(水) 07:18:32.22ID:+NSqh0Ud
全然関係ないけどここでカオスカオス言ってる人は
客先への説明でもカオスカオス言うのかな
普段変な言葉使ってるとふっと出ちゃうよね
0796デフォルトの名無しさん2016/03/23(水) 07:25:38.39ID:wQhSXLia
VBAレベルなら出てしまってもそれくらいどうでもいいでしょ
0797デフォルトの名無しさん2016/03/23(水) 07:43:08.61ID:kkwy+h67
>>795
そりゃここで言ってるんだから漢なら
「テラカオス〜w」くらい言うだろ
ネット弁慶でヘタレでもなければな
0798デフォルトの名無しさん2016/03/23(水) 07:45:00.31ID:U+mfgt1q
カオスって使うの変なのか?
まあ現実でここまでカオスな議論に似た何かに遭遇する事もないから
2ちゃん以外で出てくる事はないんだけどな
0799デフォルトの名無しさん2016/03/23(水) 07:52:40.21ID:Qpwk82GG
変っていうかオタクくさい
0800デフォルトの名無しさん2016/03/23(水) 08:05:18.31ID:0uNM7+MP
でも前向きな解決策も出てたんじゃないか
0801デフォルトの名無しさん2016/03/23(水) 08:18:47.37ID:Qpwk82GG
あったっけ?そんなもん
0802デフォルトの名無しさん2016/03/23(水) 08:30:15.82ID:0uNM7+MP
キャストを使うやつは欠点はあるけど一応機能するんじゃないの?
言い出した人が満足してるかどうかはわからんけど。
0803デフォルトの名無しさん2016/03/23(水) 08:33:36.89ID:ftHundBi
つーかさ、配列の話もそうだし、ココ数週間VBAのくだらねぇ根底仕様に文句垂れて、
くだらねぇ議論を投稿してる奴ってさ、以前からここに貼り付いてる約一名の馬鹿なんじゃね?

糞ニートでココ以外居場所がない奴なんだがね、そいつ。
0804デフォルトの名無しさん2016/03/23(水) 20:29:56.83ID:vV1MpbSN
>>803
糞ニートというかC++erだよそいつ
たまに丁寧語でそういう類のことを質問してきて
不意に別人を装って荒らし始める

今回は丁寧語ではなかったけど>>433
質問してきてしばらくしてから別人を装って
>>494から荒らし始めてるな

確か前に関数の戻り値が参照で
渡せないとかなんとか騒いでたやつだよ

多分C++のスレで相手にされなくて
憂さ晴らしにここで自分スゲーって
やりたいんだろ?ほっとけばいいよ
0805デフォルトの名無しさん2016/03/23(水) 21:09:33.52ID:Scz4/P5a
C++スレでスゲーされないのにVBAに来るのは何でだ。
BASICって言ったらむしろCよりも低レベルな知識がないと(処理速度的に)お話にならないでお馴染みの言語だろ?
0806デフォルトの名無しさん2016/03/23(水) 21:37:17.53ID:GH1QWbAT
バカなんだろ
0807デフォルトの名無しさん2016/03/23(水) 21:57:29.27ID:Ki194qo0
>>805
Rubyスゲーとかいうアホも時々現れるよね。
0808デフォルトの名無しさん2016/03/23(水) 21:58:24.12ID:Ki194qo0
>>804
いたいた。そういえば。
0809デフォルトの名無しさん2016/03/23(水) 22:01:31.28ID:80VClmuK
>>804
ByRefを知らないの?www
0810デフォルトの名無しさん2016/03/24(木) 15:50:34.60ID:ZS8UeVhQ
みんなVBAの前にExcelのことを忘れているだろう
0811デフォルトの名無しさん2016/03/24(木) 20:22:34.52ID:LqdatXKY
「はぁ、この単純作業つまらんな。自動化できへんやろか。せや! VBA使ったろ!」
   ↓
「ふーん。変数なんてものもあるんやな。これ使えばセルの位置とか考えずに値を保存しとけて便利や」
   ↓
「は!? 今までセルでやってた作業を配列に入れたら処理が一瞬で終わったわ。セルとかゴミやん!」
   ↓
「ほーん。オフィス製品は全部VBAで扱えるんやな。各工程ごとに適したソフト選んでマクロ組むで」
   ↓
「VBAを介して連動できるんやからオフィス製品のソフトの違いなんてガワの問題に過ぎん」


だいたいこんな感じの流れで最後にたどり着くから、
Excelとか「知ってる。緑色のアイコンだろ」くらいにしか意識しなくなる。
0812デフォルトの名無しさん2016/03/24(木) 21:01:52.77ID:K0zm5kYL
そういや最近ExcelのVBA以外のVBAって触ってないわ。
VB6なら仕事上使うことあるんだけどな。
0813デフォルトの名無しさん2016/03/24(木) 22:07:11.20ID:Tk6GVu5k
すみません、教えてください。

>>300のスクロールバーの者です。
>>300で質問した問題は、原因がわからずに、別の方法で回避したのですが、
やはり、セルとのリンクをとる必要がでてきました。

・スクロールバーを動かすと、リンクされたセルの表示値も連動して変化して
・逆に、セルの値を手打ちず変更しても、スクロールバーも連動してその値に移動する

ということを実現するために、
スクロールバーのコントロールのプロパティ
http://imgur.com/jkhPHef
の「LinkedCell」の右の枠に、「表示したいセルの位置」座標を入力しても、
記憶してくれません。受け付けてくれません。

どのようにしたら、この設定を覚えてくれるのでしょうか?

宜しくお願いいたします。
0814デフォルトの名無しさん2016/03/24(木) 23:31:45.94ID:2oMwx5tv
>>813
LinkedCellの枠に A1 とかじゃなくて "A1" とか入力してない?
こっちはExcel2007だけど、ダブルコート付けて座標入力したら駄目だった


それで駄目ならVBAコードから書き換えてみるとか
Sub main()
  Sheet1.ScrollBar1.LinkedCell = "c1"
End Sub
0815デフォルトの名無しさん2016/03/25(金) 00:31:30.75ID:+WYmBYFt
>>814
ありがとうございます。
>LinkedCellの枠に A1 とかじゃなくて "A1" とか入力してない?
それも含めて、いろいろな形式で入力してみましたが、どれも受け付けてくれませんでした。
A1 $A$1 "$A$1"
何か設定がfalseになっているだけなのかなぁ と考えていましたが
難しそうですね。

プロパティで設定するものを、VBAでセットできるんですか??
今初めて知りました。ありがとうございます。
ちょっと調べてみます。というか、明日やってみます。
0816デフォルトの名無しさん2016/03/25(金) 10:48:23.84ID:Gxz2Mc9s
ぜんぜん知識が無いんであてずっぽだけど、
環境によって出来たり出来なかったりするのって
フォームコントロールのスクロールバーと
アクティブXのスクロールバーとの違いだったりしてない?
たしかアクティブXつかってるとセキュリティーがやばいとか何とかの理由で
2014年ぐらいのウインドウズアップデートで
VBAじゃアクティブX関連の機能が使えなくなったんだよね?
0817デフォルトの名無しさん2016/03/25(金) 12:27:40.49ID:TWVXpUq5
vbaで選択範囲をそのまま下に移動するのをループさせることできますか?

a1:e1
↓ ここで条件に当てはまった場合セ↓ ルの挿入処理
a2:e2


a30000:e30000
これを実現するための構文を教えていただきたいです。
0818デフォルトの名無しさん2016/03/25(金) 12:28:38.35ID:TWVXpUq5
vbaで選択範囲をそのまま下に移動するのをループさせることできますか?

a1:e1
↓ ここで条件に当てはまった場合セ
↓ ルの挿入処理
a2:e2


a30000:e30000
これを実現するための構文を教えていただきたいです。
0819デフォルトの名無しさん2016/03/25(金) 13:25:20.34ID:e4gujGfG
どこまで出来て何がわからない?
それとも丸投げ依頼か
0820デフォルトの名無しさん2016/03/25(金) 13:44:36.17ID:apTYUlYg
>>819
選択範囲を保持したまま1つ下の行に移動するというループができないです
0821デフォルトの名無しさん2016/03/25(金) 13:48:43.79ID:1OrvczFU
>>816
使えるみたいだけど?
ちょっとイジらないといけないが
0822デフォルトの名無しさん2016/03/25(金) 13:50:38.87ID:VxIVobtu
>>818
range("a1:e1").offset(rowi,0)
でrowiをforで変化させるとか
0823デフォルトの名無しさん2016/03/25(金) 14:06:31.50ID:apTYUlYg
>>822
ありがとう!やってみます!
0824デフォルトの名無しさん2016/03/25(金) 14:59:33.43ID:e4gujGfG
>>820
選択範囲はそのままなんだろ
何を、一つ下の行に移動させるんだ?

今あるセルを下にずらして新しいセルを挿入したいなら
RangeのInsertでShift:=xlDown指定すれば良いんじゃないか
0825デフォルトの名無しさん2016/03/25(金) 15:04:05.08ID:1OrvczFU
>>817
配列使って、

配列上でそういう処理はやって、最後に貼り付けるといいよww
そういうマクロ的な考えはVBAではやらないってのが、まず入門編
です。
0826デフォルトの名無しさん2016/03/25(金) 15:30:27.32ID:i3XIX2iS
マクロイドS
0827デフォルトの名無しさん2016/03/25(金) 16:07:47.84ID:apTYUlYg
>>824
選択範囲は保持したままではありませんでした。
選択範囲の形は保持したまま下にずらすという意味です。

a1:e1

a2:e2
0828デフォルトの名無しさん2016/03/25(金) 16:18:33.35ID:e4gujGfG
>>827
Selection.Offset(1, 0).Select とかやってやればできるだろうけど

そもそも選択範囲をずらしていく必要があるのかどうか
VBAでセルの値をチェックするに選択する必要とかないぞ
0829デフォルトの名無しさん2016/03/25(金) 16:45:18.91ID:apTYUlYg
>>828
ピンポイントでa1からe1までのcellを挿入することってできるのでしょうか
0830デフォルトの名無しさん2016/03/25(金) 17:28:09.29ID:Bx31LFpZ
>>827
少しは調べろ
ヒントをやる
リサイズ
0831デフォルトの名無しさん2016/03/25(金) 18:06:52.51ID:e4gujGfG
>>829
Range("A1:E1").Insert Shift:=xlDown
つか>>824にそう書いてやっただろうが
0832デフォルトの名無しさん2016/03/25(金) 18:14:24.19ID:/rfU1X9k
For r = 1 To 100
For c = 1 To 30
Cells(r, c) = num
Next c
Cells(r, 31).FormulaR1C1 = "=sum(RC1:RC30)"
Next r

このループを大量にやるとき、最初からセルに関数を入れておけば
Formulaはなくてもいいじゃないですか。でも値が入るたびに計算されると処理に時間がかかりますよね?
時間短縮するなら一度クリアしてFormulaで計算するほうが速いですか?
0833デフォルトの名無しさん2016/03/25(金) 18:46:06.95ID:w1vZyChW
>>832
https://sites.google.com/site/compositiosystemae/home/vbaworld/primitive/exp1/stopredrow
0834デフォルトの名無しさん2016/03/25(金) 19:35:29.57ID:aAJg3A5q
>>817
3万回もSelection移動したらたぶんくそ遅い。
データ挿入は配列かRangeオブジェクトの操作でやって、同時にデータ挿入行数をカウントして、データ挿入完了後にSelectionを行数分移動する方が圧倒的に速い。

まあセルの処理をSelectionで書いてるからこういう質問なんだろうけど、Selectionの移動には基本Rangeオブジェクトの取得が必要だから、どのみちRangeのいじり方の習得は必要。

と若干エスパーしてみる
0835デフォルトの名無しさん2016/03/25(金) 19:41:28.94ID:X2mooKXb
░選▓択▓範▓囲▓保░持▓の▒ま▒ま▓複░写▒O░K▒だ░ろ▒
0836デフォルトの名無しさん2016/03/27(日) 10:47:37.19ID:z2+I0/g2
平和だなぁ
荒らしの後の静けさだな
0837デフォルトの名無しさん2016/03/28(月) 15:51:08.26ID:di4OCp5M
With Selection って「アホなコード」と一刀両断すべきものなの?
そんなことはないと思うんだけど。
0838デフォルトの名無しさん2016/03/28(月) 16:47:51.14ID:szf/wSg3
>>837
・Selectするのは遅い
・Selectしなくても普通は大丈夫

だから、Selectしないコードを書きましょう

Selectが許されるのは小学生までだね
0839デフォルトの名無しさん2016/03/28(月) 16:52:21.25ID:keXJiS/R

遅いとか気にするのは大学生までだね

Selectでええやん
0840デフォルトの名無しさん2016/03/28(月) 16:52:48.74ID:CG2l5UCc
>>838
遅いというソースを出してくれ
0841デフォルトの名無しさん2016/03/28(月) 17:02:47.98ID:qRQAYvKv
>>837
Selectionの是非について言われたのか、Withについて言われたのかもわからん
ダメだと言われて理由が知りたいなら、そう言った人に聞けよ

まあ俺ならSelectionが変更された場合どうなるかわからんから
With Selection なんてコードは怖くて書けんが
0842デフォルトの名無しさん2016/03/28(月) 17:03:15.83ID:YQC0RxKd
Selectが許されるのは幼稚園児までだね
0843デフォルトの名無しさん2016/03/28(月) 17:19:51.49ID:szf/wSg3
>>840
ゆとり世代ですか
知りたきゃ自分で試してね
0844デフォルトの名無しさん2016/03/28(月) 19:07:23.25ID:QYng5XP1
>>837
With Selection が必要なケースもあるけどかなり珍しいケースだしそれがわかってる奴は何を言われても気にしないから、アホなコードと一刀両断していいと思う
0845デフォルトの名無しさん2016/03/28(月) 19:51:08.80ID:keXJiS/R
アホやな逆や逆
With Selectionが必要なんて事金輪際ないで
使うのは全く問題ないけどな
0846デフォルトの名無しさん2016/03/28(月) 20:02:48.39ID:d9R/jMr4
Selectionは、セミオートなシステムを作るなら使う場面もあるかもしれないけど、
ここで質問するレベルだと使わない方が利便性の高い場合しかないからなぁ。
0847デフォルトの名無しさん2016/03/29(火) 07:01:30.59ID:cLoCouWa
Selectionが無駄で危険なのは分かるけど、
コピーペーストする際のActivateも同じような危険を
はらんでると思うんだけどみんなどうやって回避してる?

それともあれは回避出来ないものなの?
0848デフォルトの名無しさん2016/03/29(火) 07:20:12.96ID:tPbPM7VA
Copy Destination:=
0849デフォルトの名無しさん2016/03/29(火) 08:50:17.89ID:nvewoInJ
>>846
「セミオート」って?
インタラクティブ的な意味だったら自分もSelectionは使う。セル範囲を選択した状態で「ctrl + なんとか」で何かする、みたいな。
0850デフォルトの名無しさん2016/03/29(火) 12:40:16.41ID:gFuADHyB
>>845
> With Selectionが必要なんて事金輪際ないで
お前はそうかもな w

>>849
> インタラクティブ的な意味だったら
そう言う意味だと思う
0851デフォルトの名無しさん2016/03/29(火) 22:38:04.33ID:vHd5hQDW
Selectionは必要な場面があるが
それをWithする事が「必要」な場面なんてあり得ないけど

Withする事が有益かどうかは議論の余地があるかもしれんが
俺的には絶対やらん
0852デフォルトの名無しさん2016/03/29(火) 23:11:53.16ID:nwi+vARH
確かに With はネストしたりすると読みにくくなるしなー

でも俺は隙あらば使う派
0853デフォルトの名無しさん2016/03/30(水) 03:56:22.22ID:e4rqtyoV
With Me.ProgressBar
   Perprog = .Value/.Max
End With

みたいな時は使う。あとWithは動作遅いらしくて純然たる見た目にしかアドバンテージがないステートメントだとか。
0854デフォルトの名無しさん2016/03/30(水) 04:53:52.71ID:9cdJknoO
>>852
>>851は、With Selectionは俺的にはなしだってことな
普通のWithは俺も使う

>>853
>Withは動作遅いらしくて純然たる見た目にしかアドバンテージがない
Withしてるのが単純なオブジェクトとか、行数が少ないとかならそりゃ遅くなるだろう
VB6での話だと
a.b.c.X
a.b.c.Y
a.b.c.Z
なんかのパターンだと
With a.b.c
.X
.Y
.Z
End With
の方が早い(場合が多い)
理由はa.b.cがキャッシュされるから、bやcの評価が1度で済むから
まあbやcに副作用があったりしたら同じ結果にはならんから厳密には同じコードじゃないけど
0855デフォルトの名無しさん2016/03/30(水) 06:46:39.89ID:qkOTAIEE
>>854
set d=a.b.c
d.X
の方が速い?
0856デフォルトの名無しさん2016/03/30(水) 07:10:05.14ID:05PwI6sW
>>854
副作用って?
0857デフォルトの名無しさん2016/03/30(水) 07:28:33.37ID:gjgR4bIq
>>851
> それをWithする事が「必要」な場面なんてあり得ないけど
お前はそうなんだろうな
0858デフォルトの名無しさん2016/03/30(水) 07:44:14.00ID:qapVujES
ひっこみがつかなくなった模様です
0859デフォルトの名無しさん2016/03/30(水) 07:51:47.15ID:0bB0WDH9
にしてもSelectionでWithが使えるということは
SelectionもObjectということか。

型、何だろう?
0860デフォルトの名無しさん2016/03/30(水) 08:04:12.88ID:qkOTAIEE
>>859
range?
typename()で調べられたはず
0861デフォルトの名無しさん2016/03/30(水) 08:07:46.18ID:rtr/ZoOr
Withのことを考えるとプロパティに副作用を持たせるのは考えものだな
0862デフォルトの名無しさん2016/03/30(水) 14:34:34.76ID:9cdJknoO
>>855
速いってのは何と比べて?
そこから何回もdを使えば、b,cの処理が1回で済むから速くなるって言ってるんだよ

Withは実質的にはそれと同じ事をやるだけ
ただWithでやると明示的に変数が作られないから、dを取得できない

>>856
ざっくり言えば、複数回呼び出したときに違う結果になる事

>>859
Application.Selectionなら、型はObject
実際に返されるオブジェクトは
>Selection プロパティで返されるオブジェクトの種類は、何を選択するかによって異なります
まあ大抵はRangeを想定されてる事が多い
ちゃんとチェックしないと選択セルが無いときにこけたりする

>>861
まあ、ちゃんと理解してWith使えって話なんだが
Withが怖いのは、オブジェクト返せばプロパティだろうがメソッドだろうがフィールドだろうが使える
プロパティのゲッターは副作用なしに出来るとしても
あらゆるメソッドにまで副作用なしにするのは現実的じゃないし
0863デフォルトの名無しさん2016/03/30(水) 16:08:31.72ID:qkOTAIEE
>>862
withと比べてだ
withがキャッシュしてるかどうか判るだろう
0864デフォルトの名無しさん2016/03/30(水) 17:01:14.94ID:1HCefgsk
>>862
よく分からんのだけど副作用って何?

Withで指定した場合とそうでない場合で
挙動が変わることがあるって言ってるの?

ということはWithでキャッシュされるのはその
Objectの参照先ではなく値ってこと?
0865デフォルトの名無しさん2016/03/30(水) 17:06:37.39ID:rtr/ZoOr
>>864
bやcを呼び出すことについての副作用じゃないかな
0866デフォルトの名無しさん2016/03/30(水) 19:12:03.72ID:gdMVs/6W
よく分からないな。
ドットで区切って呼び出すのとWithで呼び出すので
その副作用とやらの起こりかたがどう変わるのか。

素人考えで言うとドットで区切って呼び出すのもWithで呼び出すのも
実行する相手は変わらないから副作用とやらがあったとして
同じ順序で実行している限り結果として同じになりそうなもんだけどな。
0867デフォルトの名無しさん2016/03/30(水) 19:27:45.38ID:qapVujES
元々よく分かってない奴が言ってんだから、言われた方がよく分かる訳ないだろ
0868デフォルトの名無しさん2016/03/30(水) 19:35:15.74ID:9cdJknoO
>>863
Withと自分でキャッシュするのとどっちが早いかって?
誤差程度の差しか出ないと思うけど実測してみるしかないんじゃない?
キャッシュって意味を違う理解してるような気もするな

>>866
>>854のパターンで行けば、bとcが呼び出される回数が違うのは理解できる?
bに副作用があるって事は、1回目のa.bと2回目のa.bが同じ結果にならないって事だぞ
つまりbを呼び出した回数によって違う結果になるって事
0869デフォルトの名無しさん2016/03/30(水) 19:56:33.21ID:rtr/ZoOr
プロパティや関数呼び出しごとに課金されるとしたら、ってこと
0870デフォルトの名無しさん2016/03/30(水) 20:06:31.07ID:e4rqtyoV
Class1:
Property Get value()
Static i As Long
value = i
i = i + 1
End Property

module1:
Sub test()
Dim c As New Class1
For i = 1 To 10
With c
Debug.Print .value
End With
Next
End Sub

こんな実験してみたけど普通に回ったし、呼び出しの副作用が何を指すのか分からない。
0871デフォルトの名無しさん2016/03/30(水) 20:19:05.44ID:9cdJknoO
>>870
単純なオブジェクトで、Withブロック内で1回しか使わん例をだされても...
0872デフォルトの名無しさん2016/03/30(水) 20:24:33.37ID:VRmOt6d2
VBA使ったら課金されるんか?
0873デフォルトの名無しさん2016/03/30(水) 20:30:36.04ID:qapVujES
課金しないからお前のマクロは遅いんやで
0874デフォルトの名無しさん2016/03/30(水) 20:39:47.07ID:e4rqtyoV
>>871
事象を説明できる様な具体的な例を一度も出さずにそう言われても・・・
0875デフォルトの名無しさん2016/03/30(水) 20:45:29.43ID:9cdJknoO
--Class1
Private count As Integer
Function b() As Class1
count = count + 1
Set b = Me
End Function
Sub X()
Debug.Print count
End Sub
Sub Y()
Debug.Print count
End Sub

--テストコード
Sub test()
Dim a As Class1

Debug.Print "ケース1"
Set a = New Class1
a.b.X
a.b.Y

Debug.Print "ケース2"
Set a = New Class1
With a.b
.X
.Y
End With
End Sub

bに副作用があるので、ケース1と2で結果が変わる
0876デフォルトの名無しさん2016/03/30(水) 20:51:23.72ID:rtr/ZoOr
>>868で明確になってるのに
0877デフォルトの名無しさん2016/03/30(水) 21:03:28.25ID:rtr/ZoOr
>>869も通じてなかったのか。
課金があるとしたら回数を減らすでしょ。With使って減らせる場合があるでしょ。
ってこと。
0878デフォルトの名無しさん2016/03/30(水) 21:50:19.41ID:05PwI6sW
>>875
なるほど、コードにして書いてもらうと理解しやすいな

特殊に見えて意外にあり得るケースかもな
0879デフォルトの名無しさん2016/03/30(水) 21:57:45.44ID:qapVujES
納得すなよwith関係ないやんけw
0880デフォルトの名無しさん2016/03/30(水) 22:03:17.20ID:YrELR0Gg
>>879
関係ない、とは?
0881デフォルトの名無しさん2016/03/30(水) 22:13:52.67ID:qapVujES
Sub test3
Dim a As Class1
Debug.Print "ケース3"
Set a = New Class1
Wizz a.b
End Sub

Sub Wizz(b as Class1)
b.X
b.Y
End Sub

以外どころか日常茶飯事やろ
0882デフォルトの名無しさん2016/03/30(水) 22:21:23.09ID:WcRChq9C
>>875
ケース1を With で書くと With a のはず
ケース2を With で書かない場合は
Set a = new Class1
のあと
Set ab = a.b
とでもしておいて
ab.X
ab.Y
としなければならないはず

副作用のあるプロパティの例にはなってるけど
Withについての例としては成り立っていない
0883デフォルトの名無しさん2016/03/30(水) 22:30:20.94ID:YrELR0Gg
>>882
>としなければならないはず

0884デフォルトの名無しさん2016/03/30(水) 22:32:17.11ID:05PwI6sW
>>882
どっちにしても纏める範囲で挙動が変わるということか
いやはやお前ら頭いいなぁ
0885デフォルトの名無しさん2016/03/30(水) 22:44:54.54ID:05PwI6sW
そう言えば昔vb6のスレでWith Newって書き方してる人がいて目から鱗だったけど
周りの人達は「またNew Withか」って呆れてたな

あれ何かマズいんかな?
0886デフォルトの名無しさん2016/03/30(水) 22:46:46.42ID:05PwI6sW
New With → ×
With New → ○
0887デフォルトの名無しさん2016/03/30(水) 22:48:18.62ID:0VGmSTQP
Visual Studioを始めたのですが
ExcelVBAの「イミディエイトウインドウ」に相当するものはどこにありますか?
0888デフォルトの名無しさん2016/03/30(水) 22:50:36.30ID:YrELR0Gg
>>885
それで思い出したけど、以前
Set Me = Nothing
ってステートメントがエラーになることを知ってショックを受けた。
0889デフォルトの名無しさん2016/03/30(水) 22:51:08.58ID:05PwI6sW
>>887
スレ違いだけどコマンドウィンドウでimmedって打つと
多分幸せになれる
0890デフォルトの名無しさん2016/03/30(水) 22:53:15.45ID:YrELR0Gg
>>887
Ctrl + Alt + I
0891デフォルトの名無しさん2016/03/30(水) 22:58:34.94ID:05PwI6sW
>>888
よしんばエラーにならなかったとして
自分で自分の参照を消そうとするわけだから
以降にステートメントが書かれていた場合
どうなっちゃうんだろうな
0892デフォルトの名無しさん2016/03/30(水) 23:01:41.93ID:NTEY1++2
EXCEL VBAで、外部DLLを呼び出す場合、モジュールの先頭で
宣言しますが、アレをカレントディレクトリのを優先で読むようにするにはどうしたらいいですかね?
0893デフォルトの名無しさん2016/03/30(水) 23:02:52.75ID:YrELR0Gg
>>891
そりゃもちろん
「それ以降にステートメントは書いちゃダメ」
だろう
0894デフォルトの名無しさん2016/03/30(水) 23:10:14.09ID:XzoNTFsb
>>885
Withの範囲だけで有効な一時オブジェクトを使えるという意味では
個人的にはWith Newはありのような気もする

'***クラス:Class1
Private Sub Class_Initialize()
 Debug.Print "init"
End Sub

Private Sub Class_Terminate()
 Debug.Print "term"
End Sub

'***標準モジュール
Sub macro1()
With New Class1
 Debug.Print "with"
End With
Debug.Print "exit"
End Sub

'===イミディエイトウインドウ出力
init
with
term
exit
0895デフォルトの名無しさん2016/03/30(水) 23:19:35.85ID:05PwI6sW
>>892
優先は分からないけどとりあえずファイル名の前に
パスを指定すればそこから読むようには
なるんじゃないかな

>>893
まぁたらればの話だから結局はダメなんだろうけどな


>>894
VB.NetでいうところのUsingの代わりになると思って使ってるけど
今々使ってて別段変なことも困ったことも起きてないんだよなぁ
0896デフォルトの名無しさん2016/03/30(水) 23:28:19.82ID:0VGmSTQP
>>888
すばらしい!
しかしそれやりかた忘れたら困りますね。
普通はどうやって出すんですか?

>>890
それも同様。
表示から探してもイミディエイトウインドウの項目もないし。
0897デフォルトの名無しさん2016/03/30(水) 23:32:05.55ID:GO4KFIif
>>894
vbs だと With New RegExp とかたまに使う
0898デフォルトの名無しさん2016/03/30(水) 23:36:53.27ID:NTEY1++2
>>895
じゃぁ、CurrentProject.path & “¥kinoko.dll”でイケるって事ですかね?
0899デフォルトの名無しさん2016/03/30(水) 23:38:51.86ID:05PwI6sW
>>896
上の方のメニューで
デバッグ → ウインドウ → イミディエイト
で出てこない?
0900デフォルトの名無しさん2016/03/30(水) 23:41:41.97ID:05PwI6sW
>>898
何か2010だと相対パスだとエラーになるとかいう話は聞いたことがあるけど
色々試してみたらいかがでしょうか
0901デフォルトの名無しさん2016/03/30(水) 23:53:43.97ID:qkOTAIEE
875のコードを流用して実測してみたら
with より 直前のオブジェクトをsetした方が平均的に速い
withだと分散が大きいから、場合によっては速いこともあるだろう

t-検定: 一対の標本による平均の検定ツール

with set d
平均 53.1 48.96666667
分散 94.23103448 45.82643678
観測数 30 30
ピアソン相関 -0.600253965
仮説平均との差異 0
自由度 29
t 1.530000008
P(T<=t) 片側 0.06842648
t 境界値 片側 1.699127027
P(T<=t) 両側 0.136852961
t 境界値 両側 2.045229642
0902デフォルトの名無しさん2016/03/31(木) 00:07:28.38ID:nmFtqRPT
>>896
デバッグ実行してる最中に、だよ?
0903デフォルトの名無しさん2016/03/31(木) 09:07:13.71ID:A5eNZi27
あるSubまたはFunctionがあって
それを呼んだ元のSubまたはFunctionの名前を取得するには
どうすればいいですか?
0904デフォルトの名無しさん2016/03/31(木) 12:23:29.73ID:BZ6lcS+0
>>903
デバッグ目的?
0905デフォルトの名無しさん2016/03/31(木) 12:31:40.21ID:VnTWApk1
>>903
デバッグ中だったらctrl+Lで判るけど
0906デフォルトの名無しさん2016/03/31(木) 12:35:44.14ID:A5eNZi27
いえデバッグ中ではないです。
コードでそれをもとに条件分岐します。
0907デフォルトの名無しさん2016/03/31(木) 12:37:22.41ID:bs8v4Uzc
くだらん事考えるな
0908デフォルトの名無しさん2016/03/31(木) 12:39:23.10ID:5VtmjZ4S
DB接続にエラーが発生した時の対処として、プロシジャ(ファンクション)の名を引数にして渡してる。

Msgbox procname & " 実行中エラー" みたいな

ボタンなら Application.caller というのがあるんだけど
0909デフォルトの名無しさん2016/03/31(木) 12:40:58.98ID:VnTWApk1
>>906
呼び出し側から引数を渡せば良い
自分のプロシージャ名でも何でも
0910デフォルトの名無しさん2016/03/31(木) 13:35:42.37ID:BZ6lcS+0
>>906
じゃあ「条件判断のために必要な情報」を渡せばいい。
普通それは「Function名/Sub名」なんかじゃないと思うけど?
0911デフォルトの名無しさん2016/03/31(木) 13:41:20.16ID:A5eNZi27
>>909>>910
そういう回答が来る予想はしてたけどまさか本当になるとは。

すでに本格的にシステムをつくってあるから
そこを変えると他の多くの部分でコードの修正が必要になるし
それに伴うバクが発生しないか確認しないといけない。

なので単純にどこから呼ばれてるか書いてあるプロパティみたいなのはないの?
0912デフォルトの名無しさん2016/03/31(木) 13:45:48.39ID:YUafZk1C
呼び出し前にグローバル変数にでも名前放り込めば?
0913デフォルトの名無しさん2016/03/31(木) 14:00:48.25ID:VnTWApk1
>>911
無い
0914デフォルトの名無しさん2016/03/31(木) 14:08:18.20ID:A5eNZi27
>>912
それだとそのグローバル変数に名前を放りこまない従来の多数のプロシージャから呼び出したときに
古い値が残っていた場合にバグや誤動作の原因になる。
0915デフォルトの名無しさん2016/03/31(木) 14:11:30.78ID:pWjpUb41
>>914
出来ませんので諦めて下さい
0916デフォルトの名無しさん2016/03/31(木) 14:13:19.86ID:A5eNZi27
>>915
それだとあなたのスキルが無いという結論で確定になる。
0917デフォルトの名無しさん2016/03/31(木) 14:16:30.51ID:pWjpUb41
>>916←何言ってんだこいつww
0918デフォルトの名無しさん2016/03/31(木) 14:17:07.06ID:A5eNZi27
>>917
日本語だ。しゃべれる?
0919デフォルトの名無しさん2016/03/31(木) 14:19:57.02ID:YUafZk1C
省略可能な引数追加する
0920デフォルトの名無しさん2016/03/31(木) 14:24:42.99ID:pWjpUb41
>>918
答えてもらう態度じゃないなお前ww 何様だよww
0921デフォルトの名無しさん2016/03/31(木) 14:25:22.42ID:pWjpUb41
>>916←スキルのない奴がほざいていますww
0922デフォルトの名無しさん2016/03/31(木) 14:37:28.71ID:D9jQ+Opu
VBAで本格的なシステムって所で笑えばいいのか
0923デフォルトの名無しさん2016/03/31(木) 14:39:19.00ID:pWjpUb41
>>922
まぁ、そんなんで、既存のプロシージャの修正の手間惜しんで、ここで
悪態ついてるレベルだから、程度が知れると思うよ。

要するに設計がクソってことだから。
0924デフォルトの名無しさん2016/03/31(木) 15:40:27.04ID:A5eNZi27
>>919
正解。

そうすることによって既存の他のコードを一切修正することなく望むことができる。
0925デフォルトの名無しさん2016/03/31(木) 15:47:28.75ID:pWjpUb41
>>924
プww
0926デフォルトの名無しさん2016/03/31(木) 15:53:08.17ID:BZ6lcS+0
>>924
それは半分わかるけど、追加するのがFunction名/Sub名である事には全く繋がらないよね?
OptionalでもParamArrayでも好きなの使っていろいろな情報を渡せるようになるわけだし。
0927デフォルトの名無しさん2016/03/31(木) 15:57:01.70ID:BZ6lcS+0
>>924
Optional引数を追加するってことはその関数はインタフェースが変更されるってことだよね。
それは厳密にいうと既存のコードに影響がある。たいていは問題ないだろうけど。
0928デフォルトの名無しさん2016/03/31(木) 16:59:58.10ID:ssKy5xLR
>>926-927
本末転倒
実務者が望むのは問題の解決であり、議論の勝利を求める2chネラーとは目的が異なる
ってか、ここに所謂「2chネラー」が出没してアドバイス(?)するのは百害あって一利なしだな
(そういうおれも2chネラーなんだが)
0929デフォルトの名無しさん2016/03/31(木) 17:15:17.89ID:AghJqbjM
>>928
一言で言えば、クズだ
相手にする必要なし
0930デフォルトの名無しさん2016/03/31(木) 17:49:44.87ID:skxU2C+j
自分が気に入った答えが出たら
そのレスした人への謝礼もなく
偉そうに「正解」とか言うだけの質問者、
前にも見たことがある…どのスレかは忘れたけど

まぁ、なんていうか、すごく、すごく…
…呆れます
0931デフォルトの名無しさん2016/03/31(木) 18:23:15.32ID:BZ6lcS+0
下らん
0932デフォルトの名無しさん2016/03/31(木) 18:24:12.09ID:ssKy5xLR
>>930
>偉そうに「正解」とか言うだけの質問者
>…呆れます
これには同意

>>926-927>>904,910ということは、>>911
>そういう回答が来る予想はしてたけどまさか本当になるとは
に触発されたようなのでこりゃ仕方ないかな (>>928は撤回、スマン)

ID:pWjpUb41はどうしようもない2chネラーだが、こいつがレスする前に>>911を書いているから
>>930のいう通り、ID:A5eNZi27も似たり寄ったりだな
0933デフォルトの名無しさん2016/03/31(木) 18:34:44.28ID:OULRWxoO
ちょっと見辛いのでVBAで書いてみて
0934デフォルトの名無しさん2016/03/31(木) 18:43:40.16ID:CJ4bVKwJ
>>924
ID:A5eNZi27
バカ発見
0935デフォルトの名無しさん2016/03/31(木) 20:19:21.05ID:YUafZk1C
正解ワロタ
クイズかな?
まあどうでもいいけど。
0936デフォルトの名無しさん2016/03/31(木) 20:27:12.77ID:ItJYSn/0
なんか基本が分かってないのに横柄な態度取って引っ込みがつかなくなり、
ギャグみたいな事言うやつが定期的に現れるな。

同一人物かどうか知らないが。
0937デフォルトの名無しさん2016/03/31(木) 20:43:41.29ID:SHkTxCKM
結局最初に言われてた通りに、引数追加だしな
0938デフォルトの名無しさん2016/03/31(木) 20:53:44.50ID:HmHgOVJX
ID:A5eNZi27←気持ち悪い
0939デフォルトの名無しさん2016/03/31(木) 21:11:41.79ID:ssKy5xLR
>>934,938
気持ち悪いのはお前らだ
0940デフォルトの名無しさん2016/03/31(木) 21:14:01.02ID:ScXuRFRf
>>914
抜ける時にクリアしとけばいいだけ
応用力 "0" かよ
0941デフォルトの名無しさん2016/03/31(木) 22:01:05.72ID:A5eNZi27
>>940
このコードを数か月後あるいは数年後くらいにひさしぶりに見た場合に
このクリアは一体なんのためにやっているのだろうか、と自問自答して無駄な時間を過ごすことになるので不可。
0942デフォルトの名無しさん2016/03/31(木) 22:21:59.94ID:5/bJTEuo
わかるようにコメント書けばすむべ…
0943デフォルトの名無しさん2016/03/31(木) 22:38:08.63ID:Tq9AKUqv
>>941
そう言う奴は訳のわからん引数で悩むから同じだろ w
0944デフォルトの名無しさん2016/03/31(木) 22:40:41.99ID:+v8smRGz
自分で「正解」とか言って解決したんじゃないのかよ
本格的に面倒臭い奴だなコイツ
0945デフォルトの名無しさん2016/03/31(木) 23:04:42.89ID:A5eNZi27
>>942
コメントに頼るのはやめたほうがいいよ。

なぜかと言うと、
もしコードを修正した場合そこの部分にコメントがあった場合に必ずコメントも修正しなければならず
そのコメントのほうの修正を忘れてしまうリスクがあるから。
もし忘れてしまった場合コメントがウソになってしまい、混乱してコード全体のすべてのコメントについてなにが本当でなにがウソか疑心暗鬼になる。
0946デフォルトの名無しさん2016/03/31(木) 23:19:59.63ID:VnTWApk1
>>945
ソースコードが正しいか疑心暗鬼にならないの?
0947デフォルトの名無しさん2016/03/31(木) 23:35:59.42ID:Tq9AKUqv
コメント全否定キターーーー
0948デフォルトの名無しさん2016/03/31(木) 23:42:43.40ID:5/bJTEuo
どんだけ壮大なしすてむなんだよw
もはやネタだな。
0949デフォルトの名無しさん2016/03/31(木) 23:54:16.11ID:Tq9AKUqv
しすてむが壮大って言うより
携わってる人のスキルがあまりにも...
って感じかと
0950デフォルトの名無しさん2016/03/31(木) 23:56:23.02ID:A5eNZi27
君たち本当に単純なコードのツールしか作ったことがないんだね。
0951デフォルトの名無しさん2016/03/31(木) 23:59:08.74ID:VnTWApk1
>>950
単純じゃないコードほどコメント必要じゃないか?
複数人で進めることもあるし

バージョン管理システムとか使うからコードとコメントの非同期とかも判るし
0952デフォルトの名無しさん2016/03/31(木) 23:59:11.31ID:BZ6lcS+0
元の問題を忘れた
0953デフォルトの名無しさん2016/04/01(金) 00:01:59.77ID:X9A67GyV
またC++か
0954デフォルトの名無しさん2016/04/01(金) 00:13:33.21ID:/ahH6pAH
混乱
0955デフォルトの名無しさん2016/04/01(金) 00:28:39.43ID:objfS9dq
単純なコードのツール以外を作ってるような奴が
コメントのありがたみも解らないし
プロシジャの呼び出し元で処理を変えようなんて設計するのか

まあ結局は自分で思う事以外は認められないタイプなんだろうけど
だったら掲示板で質問とかやめときゃいいのにな
もはや壮大なネタとしか思えんな
0956デフォルトの名無しさん2016/04/01(金) 00:32:12.69ID:otLOlCKW
壮大なシステムなんでネタも壮大なんだということで
0957デフォルトの名無しさん2016/04/01(金) 01:40:15.03ID:SjT9nfv6
vbaで壮大なシステムとか組めるんですか?
0958デフォルトの名無しさん2016/04/01(金) 01:47:20.35ID:vf5GPZ8M
>>951
> バージョン管理システムとか使うから
VBA でどうやってる?
.bas とかをエクスポートしてやってたけど面倒で挫折しそう
0959デフォルトの名無しさん2016/04/01(金) 02:00:30.13ID:CW508Yj2
>>953
C++erが荒らす前はVB.Netのような
他言語やってるっぽい人が話してても全く荒れていないのに
ここまで周りの人の神経を逆撫で出来るのはある意味才能だよな

嫌われ者の才能なんてこのスレでは全く必要ないけどな
0960デフォルトの名無しさん2016/04/01(金) 02:07:09.88ID:4nPGRuN9
質問する場所がここしか見つからなかったので、
スレ違いかも知れませんが、知っていたら教えてください。
xmlファイルのひな型を作り、そこからスキーマファイルを作って
エクセルで管理する方法を見つけたのですが、行き詰まってしまいました。

エクセルとxml使ってデータ整理と使用をやろうと考えています。
例えば、商品A B Cに対してID Name Numberという子要素が必ず1つはあります。
しかし、Cには子要素のID Name Numberが2つずつで付いていたり、4つずつ付いていたり不定期で最低は1最高は5
不定期の子要素をCに綺麗に収めたいと考えています
0961デフォルトの名無しさん2016/04/01(金) 02:33:43.95ID:CW508Yj2
>>924
ちなみに俺なら関数名などで分岐をさせる処理なら引数に渡すのは関数名や分岐条件ではなく
条件分岐毎の処理に対するコールバック情報を引数に持たせるがな

何故省略可能な引数を追加することが
「そうすることによって既存の他のコードを一切修正することなく望むことができる。」と
「正解」とか斜め上視線で自信満々で言い切れるのか意味不明

とっとと自分の巣に帰れ
0962デフォルトの名無しさん2016/04/01(金) 02:44:55.22ID:vf5GPZ8M
悪いことは言わんから XML 使うなら VB.net か C# でやった方がいい
http://dobon.net/vb/dotnet/file/xmlserializer.html
0963デフォルトの名無しさん2016/04/01(金) 05:10:10.02ID:U11k/mIJ
>>960
結果としては管理する方法を見つけてないんじゃねーか
あと綺麗にって何?
0964デフォルトの名無しさん2016/04/01(金) 05:42:28.55ID:U11k/mIJ
>>958
エクスポートする関数を作ってるけど
0965デフォルトの名無しさん2016/04/01(金) 06:23:16.87ID:wuhWmzmB
今日のNGID:ID: ssKy5xLR
0966デフォルトの名無しさん2016/04/01(金) 07:15:24.11ID:/ahH6pAH
オレ昨日は ID:BZ6lcS+0なんだけとね・・・
0967デフォルトの名無しさん2016/04/01(金) 08:09:57.38ID:cIUJiKQr
>>965
そもそも ID: ssKy5xLR って誰だよ w
0968デフォルトの名無しさん2016/04/01(金) 08:13:16.31ID:B7A4ZaEe
俺だよ俺
0969デフォルトの名無しさん2016/04/01(金) 12:32:21.59ID:2VTiuO8B
じゃあお金振り込んどくから携帯番号晒してよ
0970デフォルトの名無しさん2016/04/01(金) 19:26:25.13ID:hr4pCajV
なかなかのスベり具合
0971デフォルトの名無しさん2016/04/01(金) 19:40:44.37ID:/ahH6pAH
3月32日とかになってないのか
0972デフォルトの名無しさん2016/04/01(金) 20:30:52.17ID:ZljdcUzp
௱3ຸ月ົ3അ2৵日ลもஸうೆ飽ஒいଢてძるW
0973デフォルトの名無しさん2016/04/01(金) 23:56:44.74ID:7FzX8frN
>>959
あれだろ
今日の xamarin for Visual Studio で
C++が対応されず死に絶えることが確定したから
荒れてるんだろ
0974デフォルトの名無しさん2016/04/02(土) 09:10:09.91ID:GN/uL4b1
こら
なんでもかんでもC++erのせいにするなw
>>966 で書いた通り今回は ID:BZ6lcS+0だからな
0975デフォルトの名無しさん2016/04/02(土) 09:45:40.47ID:EygFVZgc
荒らしてるやつも対峙して荒らす片棒を担いでるやつもC++erかよ
最低だな
0976デフォルトの名無しさん2016/04/02(土) 10:37:11.62ID:GN/uL4b1
もう解決したからいいんだよw
0977デフォルトの名無しさん2016/04/02(土) 11:46:57.62ID:4vUR39xe
C++erがやってきて荒らす限り何一つ解決してないわけだが
0978デフォルトの名無しさん2016/04/02(土) 11:54:07.75ID:+Ndb7soQ
というかマシン語が分からないやつを何かの言語に精通した人間であるかのように呼称するのをやめろ。
0979デフォルトの名無しさん2016/04/02(土) 11:58:40.87ID:GN/uL4b1
>>977
クラス内限定でPrivateメソッドを呼ぶ方向でいくつかアイデアが出て解決してるよ。
問題点自体をわかってない連中が騒いでいただけで、むしろそいつらこそが荒らしだった。
0980デフォルトの名無しさん2016/04/02(土) 12:12:17.12ID:4vUR39xe
問題が違っているな
C++erが度々荒らしに来ていることが問題になっているという自覚がないんだな
0981デフォルトの名無しさん2016/04/02(土) 12:21:29.04ID:KxNKncUC
>>979
C++erってのはもっと昔に出てたやつだ。お前こそ成り済ましのJavaerだろ?
0982デフォルトの名無しさん2016/04/02(土) 12:53:12.41ID:4vUR39xe
>>981
>>804

以前のもC++erだったようだが?

俺はjavaはよく知らないが戻り値を参照で返せるのか?

以前のも「C++なら」って連呼してたぞそいつ

いもしないザバーに罪をなすりつけるって
C++erって汚い ほんっと汚い
0983デフォルトの名無しさん2016/04/02(土) 13:27:35.20ID:KxNKncUC
>>982
以前のがC++erで参照うんぬんの話をしてたやつさ。
>>979はPrivate荒らし
0984デフォルトの名無しさん2016/04/02(土) 13:43:22.64ID:GN/uL4b1
>>980
0985デフォルトの名無しさん2016/04/02(土) 13:43:23.32ID:4vUR39xe
>>983
それはC++erどころか
同一人物だってよ
0986デフォルトの名無しさん2016/04/02(土) 18:14:56.28ID:mScz+IyK
素数を1から1セルに1つずつ無限に並べ続けるVBAコードはありますか?
0987デフォルトの名無しさん2016/04/02(土) 18:40:02.75ID:+Ndb7soQ
j=1
Do
i=i+1
if i = Columns.count then j= j+1:i=1
Cells(i,j).Value = "素数"
Loop
0988デフォルトの名無しさん2016/04/02(土) 18:48:23.36ID:tgAORIfk
無限じゃないからだだスベり
0989デフォルトの名無しさん2016/04/02(土) 19:46:56.56ID:sGfFvhYb
activesheet.cells="素数"
0990デフォルトの名無しさん2016/04/02(土) 20:16:47.02ID:J8WwcBeU
そもそも素数を並べたいなら1から始めちゃいかんのではないか
0991デフォルトの名無しさん2016/04/02(土) 21:21:12.07ID:tgAORIfk
素数じゃなくてもいいから無限に出力するコードぐらい書いてみろよ烏合の衆ども
0992デフォルトの名無しさん2016/04/02(土) 21:37:57.48ID:+Ndb7soQ
まず無限の定義が必要だな。
0993デフォルトの名無しさん2016/04/02(土) 21:52:06.77ID:tgAORIfk
>>992
それスベり芸のつもりか?誰も盛り上げてくれんぞ
0994デフォルトの名無しさん2016/04/02(土) 21:54:58.37ID:nCRmOOwG
まず永遠に動作するハードと無限のリソース用意してくれ
0995デフォルトの名無しさん2016/04/02(土) 21:59:32.57ID:tgAORIfk
>>994
ハードがリソースじゃないと思ってる時点でスベりまくり、残念
0996デフォルトの名無しさん2016/04/02(土) 23:28:22.73ID:sCf2jPzr
0997デフォルトの名無しさん2016/04/02(土) 23:39:39.12ID:pzIJ0TE9
0998デフォルトの名無しさん2016/04/02(土) 23:57:21.28ID:GBkG0qug
0999デフォルトの名無しさん2016/04/03(日) 00:07:43.20ID:OcsyD6fv
1000デフォルトの名無しさん2016/04/03(日) 00:32:37.19ID:MwoPZf8b
素数を表示する式は?
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 43日 21時間 42分 53秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。