トップページtech
1001コメント350KB

Excel VBA 質問スレ Part32

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/07(月) 22:19:55.86
ExcelのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Applications』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

前スレ:Excel VBA 質問スレ Part31
http://toro.2ch.net/test/read.cgi/tech/1376371376/

関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0421デフォルトの名無しさん2014/01/11(土) 04:44:36.37
あまりよく知らないけど、
Sleepは、自主的にCPUの実行権を放棄して、
他のプロセスに、CPUのタイムスライスを与える

DoEventsはイベントキューから、
イベントをとって処理する?
0422デフォルトの名無しさん2014/01/11(土) 07:17:37.53
>>416
いちおうマジレスしとくけど
Sleep使うとき
 スレッドをしばらく停止しておきたいとき
DoEvents使うとき
 溜まってるメッセージキューを処理したいとき

まあ出来れば二度と来ないでください
0423低脳2014/01/11(土) 11:19:55.48
>>422
そのスレッドとかメッセージキューとは、どういう概念ですか?
0424デフォルトの名無しさん2014/01/11(土) 12:08:58.66
それはもうVBAじゃ無いからスレチになるのと多分理解出来ないよ
スレッドはプロセス内部で実行単位をさらに分割したもの
VBAなら1プロセス1スレッド
1CPUが割り当てられ4コアなら25%の力を引き出せる
他言語で1プロセスnスレッドが可能なものもある
やはり1スレッドに1CPUの割り当てとなるが4スレッド使えば4コアを100%使い切れる

メッセージはWindowsのGUIの仕組み
キーボード、マウスクリックその他イベントのトリガーは全てGUI部品に対するメッセージで実現されている
めんどくさいやめた
0425デフォルトの名無しさん2014/01/11(土) 12:50:23.25
Sleepはマルチスレッドを活用して処理を構築するときに必要。中級者でもほとんど未達。学ぶ気があるならそこからぐぐれ

DoEventsはユーザーの入力待ちに使う。他のアプリと連携するときに使うこともある
ある意味、関数内で隠しのアプリケーションを一つ立ち上げるのに近いので
使い方よりも内部を理解して注意点を把握することが大事
キーワードはイベントループ、メッセージポンプ、メッセージループ(呼び方はいろいろ)

もっと簡単に言うと学ぶ気のない奴は去れ
0426デフォルトの名無しさん2014/01/11(土) 12:58:28.43
どうせまた涼しい顔して低レベルなググれば済む話で質問してくるぞアイツは

低能で厚顔無恥はスルーだろjk
0427デフォルトの名無しさん2014/01/11(土) 13:14:53.49
>>426
お前はググらなければわからないってだけじゃ・・・
0428デフォルトの名無しさん2014/01/11(土) 15:15:33.46
オブジェクト変数で別ブックのセルを代入しておいたあと
その別ブックを閉じるとその変数を参照できません。

これを防ぐにはどうすればいいのでしょうか?
0429デフォルトの名無しさん2014/01/11(土) 15:39:13.08
>>428
オブジェクトの場合はセルの場所が記憶されるだけなのでブックを閉じるとセルの中身は見えなくなる
オブジェクトじゃない変数にセルの中身(値)を記憶しておけばいい
0430デフォルトの名無しさん2014/01/11(土) 20:10:43.64
自作関数で、帰り値が2つあるものを設計中ですが
その方法とは?
0431デフォルトの名無しさん2014/01/11(土) 20:12:55.39
>>430
設計書見せて
0432デフォルトの名無しさん2014/01/11(土) 20:43:43.23
複数の戻り値が欲しければ、普通に参照渡しで値が戻ってくるようにするとか
構造体やクラスのように複数の子要素をもつ型を返すようにするのが基本じゃね?

まぁ他にも配列や連想配列を返すとか、グローバル変数を介するとか
いくらでも方法はあるけどね
0433デフォルトの名無しさん2014/01/11(土) 22:05:29.03
存在しない数値のみを抽出する方法?

