Excel VBA 質問スレ Part49©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part48 http://mevius.2ch.net/test/read.cgi/tech/1494890685/ ※関連スレ VBAなんでも質問スレ Part2 http://mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 http://mevius.2ch.net/test/read.cgi/tech/1328536426/ Excel総合相談所 126 https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured >>507 いや、vbaがクソ言語なのは避けようのない事実だろ C♯erがわざわざ新しく覚える時間が無駄というのは分かるよ オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし VBAをクソクソ言っている人たちはどういう立場なんだろうな。 クソだと思うなら近づかなければいいのに。 なんか他の言語でもメインで使い始めた途端にクソクソ言いそう。 作ったものを他人と共有しようとすると限界が低い。でも自分一人ツールと割り切れば相当なことができる。 Officeソフトにそれ以上求めてもしょうがないでしょ。 VBAは手軽さを重視してるんだから、高度な機能がないって意見は的外れなんだよ >>529 ん? アマチュアの人かな? お仕事ならクソだろうが使わざる得ない状況なんていくらでもあると思うが >>532 VBA言語をクソって言っちゃうくらいなのにVBAでお仕事取っちゃうの? もう少し仕事は選んだ方がいいんじゃないか。 >>526 うん、そういうこと。 ExcelマクロをC#で書くような人は、このスレの想定ユーザーからはかけ離れてるよね、ってこと。 クソだけどofficeのマクロ言語はこれしかないから仕方なく使うしか無いだろ プログラム言語としては時代遅れの化石なのはさすがに共通認識だと思ってたわ 現状くそなのもそうだし、これから先進化することも決してないこともクソ あと、手軽さと高度な機能は別に共存できるでしょ >>536 それは別にかけ離れてはいないだろ Macだとかプロのプログラマはかけ離れている プログラマとしてって言いだしたのって(オッペケ Sr1b-QbI6)だな 自演までして何がやりたいんだか・・・ >>527 > オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし 俺は逆だと思うよ オブジェクト指向をよく知ってたほうが、VBAを使いこなせる ・クラスモジュールを使いこなす ・いわゆる「インタフェース継承」を使いこなす ・WithEventsを使いこなす 大抵の奴は「クラスモジュールっていつ使うんですか」レベルだから >>540 俺の言いたいことを一ミリも汲んでくれてないなw そりゃオブジェクト指向的なプログラミングを知ってれば非オブジェクト指向言語でも構造的に自然と書くようになる それとこれとは別の話 機能がないからわざわざ自分で作らにゃいかんから不便だって話をしてる この手の下らんやり取りはこれまでもあったし、これからもウンザリするほど続くんだろうなぁ┐(´д`)┌ヤレヤレ >>539 みたいに、自演自演て騒ぐ奴をしばしば見かけるけど、彼は何がしたいの? つか、そもそもここは自演ができないスレなんだよね? こういうのはスルーしたほうがよいのでしょうか。 >>541 オブジェクト指向と機能は別の概念だけどな 機能は言語がなんであっても追加出来るだろうし オブジェクト指向は言語に関する概念だから >>541 オブジェクト指向の一切を封じられてるから使いづらいというのなら、それはそうでもないってことさ 機能が足りないというんなら、先人が作ったライブラリでも探せば? https://github.com/rubberduck203/VBEX とか >>540 自作クラスってどういう時に使うの? excelが思いっきりオブジェクトだから、それに対する手続き的な操作しかしないわ >>548 状態を持ったモノを扱いたいときじゃね? 状態を持たないんだったら関数の組み合わせで表現するのは簡単だ。 >>534 言語で仕事選べるとか無職の発送は素晴らしいな w >>549 状態を持つ⇒オブジェクトを使う 対偶は オブジェクトを使わない⇒状態を持たない 対偶は必ず真とはいえなくない? >>548 ログクラスとか作ってたな 書き込むシートと書き込む行を別々に管理するのは嫌だったから でも継承もできないしコンストラクタの引数も持てない状況ではあまり使いやすくならないし結局クラスはほとんど使わない そもそも俺がずっと保守するわけにもいかんから >>547 オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから、 言語によってオブジェクト指向が決まるわけではないし、言語に対する概念というと違うと思うなぁ。 >>550 募集要項に何の言語が出来るかとか普通書いてないか? Javaで募集かけたけどC#での開発がメインですみたいなカオスな職場もあんまりないだろ。 >>544 オブジェクト指向をサポートしてるかって話だよ なんとなく分かるべ >>546 ことさ、じゃなくてさ 俺はそういうところがクソだと言ってるの クソはクソでも使わなきゃいから使うだけで ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん >>552 ログはfunctionだなぁ コンストラクタ使えないと、わざわざNewしてクラス無いメソッド呼び出してって二度手間じゃね。 functionならいつでもどこでも一行で済む >>551 ⇒(ならば)とは言ってないけどな まあ、オブジェクトを使わない⇒状態を持たせづらい(グローバル変数を使うはめになる) あくまでVBAでの話だよ >>549 例えば、具体的にどういう時に使うの? 状態って言っても初期値とかExcelから拾ってくるから、それをわざわざclassにほーり込むのもなー >>553 オブジェクト指向言語は オブジェクト指向設計したものを そのまま実装し易い言語じゃないかな 言語の概念でもあると思うけどな オブジェクト指向言語じゃなくても実装できるのは確かだけど それならVBAでもオブジェクト指向設計を実装できるんじゃないかな >>557 初期値より途中の経緯を記憶しておかないと次の計算ができないものとか? 「ワークシートに書き出す」じゃ再利用性に欠ける >>559 だから具体的にどんなことをするんだよw ゲームとかはナシでね ちと思いつかない >>556 グローバル変数を使わなくても状態を表現できるんじゃね? 例えば再帰関数みたいに状態を引数にするとか >>553 > オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから そんなことを言い出したらアセンブリ言語でもオブジェクト指向は可能だよ そういう極端な話をしたい訳じゃないんだと思うよ > >>550 > 募集要項に何の言語が出来るかとか普通書いてないか? ああ、そういう働き方してるひとなのね もっとでっかい案件レベルのつもりだったから話が噛み合わないのも無理ないな >>555 書き込み行はどうやって覚えてるの? 複数のログを扱うとか面倒じゃね? >>558 > それならVBAでもオブジェクト指向設計を実装できるんじゃないかな 関数ポインタがないから継承とか無理じゃね? 状態を持つ必要がある入出力関係が 独立に多数ある場合は クラスを使うと比較的実装が簡単になるのかな? >>563 ログはlogシート一つ、3列 時間 / タイプ / 内容 7/26 20:00 log 作業開始 7/26 20:05 success 作業成功 7/26 20:07 error err.discriptionの内容 7/26 20:10 log 作業終了 で、書き込む時に毎回A列の最終行を取得し、そこに記録してる 覚える必要はないと思う 表の検索とかsqlでやる人もいるんだろうけど自分としてはクラスにしちゃうのがしっくりくるわ 配列の操作もクラスにしてると楽 あと、似たような処理で操作する対象が違うメソッドなんかは同じ名前にしても問題ないところとかも地味に便利だよ 関数だと命名に困ることがよくある >>560 さあ?いろいろあるでしょ 数値を放り込むとその度に回数をカウントアップし、最大値・最小値、合計、時刻を記録する、とか。 これくらいだったらワークシートでもできるけど、そういう対象が数多くなるとオブジェクト配列でやりたくなる。 どのワークシートのどこに?とか考える必要なくなるしエクセル以外のOfficeでも使えるし。 >>564 一般的な形では難しいかもしれないけど サブクラスに相当する関数から スーパークラスに相当する関数を呼べばいいんじゃね? 逆にスーパークラスに相当する関数に スイッチみたいな引数を付けて サブクラスに相当する関数に分岐するとか >>567 SQLを使うのって速度的な理由。 自作クラスでSQL以上のスピードが出るなら、 みんなそうするわ。 >>558 VBAで出来ないと思っているならオブジェクト指向を何か勘違いしているからオブジェクト指向設計の本を読むといいよ。 他の言語みたいな書き方が出来ないだけで、VBAでもオブジェクト指向プログラミングは普通に出来るから。 >>570 まあ、あんまり大きなデータは扱わんからな 別に検索する形式が決まってるなら内部的にsqlで値抜き出してもいいわけだし データの塊をオブジェクトとして扱っちゃったほうが何かまとまり感あってしっくり来るって感じかな >>571 できるできないの話じゃないんだって あとオーバーライドはちょっと厳しくないか どうやって実装する? >>564 AddressOf あるし使おうと思えば使える >>573 自身のメンバとして基底クラスを宣言して、基底クラスに自身を登録して、 基底クラスのメソッドを実行すると基底クラス側で自身の特定のメソッドが呼ばれるとかかな。 >>574 アドレス取るのはいいけどどうやって使うつもり? >>511 officeも何もなくてもc#書けるけど。 コンパイラ初めからあるから。 vbaでオブジェクト指向とか中級者がやることだな。 初心者よりタチ悪いこともある。 >>571 VBAと言う言語にクラスとかオブジェクト指向の概念が入っている つまりオブジェクト指向の概念は言語にもつながる と言う主張 一方でオブジェクト指向は設計にのみ関わる概念と言う主張もある オブジェクト指向の概念を取り入れた言語でオブジェクト指向設計したものを実現するのと オブジェクト指向の概念がない言語で実現するのでは 生産性とかに差が生じるだろう >>581 上級者はvbaは大人しく手続き型的にやるよ。 オブジェクト指向しようとして、これできないかなーあれできないかなーとか悩むだけ無駄。 >>584 各シートの統計情報を取りたい時はどうする? 例えば、セルを更新した回数、最大値、最小値、平均値 を各シート毎に知りたい時 後から分散とか標準偏差とかも知りたくなったらどうする? Youtuberヒカルが月収を明らかに!!おはよう朝日です出演 https://www.youtube.com/watch?v=RLZGrqQnnZc 第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ! https://www.youtube.com/watch?v=asF2wQ2xhjY& ;t=61s ユーチューバーの儲けのカラクリを徹底検証! https://www.youtube.com/watch?v=FUSb4erJSXE& ;t=504s 【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開! https://www.youtube.com/watch?v=Y7DAQ0RKilM& ;t=326s 誰も言わないなら俺がYouTuberのギャラ相場を教えます https://www.youtube.com/watch?v=E4q-vaQh2EQ& ;t=118s YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法 https://www.youtube.com/watch?v=Fr0WXXZRMSQ 最高月収5000万円だとさ。年収じゃなくて「月収」な おまえらもyoutubeに動画投稿したほうがいい 顔出したくないならラファエルみたいに仮面かぶればいい 手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ >>587 クラスってオブジェクト指向じゃないの? 上級者的に手続き型でやらないの? >>582 > なぜ? > 逆にスーパークラスに相当する関数に > スイッチみたいな引数を付けて > サブクラスに相当する関数に分岐するとか サブクラスを増やす度にスーパークラスに手を入れるつもりなの? 真顔で言ってるなら単なるアホだろ w > で、どうするの? 無理じゃね? って書いてあるんだが... >>585 > 各シートの統計情報を取りたい時はどうする? 要件次第 > 例えば、セルを更新した回数、最大値、最小値、平均値 > を各シート毎に知りたい時 更新回数以外は全セルなめて計算することもあるしイベント毎に合計、最大、最小を更新していくのもあるだろうな > 後から分散とか標準偏差とかも知りたくなったらどうする? そういう機能を実装するだけ イベント以外はオブジェクト指向関係ないと思うぞ >>591 全セルなめるとか性能要件を満たせなくなる可能性が高いだろ >>594 それはその時に考えたほうが良いと思う 大体 > 例えば、セルを更新した回数、最大値、最小値、平均値 > を各シート毎に知りたい時 こんな状態がまずないw >>590 サブクラスからスーパークラスを呼ぶ方は? >>592 どこからコピペが出てきたのか意味不明 >>593-594 だから「要件次第」って書いてあるんだが 最初に一度はなめないといけないから一回しか呼ばれないと言う要件ならその方が効率的だし >>596 それになんの意味があるんだ? マジでオブジェクト指向の基礎からやり直した方がいいレベルだぞ >>589 そうだよ。 データ構造だけ定義するんだよ。 >>575 結局それだと要らんもんまで呼び出したり不便なんだよ やれんことはないけど不便 オーバーロードもやれんことはないけど実装がめんどくさい 使いたい場面は結構出てくると思うけどね インターフェースもなんかスマートじゃないし 【IT】10代のネット環境「スマホのみ」が7割、「PCのみ」は25%にとどまる [無断転載禁止]©2ch.net http://egg.2ch.net/test/read.cgi/bizplus/1500900491/ >>600 クラスモジュールがある以上、このスレの話題として守備範囲内 >>554 > ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん マッチだけでも十分OOできる それにWithEventsもあるしね https://github.com/rubberduck203/VBEX のソース読んだか?以外といろいろできるぞ >>603 これはあなたが作者さんなの? 興味深いが手っ取り早く知りたい VBEX /testから読めばいいのかな? >>604 > これはあなたが作者さんなの? いや、俺じゃないよ コードサンプルとして読んでみたらってこと あとこれとか https://github.com/jpimbert/VBAToolKit/tree/master/Source/VbaUnit OOの知識があって、いわゆる「インターフェース継承」を視野に入れれば、かなりのことができる さらに、WithEventsを使えば双方向データバインディングなんかも実装できる >>605 うーん、、、 日本語のないかな?(ボソッ >>603 いやだからさ 俺の言いたいこと伝わらないし理解する気無いよね こっちはマッチしか無いから仕方なくマッチ使ってんの 不満だからって努力を放棄してるわけじゃないからな? ただどう考えても手間だろ そんだけの話 >>610 君も俺の言いたいこと1ミリも理解しようとしてないから、お互い様だね >>597 意味がわからない? 学びなおした方が良いぞ >>612 > サブクラスに相当する関数から > スーパークラスに相当する関数を呼べばいいんじゃね? そこまで言うならなんの意味があるのか説明してみな だからさぁお前らは雑談したいだけだろ?スレ立ててそこでやれっつーの クソうぜぇ >>611 使い方によってはvbaだってoopできるよ!って言いたいんでしょ? >>615 さいしょから言ってるでしょ > オブジェクト指向にドップリしてたら使いにくいことこの上ないと思う なことないよ 使いたいときに便利な機能を自由につまみ食いできるのがいいライブラリだと思っているんだが、 オブジェクト指向のライブラリって少しおせっかいというか世界観を押し付けてくるところがある。 会員にならないと利用できないサービスみたいな感じ。 自分で作ったものを自分で利用する分には当然問題ないんだけどね。 VBAの言語機能の弱さを考えると、クラス間の関連のある体系的な使い方を実現するのは厳しいだろう。 >>616 俺は工夫を強いられてる時点でうんちだと言っている 以上です 某サイトを参考にメールを一括作成するVBAを書いています。 createitemfromtemplateの行で「実行時エラー13 型が一致しません」というエラーが出ます。 どうやらcreateitemfromtemplateがうまく機能していないようなのですが、解決方法を教えていただけませんでしょうか。 よろしくお願いいたします。 ※「Microsoft Outlook 14.0 Object Library」の参照設定はONになっています。 ----------------------------------- Sub main() Dim OL As New Outlook.Application Dim M As MailItem Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row For i = 2 To MaxRow Set M = OL.createitemfromtemplate("D:\本文.msg") M.To = Cells(i, 列.件名).Value M.Subject = Cells(i, 列.件名).Value M.Attachments.Add "D:\" & Cells(i, 列.添付ファイル).Value M.HTMLBody = Replace(M.HTMLBody, "●●", Cells(i, 列.氏名).Value) M.SaveAs "D:\" & Cells(i, 列.企業名).Value & "_" & Cells(i, 列.氏名).Value & ".msg" Next End Sub ----------------------------------- >>620 msdnのリファレンスをみると Outlookテンプレート(.oft)を指定しろって書いてあるので 怒られているとおり、型がちがうのでしょう。 CreateItemメソッドを使えばいいんじゃないでしょうか。 オブジェクト指向がどうこうって語りたいなら オブジェクト指向 って言葉と オブジェクト指向言語 って言葉をちゃんと区別して発言して下さい >>621 返信ありがとうございます!! すみません、CreateItemでも変わらずエラーでした・・。 ちなみに下記のように.oftを指定しても同じでした。 これは本当に不思議です・・・。 --------------------------------------- Sub test03() Dim OL As New Outlook.Application Dim M As MailItem Set M = OL.CreateItemFromTemplate("D:\本文.oft") M.To = "aaaa@bbb.co.jp" M.SaveAs "D:\test03.msg" End Sub --------------------------------------- 関西のお笑いと関西のお笑い芸人も区別して語るべきなのか? 俺予想だと、2023年くらいに.NETと統合されるので、大丈夫じゃないの。 >>623 Sub test() Dim ol As New Outlook.Application Dim mi As MailItem Set mi = ol.CreateItem(olMailItem) mi.Display End Sub この最小構成でメール編集画面がでるかお試しを。 出なかったら参照設定が変なのかも。 Excelのバージョンが変わると勝手に参照設定のバージョンも 変わるという罠に引っかかったことがあるので。 実行時バインディングでやってみると言う手もあり。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる