Пікірлер
@user-hn4rl9vl8m
@user-hn4rl9vl8m 5 күн бұрын
やっぱりよく分からない動画でした
@homefamily5400
@homefamily5400 26 күн бұрын
データを構造体の配列に読み込んで複数のシートのセルに振り分けるといのを最近作ったんですが、、 なるほど クラスモジュールにしておけば、その中でシートに書き込むというような処理にできて、メインのループがある標準モジュールがすっきりしたわけですね。
@user-bw1ip1vi1k
@user-bw1ip1vi1k 26 күн бұрын
VBA勉強してもうすぐ1年くらいになりそうですが、クラスはなるべく積極的に使うようにしています 自分がクラスモジュールを使う一番の理由は登録できるマクロを限定したいからですね 標準モジュールだとPrivateで宣言してないSubプロシージャは全てマクロとして登録できてしまうので、開発側としてはやってほしくないことをユーザ側でできてしまうことは個人的にまずいかなと思ってます この動画でいうところの「意識しておくべきことが減らせる」に該当しますね ユーザーフォームを介して実行したいマクロや、シートモジュールにコードを書きたい場合はクラスモジュールがどちゃくそ便利だと思ってます
@kaza9052
@kaza9052 26 күн бұрын
初めまして。 VBAでのクラスモジュールの必要性を説明するというのはむずかしいですよね。 きちんと学習している方であればVBAプログラミングのスタイルも  手続き型→構造型→オブジェクト指向といった感じで その技術的要望に従って変わっていくと思うのですよね。 単にエクセルシートにある数字を読み書きだけじゃなくて、 スピードを得たりデータ変形のために配列に格納するようになっていきます。 やがて配列だけでやるのは不便だからcollectionやハッシュを使うようにもなっていきます。 再利用性を高めたいとか拡張性を高めたいとかいろいろな要件に挑戦し続けると 様々な技術を習得せざるを得なくなっていってその先にクラスモジュールの便利さが待ってるような気がします。 逆に言うと現状に満足できているのであればクラスモジュールのことなんて考える必要性さえないかもしれませんね
@user-dt5ww5tf7i
@user-dt5ww5tf7i Ай бұрын
これは永遠の課題ですよね。 関数やメソッドは仰る通り、テストの観点からも見やすさの観点からも単一責任原則で作って行くのが基本ですが、更に突き詰めて行くと、近しい機能で分岐を少なくするため多態性を利用することになるのですが、残念ながらVBAのクラスでは継承が使えないので代わりに移譲を使ったり、またその租結合、密結合のことも考えなければなりません。 そもそも他の言語では良く言われるデザインパターンもある意味先人がテストのし易さを追い求めて考え出したかたちなので、まぁそれだけ奥が深いと言うことでしょう。 後、実作業では時間に追い立てられて中々リファクタリングしている時間が取れないと言うこともありますよね。 出来れば暇な時間がある内に基本的な部品として使える関数やメソッドを格納したモジュールを作っておくと良いかもですね。
@vba-wonder
@vba-wonder Ай бұрын
コメントありがとうございます! ちょっと前にt_wadaさんという方のテスト動画を見たのですが理論的で面白いですね。 「"失敗するテストを先に書く"というのはこういうことか」と プログラマとしての知見を増やしてくれました。 実際問題、VBAをやっている方で コメ主さんのように テスト → エラー → リファクタリングという流れでやっておられる方は私の知る限り皆無です^^; VBAだけやっている開発者だとなかなか到達できない地点に思っています。。。 機能一覧ユーティリティをつくるのというのは、 私はアドインでやっているのですが、 それが通常のブックであれ、クラスモジュールであれ、なんであれ その機能のコピー(再利用)時の使いまわしやすさが気になってくると おっしゃるようにプロシージャの形を意識するようになるのではないか とも思っています。 そこで結合度、凝集度を意識するようになるというのも、テストしやすいプロシージャにつながると思うので 効果ありそうです(^^) 引き続きましてご視聴よろしくお願い致します!
@user-fy4rg4oz7r
@user-fy4rg4oz7r Ай бұрын
いつも勉強させていただいてます! 1つ質問なのですが、プロシージャを分けていくと、どうしても引数を使うことが多いです。 その場合だと受け取る側のプロシージャのテストをするには渡す側のプロシージャから動作させないといけないと思います。 これだと結局、テストしやすくするためにプロシージャを分ける意味がありません。 何か引数有のプロシージャのテストをやりやすくする方法などありましたらご教示いただければ幸いです。
@vba-wonder
@vba-wonder Ай бұрын
コメントありがとうございます! また、いつもご視聴いただきありがとうございます!! コメ主さんのご意見は 「プロシージャ間を引数でまたぐ処理のため、プロシージャ単独ではテストできない」 ということかと思います。 もしそうですと、これは確かにやっかいですね、、 これについては万能薬は無いような気もしますが、、、 基本的にはRange型ではない文字列型、数値型といった変数を引数とし、 その引数で処理をさせるような形を取ると 回避できることが多いように思います。 具体的には実装編(明日配信予定です)でいくつか説明をしているので、 まずはそちらでご確認をと思います(^^) 引き続きましてご視聴よろしくお願い致します!
@user-fy4rg4oz7r
@user-fy4rg4oz7r Ай бұрын
@@vba-wonder 返信いただきありがとうございます! やっぱり「こうすればいい」という明確な解決策はないんですね~ 実装編の動画も楽しみにしております!
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
えらくかいかぶられていて恐縮ですが、私は他言語をやってはいるものの、その辺にいるおっさんですよw 人に教えるなんて大そうなレベルではないので、恐らくその師匠という方には足下にも及ばないのではないでしょうか。
@vba-wonder
@vba-wonder Ай бұрын
返信遅れましてすみません、、 いえ、コメ主さんは多分相当できる方とお見受けしました(^^) 私の知る限り、VBAではクラスモジュールを使った案件は皆無です。 完全オブジェクト指向の言語でやってこられ、 かつデザイパターンの領域まで踏み込んだ ハイグレードの経験者しか分からないような コメントかと思っております。 (VBAだけでは分かり得ない領域ですね) ※師匠がそんな感じでしたので^^; 私もより多くの方により多くのことをお伝えできるよう 日々アップデート頑張りたく思っています。 引き続きましてご視聴お願いいたします!
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
これはもう二行で書くの一択ですね。 ありがとうございます! ところでVBAには非常に特異的な書き方で、最初に変数宣言すらしないWith Newというのが使えるようです。挙動は確認していませんが、調べてみるのも面白いかもしれませんね。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! はい、これは2行のほうが無難だと思います。 With Newは私も何回か見かけたことがあります。 私が使うならば、一回使用限定のとき使うとかですかね。 確認してみて面白い内容でしたら動画で報告したいと思います。 色々コメントありがとうございます。 引き続きましてご視聴よろしくお願い致します!
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
んー、 仰りたいことは解るのですが、これは使いどころによって分けて使うものですね。 スコープを設定したい場合はクラス、全体を通して使う場合は標準モジュールとすると良いと思いますよ。 もちろん、変数を直接Publicで使うのはマズいと思います。どこで使われていてどこで変な値が設定されるか発見し難いですからね。 なので、標準モジュールでも変数を直接Publicにするのではなく、プロパティを作成してそれを介在してやり取りをするようにすれば、そこにBreakPointを設定して実行すれば、おかしな値が入ったところでトレースして行けばどのモジュールのどの関数またはメソッドで呼び出されて変な値が設定されたか分かると思います。
@vba-wonder
@vba-wonder 2 ай бұрын
こちらも、コメントありがとうございます!(^^) 最近ではPublicが必要となるケース自体が「コードの匂い」として感じています^^; とはいえ、Constでプロジェクト全体で使うものはPublicで定義していますが、 Public自体を使わないという点はできるだけ徹してやるようにしています。 プロシージャの戻り値として使えれば、 おっしゃるように値を直接いれるのではなく、データの出入り口を一箇所にでき、 かつそのプロシージャの中で値がチェックできる効果もあって尚良しですね。 ありがとうございます。 引き続きましてご視聴、ご意見よろしくお願い致します!
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
なるほど。 クラス内変数を直接Publicで持つというのは、仰る通りカプセル化の問題ですね。 その内やっていれば出てくるかと思いますが、その気になればクラスのプロパティだろうがメソッドだろうがPrivateでも外部から呼び出す手法もあります。 それも使いどころになると思いますが、ReadOnlyではない場合、結果は同じなのに何故カプセル化が必要なのかという解がそれを使う状況になったときに初めて解るのではないかと思います。 ソースコードの簡素化は大体その認識で合っていると思います。ただ、他のObject指向言語では継承が使えたりするので、その辺のことを言っているのかも知れないですね。VBAの場合は単一責任の原則に沿って作っていれば特に気にしなくて良い部分ではないでしょうか。 最後のパフォーマンスについてですが、これは何のパフォーマンスによるかで変わってくると思われます。 処理のレスポンス的なものやコードの長さと言った意味では恐らく仰る通りでしょう。 ただ、開発における単体テストという意味では、クラスとポリモーフィズムというものをキチンと理解していれば、その分余計な分岐を減らすことにも繋がり、テストケースを減らすことにも繋がりますので、その上で開発のコストパフォーマンスが向上するということは言えるでしょうね。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! 非常に詳しい内容ありがとうございます。 Publicについては私自身痛い思いもしており、 基本できるだけ使わないということでやっています^^; (他の動画ではPublicでプロパティを使っている例もあり疑問に思っていた部分もあります) ※Privateを外部から呼び出す方法は知りませんでした。面白いですね。私も調べてみたいと思います。 ソースコードについては、実際のところ(本来ならばクラスでなくてもそうなのでしょうが) クラスにすると機能が分割化され、プロシージャが増加し、私の感覚ではむしろ時間のかかるものと思っております。 コメ主さんのように他言語の仕様には詳しくなく、 そういう視点で俯瞰できるのは羨ましいですね。。 「ポリモーフィズムで分岐を減らす」というのは、 このあたりは実務でも悩むところです。 (実際問題、むしろクラスは使ってくれるなという現場がほとんで実業務の経験値が乏しいのもありますが、、) 今回の処理に直接該当するかは分かりませんが、 個人的にはExcelにはシートがあり、 そこに記載した値を読み込むということである程度対処できることも有るため プログラム内部だけの処理に一任したくないという自分勝手な自分もいます。。 参考になるコメントありがとうございます。 引き続きご意見など(難しいすぎない程度で!!)書き込んでいただけると嬉しいです。
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
そうですね・・・ 例えばですが、ODBC接続でsqlserverに接続したり、SQLを実行して結果セット、VBAの場合だとRecordsetですかね、それを取得するクラスを作ったとします。 これには接続文字列やユーザーID、パスワード等の情報が必要だったりします。 まぁ、この辺の設定値はシートに書いておくとして、 OracleやAccsess、Excel、Csv用にも同様のクラスを作成したとします。 もちろん、各媒体によって設定する項目や値も違ってきますが、 そこは各クラスの処理内でそれぞれシートから読んで設定を行うことにして、インターフェースを介在して各クラスのインスタンスを設定すれば極論、分岐はどのクラスから生成するインスタンスを使うかの部分だけになる訳です。 デザインパターンで言うところのstrategy patternというやつですね。 これは本当に極論の話ですが、少なくとも何かの度に都度「これはこの媒体から読んできているから分岐してこっちの処理を走らせて・・・」という分岐は発生しなくなる訳です。 あ、そうそう、話は変わりますが上記で書いた通り、ExcelのシートやcsvファイルにもSQL投げることは可能です。もっとも、DBから離れれば離れるほど制約は受けますけどね。
@user-dt5ww5tf7i
@user-dt5ww5tf7i 2 ай бұрын
あー、この辺の説明難しそうですね。 恐らくクラスで作成したものは別インスタンスで使えるということ、構造体で作成したものは常に取得元が一箇所になる(Singleton的な・・・厳密には違いますけど)ということを説明したかったのかと思いました。 他言語ではクラスで作るとシリアル化の問題とかあって構造体(これもちょっとVBAとは違ったりしますが)に使い所があったりしますが、VBAでは標準モジュールにひとつクラスのインスタンスを抱える変数を用意しておけばよいので、クラスを理解してしまえばあまり構造体を使う機会はないのではないかと思います。 CollectionでもDictionaryでもValuePearの連想配列であれば、どのデータを使うかループしなくてもKeyですぐ取り出せますしね。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます。 ちなみにですが、コメ主さんは私がかつてお世話になった師匠でしょうか(笑)? コメントの内容から相当のスキルの高さと口調が非常に似ており、 お伺いしました。違っていたらすみません、、m(_ _)m 動画の内容では、 単純に見た目は似ているけど実は異なるよという点を 挙げたかったというのがあります。 用途という意味では、動画内で説明しているように 一般的な表をTypeで操作したいのかな、 という意味で「Type 配列」検索の意図を勘ぐりました。 それならばクラスのほうが良いかも、 ということを示したかったというのもあります。 おっしゃるようにクラスを覚えるとTypeの用途が より限定’(あるいは明確化)されてくるかと思います。 すぐに使えるので勝手が良いのですが、、 他の動画にもコメント頂きまして私も勉強になります。 ありがとうございます!引き続きアドバイスいただけると嬉しいです(^^)
@ryoyama9598
@ryoyama9598 2 ай бұрын
ツールを使い終わるまで保守が発生し続ける、まったくその通りですね。私もいくつか作っていますが、いつまで面倒を見ないといけないのか正直不安です。車内でマクロに長けた人もどんどん少なくなってきますし。そのすべてが覆いかぶさってきそうな感じがします。 「なるべくバグを生み出さない対策」としては、例で挙げていらした内容に同意です。それ以外では、10年前まではマクロでしかできなかったことが、エクセルのバージョンアップに伴いマクロを使わない方法でも対応可能になってきています。まだ2016使っていますという企業ではどうしようもありませんが、2019以降ですかね、取得と変換(PowerQuey)や進化したスピル、動的配列数式などエクセルが持つ機能をフル活用して解決していく必要もあるかと思います。おっしゃっているとおり、マクロは使いすぎないことが重要です。 私の場合、数年前に作ったマクロツールを365に進化したエクセルに応じて作り直したいと考えていますが、正直時間がない(もてない)ところです。例えば一か所を変更するものであっても全体の連携を確認した上で修正しなければならいですよね。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! 賛同いただけた内容もあったようで嬉しいです!! 良かれと思って気軽に作ったツールが 時間の経過とともに負の遺産になるとは 開発時点では、露程にも思わずで ^^; おっしゃるようにバージョンの進化によって 一般機能で使えるケースもでてきましたので 古いマクロの見直しをしたほうが良いケースもたくさんありそうですね。 ただ、私の場合、触るのさえ怖いツールが ゴロゴロしているのが正直なところです、、(^^) (最新版の機能にキャッチアップできていない私もいますが、、) 引き続きましてご視聴よろしくお願い致します!!
@ntnkymtts4731
@ntnkymtts4731 2 ай бұрын
ここまで明確に挙動の違いを示していただけるなんて感動です。 2行で書くか1行で書くか、そんな些細なことでも(些細なことだからこそ)自分のような初心者は気になって苦しんでいました。 大変助かりました。ありがとうございました。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! 参考にしていただいて嬉しいです!! 基本は2行でやるほうが無難だと思いますが、 気をつけるべきは、1つのマクロブック内で 1行でまとめているケースと、2行に分けているケースで混在させるとき それが明確に分かるような仕掛けにしておいたほうが良いかと思います。 ・1行でも処理に問題を与えない ・超短いプロシージャのときだけ ・超短いループ内のときだけ などコードを見た時、 「1行と2行の違いにすぐに気付ける」と 判断したときには私自身も混在させていることもあります^^; 引き続きましてご視聴よろしくお願い致します!!
@ntnkymtts4731
@ntnkymtts4731 2 ай бұрын
@@vba-wonder ご返信ありがとうございます。 初学者の自分は一行と二行で全く違うことをしていると思ってしまって、ChatGPTに訊いてもピンとこなくて困っていました。 クラスをインスタンス化したときに明示せずに配列を読み込ませたかったので、Initializeについても参考になりました。 これからも勉強させてもらいます。動画を楽しみにしております。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! もしも引数が必要であれば、 自前でInitializeもどきを作らねばならないのでちょっと面倒ですが 引数が必要なければInitializeはNewと同時に自動的に実行する仕組みなので 安心できる部分かもしれませんね(^^) (プログラマがクラスを使う時に「もどきを呼び出すことを」覚えておく必要がないので・・) これからもお役にたてられるような内容を配信してまいります!! ご視聴ありがとうございます。 そして、引き続きましてご視聴よろしくお願い致します!
@user-iz6pm3br3z
@user-iz6pm3br3z 2 ай бұрын
🙆🙆🙆🙆🙆🙆🙆🙆🙆🙆
@RI-je6gk
@RI-je6gk 2 ай бұрын
かなり勉強になる内容でした。 少し質問があります。 データ移行用のEXCELファイルを、 元々別で用意するのはどうなんでしょう?? EXCELファイル名の語尾に、 「ver2.0」すれば同時に開けますし。 「起動すれば全てのシートを複製する」 とすれば、マクロ以外は解決できると考えまして。
@vba-wonder
@vba-wonder 2 ай бұрын
コメントありがとうございます! 勉強になったとのことで非常に嬉しく思います。 コメ主さんのおっしゃる方法も一つの良い選択肢ですね。 (逆に動画で提示した方法だと移行完了後も間違えてクリックなどされてしまう可能性もあるかもしれんね・・) 加えて考慮したいのは、シートのコピーに関するいくつかの挑戦ですね^^; 例えば、コピー先にコピー元と同名のシートが既に有る場合どうするか、 あるいはコピー元にある「名前の定義」がコピー先にもある場合などです。 これらの点で何らかの縛りをつけるなど必要かもしれません。 この件については将来、改めて動画で取り上げたいと思っています (今のところ効果的な策は見つからずですが・・)。 ぜひお待ちいただければと思います。 引き続きましてご視聴よろしくお願い致します!
@RI-je6gk
@RI-je6gk 2 ай бұрын
@@vba-wonder 返信ありがとうございます。 私は修正ブックはあえてまっさらな状態にし、 既存のシートを丸ごとコピーするイメージでした。 修正ブックは、「sheet1」だけで真っ白な状態です。 シートを複写したらまるっと解決しないかな? と考えたのです。 ただ素人発想なので、実際問題どんな不具合が想定されるか不明でして… まさに名前付きセルなんかがそうで、 完全に盲点でした。 動画期待しています。
@user-mt4pg8xd6s
@user-mt4pg8xd6s 3 ай бұрын
仕事忙しいフリして仕事してないポンコツ社員の如きコード😅
@user-mt4pg8xd6s
@user-mt4pg8xd6s 3 ай бұрын
i が1〜10に変化したあとまた1が代入される、その先にcallが来て、callの中でも1〜10に変化したあと戻って来てミッションコンプリート…成果の横取りだけ上手い転職課長みたいな仕事してて草
@takashi-vt5fl
@takashi-vt5fl 4 ай бұрын
クラスモジュールについて解説した色々な動画やサイトを見てきましたが、自分にとってはこのシリーズが一番分かりやすく、このシリーズのおかげである程度クラスモジュールが使えるようになりました!ありがとうございます!
@vba-wonder
@vba-wonder 4 ай бұрын
コメントありがとうございます! 役に立っているというコメントはとても大きな励みになります(^o^) 今後も視聴者の皆様に有益になるだろう内容を公開していきますので 引き続きまして、よろしくお願いします!
@user-gg4wl3dz8t
@user-gg4wl3dz8t 5 ай бұрын
はじめまして。標準モジュール内で、Callで呼び出すように部品化していくのとクラスモジュールを使用するのはどう違うのでしょうか?
@vba-wonder
@vba-wonder 5 ай бұрын
コメントありがとうございます! 全く同じ条件下ならば大差ないと思います。 クラス側 or標準モジュール側のプロシージャをCallすることの違いは 「要件に合わせて作成されるクラス次第」になるかと。。 この辺の違いは本当に難しいですよね、、 次のクラスモジュール系の動画はコメ主さんの疑問に触れるような内容を予定しています。 来週アップ予定ですのでぜひそちらもご視聴いただければと思います! 引き続きましてご視聴よろしくお願い致します!
@user-gg4wl3dz8t
@user-gg4wl3dz8t 5 ай бұрын
早速の返信ありがとうございます。まだクラスモジュールのメリットがよくわからないので、来週の動画を楽しみにしております。
@vba-wonder
@vba-wonder 5 ай бұрын
はい、 いきなりだと難しいかと思いますので少しずつ知見を集める形が良いかと思います(^^) 次回動画のご視聴よろしくお願い致します!
@deekiti1806
@deekiti1806 4 ай бұрын
このチャンネルで意識してクラス使うようになったけど、ぶっちゃけ標準モジュールだけでも大丈夫だけど規模が大きくなるにつれてなんかぐちゃぐちゃしてくる。 クラスで作成したらそれは意識外になるけど標準モジュールがたくさんあるとなんだっけ?これ?みたいに気にしちゃう。 あとは他の動画でも触れてるけど、プライベート変数にproperty let(set)でしかアクセス出来ないところがいい。 標準モジュールだけだとたいてい作ってるうちに変数のフォーカスが管理しきれなくなって、バグったりするから面倒でもワンダーさんの教えに従って狭く狭く作るようにできる。
@vba-wonder
@vba-wonder 4 ай бұрын
めちゃくちゃ嬉しいコメントありがとうございます! コメ主さんもきっと 「うゎっ、マジか!?」みたいな経験を積んでこられたのですね 私と同じですね(^^) 引き続き配信していきますので 関心あればこれからもご視聴お願い致します!!
@3hihumi1yo
@3hihumi1yo 5 ай бұрын
いいものを見せていただきました。ありがとうございます😊
@vba-wonder
@vba-wonder 5 ай бұрын
コメントありがとうございます! 引き続きましてごひいき(^^) よろしくお願い致します!
@user-sj1kp7gt2d
@user-sj1kp7gt2d 5 ай бұрын
こんにちは、自分もこの動画を参考にコードを組んでみました。 デモの3分位にプログレスバーの上に%表示が出る部分で、%の背景が透過させることができません。 どの様な手法を使えば透過もしくは透過させたように見せることができますか? 自分の場合UserFormの3段重ねで行っていて、一番上の&の表示のバックカラーを透過せせることができません。 よろしくお願いします。
@vba-wonder
@vba-wonder 5 ай бұрын
コメントありがとうございます! 透過有無は「BackStyle」プロパティの値でできないでしょうか。 動画の例では「ラベル」コントロールを使っています(コントロールによっては透過できないのもあるかもです)。 あとは、重なり合うコントロールの順序などもお気をつけくださいませ。 これでうまく行けることを願っております!(^^)
@user-sj1kp7gt2d
@user-sj1kp7gt2d 5 ай бұрын
まさか返信が来るとは思っていませんでした。 これから早速いろいろ試してみたいと思います。 ちなみに、こちらの開発環境はExcel2010でOSはWindows10Proです。 これは、会社のマシンに合わせているためで、その辺が影響しているかわかりませんが、返信ありがとうございました。 @@vba-wonder
@user-sj1kp7gt2d
@user-sj1kp7gt2d 5 ай бұрын
提供いただいた情報をもとずき、プロパティを調整した結果。透過させることに成功しました。大変勉強になりました!「BackStyle」プロパティの値の変更が鍵でしたね。 よろしければ、いつか、丸いプログレスバー(真ん中に%表記)の動画で作り方 を教えてください。🥺 いろいろ試してみたところ ' lblバーのパーセンテージ表示を更新 Me.lblバー.Caption = Format(progressPercent, "0") プロパティTextAlignを3で、棒グラフ競争みたいなラベルの動きになりました。
@vba-wonder
@vba-wonder 5 ай бұрын
追加でのコメントありがとうございます! うまくできたとのことでよかったです(^^) 「丸い」プログレスバーというと円形(円グラフのような形)ということでしょうかね。 それはちょっと難しそうな気がしますが、、色々と考えてみたいと思います。 「棒グラフの競争」というのは、 バーの長さが伸び続けず、処理のたびに常に長さ0から始まるみたいな感じでしたら 長さを「加算」することで対処できそうな気がします。 バーの長さ =  1伸ばす ↓ バーの長さ = バーの長さ + 1伸ばす 外してたらすみません、、 引き続きましてご視聴よろしくお願い致します!
@sonsfun125
@sonsfun125 5 ай бұрын
つい最近別部署から作成したシステムを使わせて欲しいと依頼があり、自分の部署専用に作っていたものをこのように設定シートを作成してマクロがわからなくてもすぐに変更できるように作り変えたところでしたのですごくタイムリーな内容でした! とりあえず出来ればいいという考えから修正変更に柔軟に対応できるシステムを構築するという考え方に変わりました!
@vba-wonder
@vba-wonder 5 ай бұрын
コメントありがとうございます! 今回の動画の内容がコメ主さんの開発意欲を沸き立たせたのであれば、 私としては嬉しい限りです(^^) 設定シートには色々値を設定できるので、使い方次第でかなりフレキシブルな開発もできるかと思います。 関連動画でもいくつかサンプル的に紹介しておりますので参考にしていただければと思います。 引き続きましてご視聴よろしくお願い致します!
@deekiti1806
@deekiti1806 5 ай бұрын
いつもお世話になっています。 リクエストです!VBAでAPI関連の使い方が知りたいです。構文がC++で書かれているので良く分かりません。 あとマイクロソフトの公式から調べて使う方法というかコツ?みたいのがあれば教えて欲しいです。 例えばUIAutomationcliantというアドインを使ってメールの自動送信等を作っていますが、他の人のコピペで動かしてましてます。 もう少し踏み込んで色々出来ることは無いかな?とリファレンス見たりするのですが、どうやら日本人にはあまり優しくない仕様なのでしょうか、よく分かりません。 その辺の調べるとコツというかもっとスキルを広げるテクニック等があれば教えてください。
@vba-wonder
@vba-wonder 5 ай бұрын
コメント&リクエストありがとうございます! コメ主さんのリクエストは、VBAでのAPI関連の使い方やC++の構文について、 そして特にMicrosoftの公式ドキュメントからの学習のコツに関するものですね。 率直に申し上げて、私自身はAPIの使い方やC++については語れるほどの専門知識は持ち合わせておらず、 これらのテーマに深く言及することは難しいです、、 私が特定の技術に関する情報を探す際には、その技術の公式ドキュメントから関連、 派生して検索などを行ったりもします。 また、今は流行っているのか分かりませんが、「stackoverflow」などはどうですかね、、 うーん、あまりお役に立てる提供ではないですが^^; 引き続きましてよろしくお願い致します!
@user-fv9pf7gb4g
@user-fv9pf7gb4g 5 ай бұрын
初めましてで失礼いたします。説明が難しいので動きがわかるように、コードをダウンロードできるようにしていただけませんでしょうか?
@vba-wonder
@vba-wonder 5 ай бұрын
コメントありがとうございます! 動画内での説明を通じて、 Excelマクロのオブジェクト化に関する理解を深めていただきたいと思います。 直接的なソースコードの共有については、 現在さまざまな理由から行っておりませんが、 (難しいかもしれませんが)動画を見ながら 実際に手を動かして試していただくことで、 理解が深まると考えています。 皆様の学びと成長を支援できるよう、 引き続き質の高いと思えるコンテンツを提供していく所存です。 ご理解いただけると幸いです。
@sabaidii888
@sabaidii888 6 ай бұрын
名前定義だと位置が変わっても柔軟に対応できそうですね。
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! おっ、確かに!ですです(^^) 少しばかり苦手意識があり、名前定義は私のスコープから漏れてました、、 それを設定シートに書き出せばいい感じになりそうですね。 (以前に名前定義で外出し管理されているコメントも頂戴しておりました、、) もしExcel方眼紙をより簡単に制覇できる方法あれば、 ぜひご展開お願いします(*^^*) 引き続きましてご視聴よろしくお願い致します!
@sabaidii888
@sabaidii888 6 ай бұрын
ActiveXボタンのほうは色が変えられる、また背景を透明にしてボタンの後ろにあるセルの色を設定すると、押されていないときはセルの色で、押されたときは背景色に変わるので、見栄えは良いですね。 あと、画像も使えます。
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! ActiveXのボタンはそんな見せ方があるのですね。 動画でも話していますが図形ボタンのデメリットとして クリック感がないので、それを実現できるのはよいですよね。 図形だとクリックされてないと 勘違いして連打するケースもありますので、、^^; 引き続きましてご視聴よろしくお願い致します!
@GiiD-mh2dc
@GiiD-mh2dc 6 ай бұрын
個人的には興味深い話でした 私の場合、一昨年まで正社員として20年近くEUC開発していたのですが 最初のほうはこうありたいとかこういう形で進めたいというのが強かったです  ただ、やっていくにつれて 自分のスタイルを変えるのではなく増やして 現場担当者ごとに選択してました いろんな意味がスタイルに込められていると思いますけど これが絶対という考え方ないので、そういう考え方があるのかと思って 対応を変えていました 合わない部分にイラっとするよりも結局そっちのほうが 楽だし、成果が上げられると思ったので 人はプログラムほど、渡した情報と受け取る結果が一致しないものと 軽いあきらめもありますね
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます。 スマートな考えですね。 コメ主さんもそれなりのスキルをお持ちの方とお見受けしました。 アタリとハズレはどこの職場にもある気がしますが、 その運で生活が委ねられるというのは、 私には何とも言えない気持ちになってしまいます。
@GiiD-mh2dc
@GiiD-mh2dc 6 ай бұрын
個人的にはActiveX派です 引っ越しとかまで行くと手間が増えるのは同意しますが シート上にあるボタンの挙動を見るときに そのシートのモジュールに処理が書かれているほうが 個人的には追いやすいと感じるためです ボタン処理のCallerも知った当初は組み込んではみたのですが 単純にそのボタンの機能を知りたいと思ったときに ボタンが多ければ多いほど、Select Caseの分岐を追わないといけないのは そのやり方の優位性は理解しつつも個人的には可読性が低いと感じて ActiveXに戻ってしまいましたね。。。 どこの工数を下げるべきかというのは 割と個々人や組織事の文化かなとは感じます
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます。 最終的には個人や職場のやり方になるということ、ごもっともです。 私は図形派です、というのは動画の通りです(^^) 実行するだけなら、図形が手っ取り早いということが頭から離れません(^^) 引き続きましてご視聴よろしくお願い致します!
@GiiD-mh2dc
@GiiD-mh2dc 6 ай бұрын
テストに関してですが、今回のケースだと3か月ないし半年並行稼働ではなくて 過去分が溜まっているはずなので、過去分を処理して、過去分の結果と突合 8月に並行稼働で最終チェックでいい気もしますが。。。 まあ、違う会社なのでしょうか? 直にその時々にやり取りできないと大変なのは分かるのですが あえて言うと今回のケースでやめたほうがいいと言ってしまうと やってもいいというケースがものすごく限られてしまいそうな気がします 結局、プログラムはトライ&エラーなので、他者への提供だけは かなり慎重にして、マクロの記録以外に組み立てられるようになってから 他者へ提供、ただしメンテは大変だから慎重にね という方向性のほうがいい気がします
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! テストについては 過去データがあるならばそれを活用するのは良さげですね(^^) テストで怖いのは論理エラーです。 「実行時エラーが出なかったから大丈夫だ」と安易に見てしまい 目に見えるエラーが発生しなくとも、 結果が異なるケースを見落としてしまうことです。 私はこの点を非常にリスクある点と思っています。 (特に稀にイレギュラーなデータが含まれているケース) とはいえ、どこをリスクと見るのかは その人の置かれている立場や性格によることでもあるので イケイケな方ならばどんどん挑戦することも良いと思います! (コメ主さんがおっしゃるように彼とは職場は違いますし、 人生の半分以上を一緒に過ごしてきた旧知の仲です) 引き続きましてご視聴よろしくお願い致します!
@GiiD-mh2dc
@GiiD-mh2dc 6 ай бұрын
@@vba-wonder 論理エラーがやっかいというのは同意します ただ、ファイル名をコードに直に書いている場合 論理エラーが発生する可能性を軽減することは難しくて 一方で論理エラーが発生する可能性が少ない継続業務というのは少ないと考えています 論理エラーが発生しない可能性が少ない業務を選ぶのではなく 今回であれば、ダイアログはやや難易度高いと思うので ファイル名は特定のシートのA1(あくまで例)を参照する形にして オープン時に毎回クリアして明示的にファイルを選択させる意識を持たせる (エクスプローラでファイル選択してパスをコピーを押して貼り付けるなど その場合、前後の"の除去は必要かもしれませんが) という形でまずは作る機会自体を減らさないようにするほうが 個人的には良いと感じました プログラム開発は個人的には論理で突き詰めるのも大事ですが 場数というのもある一定の量は必要だと感じているので 作らないほうがいいという選択肢はなるべく取らないほうが良いかなと感じます 論理エラーのこわさは論理エラーで苦労したという経験が 一番、身に染みるのでは?という考え方です
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! コメ主さんの洞察力深いご意見、参考になります。 ファイル名を動的に扱うアイデアは、プログラミングにおける重要な考慮事項の一つですね。 今回の動画では、VBA初心者に向けて、特にマクロ記録のリスクと基本的な注意点を強調しました。 実際の開発においては、コメ主さんがおっしゃるように、様々な工夫が必要です。 (既に中・上級者向けのコンテンツとして高度なテクニックも公開しておりますので、 ご関心があれば是非チェックしてみてください) 貴重なご意見をいただき感謝します。 今後ともご視聴よろしくお願いいたします!
@Kirby_cute
@Kirby_cute 6 ай бұрын
本当に、会社でVBAを利用したExcelを使用していくなら最低限のコードがいいかなと思ってます。 (ボタンを押したら転記し、シートの入力欄がデリートされる。 ボタンを押したら合計と合計が合っていれば印刷する。くらいの) メンテナンスがどの程度必要なのか、が肝ですよね。 自分の業務を減らすだけのVBAだったらいくらでも自分でデバッグできるのでいいと思いますけどね!
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! おっしゃるようにやりすぎ、盛りすぎは危険ですね^^; 後先考えずにやってしまうとハマってしまうこともありそうですし。。 メンテナンスが肝・・確かにです! コードの簡潔さ次第でメンテナンス負荷も影響ありますが、 マクロの記録中心の方などには厳しそうですね、、 引き続きましてご視聴よろしくお願い致します!
@nobuq59
@nobuq59 6 ай бұрын
クラスモジュールに特化した動画は初めて見ました。参考になります。質問ですが、カプセル化するということだけでしたら、クラスモジュールに書かなくても標準モジュールに書けばいいはずですが、それでもクラスモジュールに書くのは何かメリットがあるのでしょうか。
@vba-wonder
@vba-wonder 6 ай бұрын
コメントありがとうございます! 標準モジュールで事足りるかどうかは要件次第になるかと思います。 標準モジュールを使う場合ですと、 インタンスが作れない(と思います)ことが大きな違いになると思います。 私の業務経験では、 シートにある「表1個」をオブジェクトとして作るというよりも その「表の中の1行」を1オブジェクト(インストタンス)として、それらを行数分だけ作成して、 処理をする形を取っていました(テンプレート、たい焼きの型として使用する)。 このような使い方(同じ型をもつインスタンスを複数作る)をすると 標準モジュールの実装では使い勝手が悪くなると思っておりますです。 参考になれば幸いでございます。 引き続きましてご視聴よろしくお願い致します!
@sai1977sai
@sai1977sai 7 ай бұрын
ありがとうございます!!
@sai1977sai
@sai1977sai 7 ай бұрын
ありがとうございます!!
@makotoy5213
@makotoy5213 7 ай бұрын
とても参考になる内容でした。画像の読み取りなどにVBAを使うとか要望としてありそうだなと思いました。そうなると確かに誰が作るかはいいとして工程の中でマクロの適応範囲を検討するのがいいと思いました。ただ、動画にあるように無理と言って余計な事に首を突っ込むべきでないケースもあるので大変有意義な動画ありがとうございます。
@vba-wonder
@vba-wonder 7 ай бұрын
コメントありがとうございます!お役に立ったとのことでとても嬉しいです(^^)。 ※画像を読み取るのはほんとにシンドかったです^^; Excel作業の部分工程のマクロ化でとりあえず様子を見ながらやるというのはリスクヘッジにもなるかと思いますし、 コメ主さんの作業内容で使えそうな内容があればぜひ活用していただければと思います。 引き続きましてご視聴お願い致します!
@makotoy5213
@makotoy5213 7 ай бұрын
コメントありがとうございます。VBAでどんな案件があるのかもご紹介いただけると嬉しいです。副業禁止なのですが・・。参考まで。
@vba-wonder
@vba-wonder 7 ай бұрын
案件についてですね。はい、今後の動画の参考にさせていただきますね。 ありがとうございます!
@sai1977sai
@sai1977sai 8 ай бұрын
ありがとうございます
@sai1977sai
@sai1977sai 8 ай бұрын
ありがとうございます!!
@sai1977sai
@sai1977sai 8 ай бұрын
ありがとうございます!!
@vba-wonder
@vba-wonder 8 ай бұрын
こちらこそありがとうございます!引き続きご視聴お願い致します!!
@KK-yl7zj
@KK-yl7zj 8 ай бұрын
外出し、自分で思いついて気に入っていたんですが、同様のことを紹介している事例を始めてみたので嬉しいです! 私の場合は設定の表はテーブル化しています。こうすることでユーザー側で設定を追加してもコードを変更する必要がなくなります。 また、シート名やテーブル名はConstにすることで容易に変更できるようにしています。(基本的に変更禁止としていますが、、、)
@vba-wonder
@vba-wonder 8 ай бұрын
シートに値を持たせると本当に便利ですよね! このような使い方は開発者のメリットが多いように思います。 テーブル形式の形で持っておくと、規則性が有りなおのこと扱いやすくなりますね。 ユーザー側でも対処できるようにしているとのこと、 まさに「ストレスフリー」と言った感じでしょうかね(^^) 引き続きましてご視聴お願いします!
@onigiriomusubi5704
@onigiriomusubi5704 8 ай бұрын
いつも動画をありがとうございます。最近、VBAを少しずつ理解できるようになり、そのなかでこの動画を見つけました。まだクラスは勉強していませんが、なんとなく理解できれば「使える」ものだとこの動画を観て思いました。大変勝手言って恐縮ですが、ソースコードを公開してもらうことが出来ますでしょうか? 動画だけ見ているだけでは身につかず、実際にコードを打って動作を理解したいと強く感じます。その意味で、ソースコードがあれば、じっくり検証できるのですが・・・ まだ動画上のソースコードをみただけでは、動作をよく理解できずにいます。経験のある方でしたら、問題ないのでしょうけれども、考えが動画の主旨に追いついていけてません・・・
@vba-wonder
@vba-wonder 8 ай бұрын
いつも動画をご覧いただき、ありがとうございます! 私の動画がお役に立てていると知り、大変嬉しく思います。 クラスについては、これから少しずつ学んでいけるといいですね。 なお、ご要望のソースコード公開についてですが、申し訳ありませんが 動画の概要欄には文字数制限があり、全てを掲載することができませんでした。 ご面倒かもしれませんが、どうぞ引き続きご視聴頂いての対応にてお願いいたします。
@onigiriomusubi5704
@onigiriomusubi5704 8 ай бұрын
@@vba-wonder 様 素早いお返事ありがとうございます。 動画を見ながらとのご回答ありがとうございます。 そのご回答に関して1つご要望がございます。クラスやモジュールに関して、すべてを完全に見せて頂く時間を設けて頂けると大変助かります。最初は、そのようにしようと独力しましたが、コード全てが見えていないように思えました。なので今回の質問に至りました。どうぞよろしくお願いいたします。
@vba-wonder
@vba-wonder 8 ай бұрын
ありがとうございます! 言われてみると「確かに」と思う部分ありますね^^; 次回以降気をつけて動画にしたいと思います。 貴重なご意見ありがとうございました!
@sai1977sai
@sai1977sai 8 ай бұрын
あありがとうございます!!
@vba-wonder
@vba-wonder 8 ай бұрын
はい、視聴ありがとうございますー!
@sai1977sai
@sai1977sai 8 ай бұрын
ありがとうございます!
@vba-wonder
@vba-wonder 8 ай бұрын
はい、こちらこそ視聴ありがとうございます!
@user-ml3hh5ef8c
@user-ml3hh5ef8c 8 ай бұрын
名前付けは次に見る人が日本人だとは限らないので、日本語よりは英語や会社によっては広東語など、日本語じゃないほうが良いことも多いと思うので、その辺りも考えた名前付けと思うと難しいですね。
@vba-wonder
@vba-wonder 8 ай бұрын
命名は難しいですよね。今は分かりませんが、相当昔に日本語で命名したマクロを中国語のWindowsOSで使っていたら見事に化けていたことがありました^^; 無難という意味ではやはり英字かもしれないです。。
@deekiti1806
@deekiti1806 8 ай бұрын
まじで分かり易い。 この理由がいまいちわからんかったからクラスを使う意義がピンとこなかった。 プログラマーじゃない社内でvbaやってる程度なら尚更クラスが無くてもイケるし、むしろ覚える手間とか考えると
@vba-wonder
@vba-wonder 8 ай бұрын
コメントありがとうございます! クラスモジュールを使えるようになるにはそれなりのコストがかかってしまうと思います。 一方で、クラスモジュール化するための考え方のような部分は 標準モジュールにも当てはまることも多いのでそれはそれでありなのではと思うところもあります。 ご指摘のように割に合うのかどうかは皆様次第というところでしょうか。微妙ですね・・^^; 引き続きましてご視聴よろしくお願い致します!
@user-wj8lu9lq9z
@user-wj8lu9lq9z 8 ай бұрын
ユーザーフォームにプログレスバー(初期は非表示)があるのにも拘らず、ラベル等を使う意味を教えて頂きたいです。
@vba-wonder
@vba-wonder 8 ай бұрын
コメントありがとうございます! 動画で説明しているプログレスバーはコントロールを2個(テキストボックとラベル)使っていますが、 うちラベル(背景色:水色)は「バーそのもの」として使っています。 このラベルで進捗状況を示しています。 引き続きましてご視聴よろしくお願い致します!
@marrygold3423
@marrygold3423 8 ай бұрын
POAの思想的にはあってるかもだけど、こういった試みからアサーションやテストを覚えていく筈なので勧めてあげても良いと思いますよん。
@vba-wonder
@vba-wonder 8 ай бұрын
コメントありがとうございます! 確かに、プログラミングには挑戦的な部分もあり、 VBAを学ぶ過程でのアサーションやテストの重要性はおっしゃるとおりですね。 私の知人に関しては、VBAを主に扱うような立場でもないため、 最初の段階ではメンタル的な負担を減らすことを優先しました。 私自身の経験からも、職場での他スタッフ達との相性や空気感もあると思い どのように伝えていくかについては、引き続き考えています^^;
@user-hf9fg7me1e
@user-hf9fg7me1e 8 ай бұрын
他人事ですが応援してあげたいですね。友人にスペシャリストがいるって、すごくラッキーなことだと思う。
@vba-wonder
@vba-wonder 8 ай бұрын
コメントありがとうございます! 温かいお気持ちありがとうございます。友人もきっと嬉しいことと思います(^^) マクロは便利は便利ですが 取り上げ方一つで大変な思いをするという考えから今回の動画を作成しました。 今後も色々な視点から動画を作成したいと思います。 引き続きご視聴よろしくお願い致します!
@fore5829
@fore5829 9 ай бұрын
いつもありがとうございます。 ユーザーフォームでこんな事出来るなんて初めて知りました。 説明も分かりやすく理解できましたが、コーディングは不可能です。 このようなコーディングが必要な時は、また立ち寄らさせていただきます。 今後とも実務者レベルでの動画、楽しみにしております。
@vba-wonder
@vba-wonder 9 ай бұрын
コメントありがとうございます! ユーザーフォームもやってみると奥が深く、確かに難しい部分もありますよね・・^^; この動画で話しているような状況があればぜひ参考にしていただければと思います! ※頻繁に発生するような状況ならば今回の手法は慣れの問題かもしれません、、 実は私もそこまで慣れておらず動画説明時にそれなりに時間を取ってしまいました・・ 引き続きましてご視聴お願いします!
@kawamo55
@kawamo55 9 ай бұрын
マクロの記録で作ったものは、そのまま利用するのではなく1つ1つの動作を理解して使うべきです。 Excelの場合は、WorkbookとWorksheetとRangeオブジェクトが分かっていればマクロは書けます。 そこだけの話です。 kzfaq.info/get/bejne/abiUZa19zuCVj3k.html
@ryoyama9598
@ryoyama9598 9 ай бұрын
変数の命名については本当に難しいですね。私は英文字で例えばrngCellとかlngIなどを使っています。要は慣れればどちらでもという感じですかね。ただ日本語で表現しにくい、長くなってしまうこともありそこは英文字がいいかなと感じます。
@vba-wonder
@vba-wonder 9 ай бұрын
コメントありがとうございます! はい、変数の名前は本当に悩ましい問題ですね。。 (私の場合はプロシージャ名など名前をつけるところ全てで作業が止まってる気もしています・・) コメ主さんのやり方は型を含めて表記するやり方とお見受けました。 もしそうですと私もずっとそれでやっておりました。 が、職場の指摘(「それはやめよう」)で以来は余計悩むように・・ このような名前についてはまた動画でお話したいと考えています。 (私のお悩み相談のような動画になりそうですが・・^^;) 引き続きましてご視聴よろしくお願い致します!
@Max-cu4ms
@Max-cu4ms 9 ай бұрын
ブックを開いた時のログを残すのは良いですね! 僕も作ってみようと思います😊
@vba-wonder
@vba-wonder 9 ай бұрын
コメントありがとうございます! ログおすすめです! 困った時に何回も助けてもらってます^^; ぜひ活用してみてくださいませ! 引き続きご視聴お願いします!
@ryoyama9598
@ryoyama9598 9 ай бұрын
こんばんは。もしご存じでしたら申し訳ありません。シートを隠す方法ですが、たまたま過去に私の師匠に教えてもらっていたやり方がありまして一般的に誰でも使えるもので、この方法ですとワークシート上のシートの再表示では表示させることはできず、マクロを使わないと表示できないのでひとつの手段として有効かと思います。ゆえに設定シートはそのまま使えるということになります。 Sub VeryHiddenSheet() Sheets("Sheet1").Visible = xlVeryHidden End Sub ただ必ずしもマクロを使う必要もなく、シート自体が見えていてもよければシートの保護の方が簡単で現実的かなとも感じます。 エクセルVBAは、他のプログラミングと違ってワークシートも有効に使えますし、VBAのボリュームを抑えたスマートな書き方にできるところはいいですよね。 名前の定義は私もよく使います。セル番地を使うと例えば行や列の挿入・削除によって位置が変わった場合、VBAを書き直す必要が出てきます。名前の定義は挿入・削除してもずれるだけで何もいじる必要はないですからね。 ほんとご説明されている内容に共感しかないです。VBAへの接し方は私もまったく同じです。
@vba-wonder
@vba-wonder 9 ай бұрын
コメントありがとうございます! 実は、再表示のコードは知っておりましたが(^^)、 ご丁寧にありがとうございます。 確かに用途や目的に応じて敢えて「シートを見せる」というのもありですね(見えていたほうが管理が楽ですし。。) コメ主さんも同じような使い方をされているとのことで、 同じような方法で開発されている方が他にもいらっしゃるというのは嬉しいです! 現場ではほとんどお目にかかることは無いことを考えるとネット発信の威力はすごいですね^^; 引き続きましてご視聴お願いします!