1〜10の縦並びの表で、調査結果が飛び飛びに得られ、
データが得られなかった番号のみを抽出してそれのみの
新たな表を作成するVBAプログラムを作りたいのですが、

表番号 調査項目
1  xx
2  xx
3  xx
4  xx


10  xx
  
2,3,5,7,10 の調査結果が得られ調査結果が得られた順に結果のみの新たな表が別のブックに作成される.

最初の表から未調査の1,4,6,8,9のみの表を作成しそれを元に再調査と言った流れです。

仮に10としてありますが実際の表は1000以上あり手で消すのは現実的ではありません
除外する方法を色々考えましたがすぐ出来そうで簡単にはできないようで行き詰まりました。
宜しくお願い致します。
0434デフォルトの名無しさん2014/01/11(土) 22:10:53.29
>>433
調査結果が得られたかどうかはどうやって判断するんだ?

つか、VBA使わんでも、その条件でフィルタかければ良いだけな気はするがな
0435デフォルトの名無しさん2014/01/11(土) 22:19:02.70
>>430
複数の戻り値っていうのが同じ方(例えば二つの数値とかだったら、
数値型の配列を返すとか。
04364332014/01/11(土) 22:19:05.56
>>434
結果が得られた順に別ブックへ結果を記載して保存される仕組みになっています。

(調査結果(別ブック))
表番号 調査項目 調査結果 
2 xx false xx
3 xx true xx
7 xx true xx
5 xx true xx
10 xx false xx

何気にこの状態から表番号を1〜10に補って並べ替えるのも方法が思いつきません、、
逆に1〜10から上の数値を間引く方法もわからない感じです、、
0437ピラフ2014/01/11(土) 22:25:15.62
          ____
        /      \
       /  ─    ─\
     /    (●) (●) \
     |       (__人__)    |
      \      ` ⌒´   ,/
      /         ::::i \
     /  /       ::::|_/
     \/          ::|
        |        ::::|  キュム
        i     \ ::::/ キュム
        \     |::/
          |\_//
          \_/
04384332014/01/11(土) 22:48:47.30
>>433
>>435
素人なりに1つだけ思いついた方法は
結果値の表番号を一つ一つサーチして該当する行を1行削除するを繰り返し
削除後にソートして寄せると完成しますが 
数百回処理を繰り返す必要がり力業っぽい
のでこのやり方は違うかなと思いました
0439デフォルトの名無しさん2014/01/11(土) 23:13:09.99
数百回くらいなら昨今のPCなら全然問題ないレベルでしょ
その程度の処理量を更に削る為に労力を使う方が、初心者らしい愚行だよ

力業でも0.2秒で終る処理を、0.1秒で終るようにするための模索に
何十分や何時間の時間を浪費するとか、バカバカしくてやってられん
04404332014/01/11(土) 23:33:47.37
>>439
1発で比較&間引きをしてくれる魔法のコードがあるかと思いましたが、無いようで、、 
ありがとうございました。
0441デフォルトの名無しさん2014/01/11(土) 23:34:47.28
今時は性能の高いパソコンを買ったり借りたりするほうが安いもんな
その時間で別の仕事したほうが効率いい

とはいえ、一定以上の効率をもったコードを常に書けるだけの能力を持っていたいとは思うね
そうすりゃパソコン借りる時間が減る=金まわりがよくなるからな
0442デフォルトの名無しさん2014/01/11(土) 23:38:38.28
俺もフィルタ機能で一発解決だと思うが
なぜダメなのかよくわからんな
0443ピラフ2014/01/11(土) 23:40:07.65
調査結果と表番号でソートしてカットアンドペーストでやっちゃえば現実的にもいけそうじゃない?
04444332014/01/12(日) 00:27:32.65
>>442 443
データーが欠落した状態で結果のみが別のブックへ書き出されている状態でしてフィルタがかけられない状態かと思います。
(フィルタ機能を完全熟知してないので間違っているかもしれませんが)
自分の知識不足ですみません 激しく堂々巡りをしているようですので本日は一旦落ちます。。
0445デフォルトの名無しさん2014/01/12(日) 00:51:33.87
1から1000までの連続した整数から
ランダムに存在する特定の数値をスマートに間引く方法 (2,3,5,7,10・・ こういう数を一括削除する)

うまい方法は無いでしょうか?
数時間考えましたが全く解決方法が見つからず吐きそうなのでもう寝ますw
0446デフォルトの名無しさん2014/01/12(日) 01:07:43.46
>>445
その数値が一定の法則に従っていない以上、順次検索して間引くしかないわけだが

間引く元シートは準備されてるのか?
だったらそこから結果のシート(ブック)参照して結果有るかないかチェックする列つくって
その列でフィルタすればVBAなんか使わなくてもいいぞ

まあVBAでやるなら>>438のやり方でいいんじゃね
0447デフォルトの名無しさん2014/01/12(日) 01:31:20.39
>>445
状況がよく分んないけど、
ADO使ってシートにそういうSQL
投げてやればいいんじゃないの?
0448デフォルトの名無しさん2014/01/12(日) 03:18:51.28
awkなどで、よくある処理だよ

列(フィールド)の区切りは、スペースかタブ?
すべての行の最初の列(表番号)だけを抜き出して、
ファイルAに保存する
(Excelの画面でもできる)

ファイルAをsortコマンドで、
数字でソートして、ファイルBに保存する
(Excelの画面でもできる)

(ここで表番号の重複を考えて、念のために、
ファイルBをuniqueコマンドで、
連続した重複行を除いて、ファイルCへ出力する
ファイルB、Cの行数を比較する
行数が異なっていたらエラー?)

ループ変数をインクリメントさせながら、
ファイルBを1行ずつ読んで、数字を突き合わせる
ファイルBに存在しない数字を、
ファイルDへ出力する
04494482014/01/12(日) 03:20:52.50
一方、ここからは、最初のファイルが、
表番号順に並んでいない時の処理です

最初のファイルから、1行ずつ、
最初の列(表番号)を抜き出して、
連想配列のキーとして、
その値に、2列目から改行までを代入する

ファイルBを1行ずつ読んで、
その数字をキーとして、
連想配列の値を取り出して、文字列を連結する

このように処理は、細かく単機能に分けると、
バグを減らせます
sort + uniqueも、よくあるパターン
04504482014/01/12(日) 03:33:07.53
>449 自己レス
Excelの画面で、
表番号でソートするだけで出来るわw
04514482014/01/12(日) 03:44:48.55
>>445
まず幾つかのランダムな数字をソートして、
ファイルAへ出力する
(Excelの画面でもできる)

ループ変数をインクリメントさせながら、
ファイルAを1行ずつ読んで、数字を突き合わせる
ファイルAに存在しない数字を、
ファイルBへ出力する
04524482014/01/12(日) 05:49:03.84
diffで差分を取る方法もある

まず幾つかのランダムな数字をソートして、
行区切りで、ファイルAへ出力する
(Excelの画面でもできる)

Excelの画面の、自動ナンバーで、
1-1,000の千行を代入し、ファイルBとして保存する

diffで、両者の差分を取る
0453ピラフ2014/01/13(月) 21:17:31.14
>>445
えと、数列の差を求める方法と、要素を削除する方法があって
それぞれこんな感じ。
http://uploda.cc/img/img52d3d869b7f67.png

これらを組み合わせるとできるはずよ。

コードはこんな感じで
https://friendpaste.com/1ooShGbBWBLAPVIitWTlDD?rev=303435326666
0454デフォルトの名無しさん2014/01/13(月) 21:24:07.27
コードってその人のクセが出るよね
全大文字化とかの表面的なところを隠しても
0455ピラフ2014/01/13(月) 21:45:43.48
>>453
完全に間違ってた、こっちで
https://friendpaste.com/1ooShGbBWBLAPVIitWTlDD

>>454
そういうのあるよね。ピラフはCAPICOMのサンプルコードを参考にしてる。
インデントは空白3文字で変数名はアッパーキャメルケース。
変数の宣言は使う直前。
0456デフォルトの名無しさん2014/01/13(月) 21:47:01.99
出来るだけ個性を出さないように変数を減らそうとして
with を使いまくったら個性的過ぎると怒られたことがある。
0457ピラフ2014/01/13(月) 21:49:50.33
>>456
ガハハ、ピラフガハハ。
Withブロックマスターを名乗ったら言いと思うよ。
0458デフォルトの名無しさん2014/01/15(水) 12:12:50.31
なぁ、ピラフ
桃白白しらない?
0459デフォルトの名無しさん2014/01/15(水) 13:02:26.08
知らないって答えるに決まってるだろ
その問に知ってるって答えるくらいなら、初めからコテ変えなんてしない



とかマジレスしてみる
まあ>>458も、その辺を把握している上でのツッコミなんだろうけどw
0460デフォルトの名無しさん2014/01/16(木) 02:24:37.89
With With の 中 With から 外 With を 使うにはどうすれば
0461デフォルトの名無しさん2014/01/16(木) 02:34:02.86
>>460
Withの使用を辞めることだ。
0462デフォルトの名無しさん2014/01/16(木) 02:34:59.47
むかしこのスレにいた、かなりExcelやVBAに詳しい固定の名前の人はどこ行った?
ちょっと性格は変だけどスキルはあったし丁寧に回答してた人。
0463デフォルトの名無しさん2014/01/16(木) 03:26:21.55
>>461
なるほど。勉強になります。ありがとうございます。
0464デフォルトの名無しさん2014/01/16(木) 09:11:14.50
>>462
たんすの前で何を着て出てくるか悩んでるよ
0465デフォルトの名無しさん2014/01/16(木) 09:47:10.65
>>462
何人か居るけど、誰のこと言ってるの?
0466デフォルトの名無しさん2014/01/16(木) 09:51:25.46
>>460
Parentプロパティ
0467デフォルトの名無しさん2014/01/16(木) 15:38:16.99
亀仙人のことじゃね
0468デフォルトの名無しさん2014/01/18(土) 15:56:54.23
ExcelVBAのコードから
あるフォルダにある画像ファイル(ファイル名は選択範囲のselectされたセルの中)をすべて縮小(たとえば70%)して上書き保存させるにはどうすればいいですか?
他のフリーソフトの助けを借りるのでもいいです。
0469デフォルトの名無しさん2014/01/18(土) 16:30:55.58
>>468
その処理の内、何処まで出来てて、どこが解らないの?

まさか、1から全部コード書いて差し出せとか言わないよね?
04704682014/01/18(土) 16:44:55.37
>>469
画像縮小だけがわかりません。
下が自作コードです。

=====================================
Sub Unko()
Dim C As Range
Const PATH As String = "C:\Manko"
For Each C In Selection
SizeSmall (PATH & "\" & C.Value)
Next C
End Sub

Sub SizeSmall(F As String)
■■■ここが分からないのです■■■
End Sub
=====================================
0471デフォルトの名無しさん2014/01/18(土) 17:02:29.21
>>470
つ ImageMagick

WinAPI使う方法とか、ActiveX導入する方法とか、Imageコントロール使う方法とかいろいろあるけど
とりあえずImageMagickで目的は果たせるから、それ以上を望むなら勝手に勉強してね
0472デフォルトの名無しさん2014/01/18(土) 17:03:29.95
>>471
バカじゃねw
04734702014/01/18(土) 17:13:43.13
>>471
ありがとうございます。
これですね。
http://ja.wikipedia.org/wiki/ImageMagick
素晴らしそうですね。

ところが質問です。
[Q1] WikiにVBAと書いてないけど大丈夫ですか?
[Q2] VBAのコードに書くにはどんな呪文を唱えればいいですか?
0474デフォルトの名無しさん2014/01/18(土) 17:16:26.19
ImageMagickはVBAで使えないよw
04754702014/01/18(土) 17:17:25.84
>>474
神に誓いますか?
0476デフォルトの名無しさん2014/01/18(土) 17:19:37.65
>>474
コマンドラインで使うのに、VBAも糞も無いだろw
0477デフォルトの名無しさん2014/01/18(土) 17:20:30.89
>>475
何をですか?
0478デフォルトの名無しさん2014/01/18(土) 17:20:33.50
>>476
糞は便器の中にありますよ
0479デフォルトの名無しさん2014/01/18(土) 17:21:40.19
>>476
誰がコマンドで使うと言いましたか?
ImageMagickはVBAで使えない
~~~~~~~~~~~~~~~~~~~~~~~~~~
0480デフォルトの名無しさん2014/01/18(土) 17:29:32.87
荒らしにかまうなの法則
0481デフォルトの名無しさん2014/01/18(土) 17:42:38.57
苦しい言い訳の荒らしなど放置の方向で
0482デフォルトの名無しさん2014/01/18(土) 17:46:54.09
今回「コマンドラインから利用できるソフト」の存在を知りましたが
世の中に出回ってるフリーソフトの何割くらいがこの「コマンドラインからの利用」に対応してますか?

「コマンドラインからの利用」ができればどうにかすればVBAでも使えるんだろ?使える気がする。だから可能性が広がる。
0483デフォルトの名無しさん2014/01/18(土) 18:23:38.44
有名なフリーソフトウェアであるHello World!だけでも数万種は公開されてるよ。
0484デフォルトの名無しさん2014/01/18(土) 23:22:26.46
VBAにファイルではなく画像として取り込めたよね
コピーして別アプリに張り付けるとかならやったことあるけど
プロパティでサイズってないのかな?
0485デフォルトの名無しさん2014/01/18(土) 23:23:46.33
ってまんこ画像かよ
0486デフォルトの名無しさん2014/01/18(土) 23:25:41.07
質問者も回答者もどっちもスベってるパターン最近多いよね
0487デフォルトの名無しさん2014/01/19(日) 00:19:07.25
そして、解ってないのに上から目線でツッコミ入れる滑稽な奴もねw
0488デフォルトの名無しさん2014/01/19(日) 07:42:05.86
>プロパティでサイズってないのかな?

Microsoft Shell Controls And Automation に参照チェックして出来る
というか以前自分のPCのフォルダに有る画像一覧のサイズを貼り付けるのを作ったことはあるけどね
0489デフォルトの名無しさん2014/01/19(日) 08:26:53.48
>>484
画像のサイズは基本的にヘッダに格納されてるから、バイナリ読めば解るし
StdPictureオブジェクトに格納すれば、Twips単位での取得は簡単にできるよ

でも、ファイル名とかは、ファイル名を書き換えるだけで意味があるけど
画像サイズは、ヘッダのサイズを書き換えても、画像データを変換しなければ
画像の実サイズとヘッダ上に記されたサイズ情報が不整合を起こすだけなので
サイズプロパティがあれば、サイズ変更が出来るってものじゃない
重要なのは「情報」の書き換えではなく「実体」の変換だからね
塩の入った容器のラベルを「砂糖」に貼り替えても、中身の入れ替えをしなかったら
中身は塩のままなのと同じ
0490デフォルトの名無しさん2014/01/19(日) 11:52:49.86
フォルダ下の画像ファイルじゃなくて
Excelワークシートに貼り付けられた画像ファイルの縮小をしたいんじゃないかと思うんだが
0491デフォルトの名無しさん2014/01/19(日) 23:10:35.11
VBAって、プロパティとメソッドがあるからオブジェクト指向なんだと思うけど
クラスモジュールを使うことはないの?
どの入門書でも標準モジュールしか扱ってない。
0492デフォルトの名無しさん2014/01/19(日) 23:36:56.50
入門書で扱ってなければ、もう少しレベルの高い本探そうとか思わんのかね
04934912014/01/19(日) 23:49:52.75
>>492
そんな本ありますか?
0494デフォルトの名無しさん2014/01/20(月) 00:16:34.66
ありますん
04954912014/01/20(月) 01:10:09.85
>>494
その書の名は?
0496デフォルトの名無しさん2014/01/20(月) 01:18:10.65
>>495
自分で検索もできないような人間にクラスが使えるとは思えないけど、ほれ
http://www.kinokuniya.co.jp/f/dsg-01-9784816336515
04974912014/01/20(月) 01:39:46.17
>>496
2003じゃないか。
売り切れじゃないか。
0498デフォルトの名無しさん2014/01/20(月) 02:04:59.15
>>497
国外追放レベルのバカだな

Excelのバージョンが変わってもクラスの使い方なんてほぼ同じだし、本屋はここ1軒だけじゃないし
世の中には図書館という便利な物がある

この程度のこといちいち教えなきゃわからんのか
おまえはプログラミングするな質問するなするな迷惑だ
04994912014/01/20(月) 02:23:26.65
>>498
もともとおかしいんだよ、きみの顔は。
http://blog-imgs-48.fc2.com/a/y/a/ayaushi/201303301847509b1.jpg
0500デフォルトの名無しさん2014/01/20(月) 07:17:48.73
反論につまってそういう幼稚なレッテル貼りに走るのって
自分の品位を貶めるだけの行為だって気付かないのかな?

まぁ>>498も口が悪いが
「確かにその通りだけど、国外追放レベルはヒドス・゚・(つД`)・゚・ 」
くらいの、余裕を持った返しが出来る大人になろうぜ
0501デフォルトの名無しさん2014/01/20(月) 07:22:07.74
>>491
まぁVBAでそんなに無理してまでクラスモジュールを使わなくてもコードは組めるってことだね。
本当にきちんとクラスについて勉強したいなら、JavaやC#を勉強した方がいい。
VB.Netですらデザインパターンを踏襲した様なきちんとした本は見たことが無い。
0502デフォルトの名無しさん2014/01/20(月) 08:19:32.85
>>491
継承とかコンストラクタに引数渡せないとかたいして便利じゃないから
あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
0503デフォルトの名無しさん2014/01/20(月) 08:43:55.01
便利じゃないと感じるのはスキルが低いからだろ

そりゃ昨今のメジャーな言語と比べて、相対的に便利かと言ったら便利じゃないけど
どの言語を使うかって話ではなく、VBAを使う上でクラスを活用するかどうかって話では
他言語と比べて便利かどうかという相対的な話ではなく、絶対的に便利かどうかであって
その観点で見れば、スキルさえあれば十分便利に活用できる
いろいろ不足はあってもどかしい部分も多いけど、使わないよりは使った方が遙かに便利という意味でね
0504デフォルトの名無しさん2014/01/20(月) 10:46:52.40
>>503
その例えで行くなら、VBAを使う上でクラス有りとクラス無しを比較して相対的にどうか、って考えなきゃ
0505デフォルトの名無しさん2014/01/20(月) 11:54:18.37
だからそういう話でしょ?
0506デフォルトの名無しさん2014/01/20(月) 14:18:53.69
>>502
インターフェイス継承はできるし、どうしても引数ありでオブジェクトを作りたいならFactoryメソッドを作ればいい。

> あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
機能毎にアドインにまとめればいいんじゃないかな。
0507デフォルトの名無しさん2014/01/20(月) 14:37:20.31
例えば、
http://www.objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/dp-ocp-2.html
の音符の例。

Note.cls:
Public Sub Play()
End Sub

Half.cls:
Implements Note
Private Sub Note_Play()
Debug.Print "play half"
End Sub

Quater.cls:
Implements Note
Private Sub Note_Play()
Debug.Print "play quater"
End Sub

(続く)
0508デフォルトの名無しさん2014/01/20(月) 14:38:35.12
(続き)
Staff.cls:
Private mNotes As New collection

Public Sub AddNote(ByRef aNote As Note)
mNotes.Add aNote
End Sub

Public Sub Play()
Dim aNote As Note
For Each aNote In mNotes
aNote.Play
Next
End Sub

Module1.bas:
Sub PlayStaff()
Dim myStaff As New Staff

myStaff.AddNote New Half
myStaff.AddNote New Quarter
myStaff.AddNote New Half

myStaff.Play
End Sub

という感じでVBAでも実現可能。
(Collectionが順番を保証しないというのは、今回は無視)
0509デフォルトの名無しさん2014/01/20(月) 14:53:56.46
ん?CollectionってAddした順で取り出せないの?
0510デフォルトの名無しさん2014/01/20(月) 15:09:55.04
>>509
基本的にはAddした順だけど、仕様としてそれは保証されてない
0511デフォルトの名無しさん2014/01/20(月) 22:32:00.44
VBAのcolletionって、Addするときに位置指定があるんだが
指定位置勝手に変わると話にならんわけだが、ホントに保障されてないのか?
0512デフォルトの名無しさん2014/01/20(月) 22:59:04.99
>>511
仕様見ればわかることを他人に聞くな
0513デフォルトの名無しさん2014/01/21(火) 00:04:41.49
>>491
Object指向言語というより
Object指向に片足突っ込んだ構造化言語かな。

どうもMicroSoftはこんな片足突っ込んだような状態が好きなのか、
.Netフレームワークも関数型言語に片足突っ込んだObject指向言語っぽいよね。

「Object指向は考え方」って人もいるだろうけど、VBAの場合は上のレスに有ったような
面倒なストラテジーパターンも、.Netではシュチュエーション次第でもっと簡単なテンプレートパターンで書けるしね。
0514デフォルトの名無しさん2014/01/21(火) 01:11:35.57
>>503
>>502 は別に他の言語と比較してる訳じゃないんだが...
まあ、使いたいなら使えばいいんじゃね?
スキル誇示したいお年頃みたいだし (w
0515デフォルトの名無しさん2014/01/21(火) 06:25:03.06
>>506
インターフェース継承って何?
このコードの内、何が何を継承してるの?
見た感じ、インターフェースを実装して
処理を移譲することで似たような効果をもたらしているだけにしか見えないんだけど。
0516デフォルトの名無しさん2014/01/21(火) 08:12:19.84
>>506
こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
0517デフォルトの名無しさん2014/01/21(火) 09:30:04.82
>>514=>>516
皆に否定されて悔しかったんだね...わかります (w
0518デフォルトの名無しさん2014/01/21(火) 10:10:47.90
>>502
こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
0519デフォルトの名無しさん2014/01/21(火) 10:25:24.40
>>515
用語等については異論もあるでしょうが、重要なのは>>507のリンク先のC++のポリモーフィズム同等のことがVBAでも実現できることです。
この範囲で実現できるものであれば、VBAでもクラスが活躍できます。

それから、言わずもがなですが、クラスを使うことによるカプセル化の恩恵も受けます。
このことは、xUnitと親和性が高いです。

それと、WithEventsを使ったExcelオブジェクトとのEventを介したやり取りも便利です。
0520デフォルトの名無しさん2014/01/21(火) 16:57:10.56
webページのあるURLの「ショートカットファイル」」をデスクトップに作るにはどういうコードを書けばいいですか?

INPUT: URL
OUTPUT: 「ショートカットファイル」 on デスクトップ

ファイル名はなんでもいいです。
■ このスレッドは過去ログ倉庫に格納されています