5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
tyuさんの投稿
(投稿ID: 4319)
[質問1]
下記サンプルマクロで、dolly.Activateが無くても正常動作したのを確認したのですが、このマクロにおけるdolly.Activateの役割は何ですか。
[質問2]
上記のマクロでワークシートの順番を試しに変えて挙動を観察すると、一番左側から1枚ずつ処理することを確認しました。このことから、コレクションの処理順には規則性があると理解していいでしょうか。
[質問3]
For each 構文を使わずに"いっぺんに"タブの色を変えることはできないのでしょうか。
小川 慶一さんのコメント
(コメントID: 5919)
おはようございます。
> [質問1]
>このマクロにおけるdolly.Activateの役割は何ですか。
そういうことを知りたい場合は、逆に、 dolly.Activate を残し、他をコメントアウトしてみましょう。
以下の動画も、ひょっとすると、何かのヒントになるかも。
https://forum.pc5bai.com/lesson/page/199
> [質問2]
>コレクションの処理順には規則性があると理解していいでしょうか。
hatten1_text.pdf の p91 を参照してください。
> [質問3]
> For each 構文を使わずに"いっぺんに"タブの色を変えることはできないのでしょうか。
できそうな、できなそうな...。
僕は実務でその必要を感じたことはないのですが、どのようなときに使うマクロというイメージでしょうか。
田中 宏明さんのコメント
(コメントID: 5922)
[質問2]について、処理順に関係なく結果が同じになる場合、特に気にしなくてよいのではないでしょうか。
VBAのFor Each構文の処理順は、オブジェクトに依存します。つまり、ExcelのWorksheetオブジェクトが処理順を決めていますが、毎回同じになることを保証した仕様は公開されていないようです。難しいですね。
> [質問2]
>コレクションの処理順には規則性があると理解していいでしょうか。
受講生さんのコメント
(コメントID: 5926)
ありがとうございます。
[質問1]の回答について
VBAを実行すると、各ワークシートが順に現れました。
ということは、ワークシートが順にアクティブになったということですね。
rangeオブジェクトでは.selectメソッド ですが、wotksheetオブジェクトでは.activate メソッドを使うということですね。
[質問2]の回答について
For Each構文でのオブジェクト作業順では特に決まりはないことを学びました。ありがとうございます。
[質問3]の回答について
特に使用例を想定したわけではないのですが、
Worksheets.Tab.ColorIndex=23 対象=全部
のように1行でコードを書けると簡単でいいかなと思いついただけです。
受講生さんのコメント
(コメントID: 5927)
回答を頂きましてありがとうございます。
For Each構文はオブジェクトを「手当たり次第」に操作する命令文なので、処理順にこだわることはないのが良くわかりました。
田中 宏明さんのコメント
(コメントID: 5928)
処理の順番よりもwotksheetオブジェクトでactivateを使うべきか、使わないくてもよいのかを判断するほうが大事です。
For Each構文で複数シートに連続処理をするときのハマり例 – Excelマクロ・VBA
https://www.exvba.com/2295/
私は事前に記事を読んでいたにも関わらず、これにハマりました。
メソッドを意図的に使う場合があります。ということですね
田中 宏明さんのコメント
(コメントID: 5929)
(記載に誤字があったので再投稿します。)
For Each構文では、処理の順番よりもwotksheetオブジェクトでactivateメソッドを使うメリット・デメリットを判断できることのほうが大事です。
For Each構文で複数シートに連続処理をするときのハマり例 – Excelマクロ・VBA
https://www.exvba.com/2295/
私は事前に記事を読んでいたにも関わらず、これにハマりました。
activateメソッドで処理が遅くなっても意図的に使うことがあります。
小川 慶一さんのコメント
(コメントID: 5930)
> [質問1]の回答について
> VBAを実行すると、各ワークシートが順に現れました。
> ということは、ワークシートが順にアクティブになったということですね。
> rangeオブジェクトでは.selectメソッド ですが、wotksheetオブジェクトでは.activate メソッドを使うということですね。
自動記録しつつシートを選択してみてください。
それで、まずは、できあがったコードを観察してみてください。
(マウスでクリック。 [Ctrl] + [PgUp] とか [Ctrl] + [PgDn] とかだとまた違うコードになります)
rangeでも .activate ありますよ。
こちらも、自分で試してみて。
>> [質問3]
>> For each 構文を使わずに"いっぺんに"タブの色を変えることはできないのでしょうか。
>
> [質問3]の回答について
> 特に使用例を想定したわけではないのですが、
>
> Worksheets.Tab.ColorIndex=23 対象=全部
>
> のように1行でコードを書けると簡単でいいかなと思いついただけです。
「こういうことは可能か?」ということをいろいろ質問いただくのは、技術的なチャレンジとしては良いことかとは思います。
一方、使用例を想定しない質問は自分ごとでないので知識として定着しにくいです。
実務に役立つスキルを効率よくマスターするコツは、自分ごととして学ぶことです。
>僕は実務でその必要を感じたことはないのですが、どのようなときに使うマクロというイメージでしょうか。
僕自身も、なるべく実務に即したお返事をしたいと思っています。
それで、上に挙げた質問に至りました。
ところで、この質問されたような機能があるとして、その実務上のメリットは?と考えると...。
シートのタブの色を変えるのは、色によって識別するためかと思います。
でも、すべてのシートを同じ色にしてしまったならば、「色によって識別する」という目的は達成できませんね。
なので、そういう方法は、たとえあったとしても、覚える価値はなさそうに思います。
小川 慶一さんのコメント
(コメントID: 5931)
田中 宏明さんからの情報も踏まえて、「For Each構文」と「Activateメソッド」のそれぞれについて、以下をご自身で一度整理されると良いかと思います。
・どういう機能の道具なのか?
・利用することにどのような利点があるのか?
・利用にあたり、どういう注意点があるのか?
まずは、上記についてまとめ、それから、人に説明するつもりで、言葉にしてみてください。
さらにそのあと、人に説明しながらマクロを実行するつもりで、サンプルコードをステップイン実行しながら、機能について自分の言葉で説明します。
力つきますよ。
tyuさんのコメント
(コメントID: 5939)
心構えとご指摘をいただきましてありがとうございます。
その通りと得心いたしました。
自分自身、VBAでは実務でまだ使用しておらず、本講座が楽しい段階
なのでお許しください。市販本を読んでオブジェクトの単語に拒否
反応があったのですが、この講座で無くなってきたような気がします。
情報処理のバックボーンがない一人IT 担当の寂しい身ですが、VBA
なくして業務改革なしの心構えで学んでいますので、今後もよろしくお願いします。
tyuさんのコメント
(コメントID: 5940)
返信が遅くなりまして恐縮です。
実は昨日まで select case の講座を拝聴しておりまして、ご紹介して頂いた小川先生の修正select case記事の意味がさっきわかった状況です。こんな初心者レベルです(笑)。
ところでご紹介の記事をみると、
ワークシート.activateメソッドを使うと、ワークシートが現在の操作対象ワ-クシートに設定され、正しく動作するということかなと感じたのですが。
田中 宏明さんのコメント
(コメントID: 5941)
返事ありがとうございます。私も一人VBA 担当なので、職場でFor each 構文の話をすることはありません。
ワークシート.activateメソッドを正しく理解されているようなので、次はステップ実行 F8 を覚え、操作対象ワ-クシートが切り替る動きを見ることで理解が深まると思います。
小川 慶一さんのコメント
(コメントID: 5942)
抽象と具象は表裏一体です。
抽象的なことを学ぶときは、具体的な事例を意識します。
具体的な事例を学ぶときは、抽象的な概念を意識します。
すると、単なるアイデアについても、具体性が増すので、質問する時に身が入りますし、より効果的な質問をすることもできるようになります。
そもそも質問する意味がない場合は、質問する前に気づけるようにもなります。すると、そのさらに上を行く問いを持てたりもします。
マクロの勉強自体、「高度な抽象概念」と「具体的な業務で生じる問題の解決」という、抽象と具象を行き来する心身の活動のようなものです。
その感覚を、より楽しんでいただければと☆
小川 慶一さんのコメント
(コメントID: 5943)
> ところでご紹介の記事をみると、
> ワークシート.activateメソッドを使うと、ワークシートが現在の操作対象ワ-クシートに設定され、正しく動作するということかなと感じたのですが。
実体験しないままで理解しようというのは、都合よすぎます。
体験が大切です。
構造文の中身が理解不能な場合は、構造から取り出して個別に動作確認すべきです。
そのためのサンプルコードを自分で書き、自分で動作確認をすることです。
それが、「抽象と具象の間を行き来する」ということです。
体験して実感できれば、人に聞いて返事を待つ必要はなくなります。
こういう動作確認を身体が自然に行ってくれないのであれば、基礎編での演習が不足しています。
発展編1の学習を続けてもよいですが、基礎編の演習にも並行して取り組んでください。これまでのやりとりを見る限り、発展編1を十分理解するには、身体の準備が不十分に感じられます。
小川 慶一さんのコメント
(コメントID: 5944)
> 返事ありがとうございます。私も一人VBA 担当なので、職場でFor each 構文の話をすることはありません。
アウトプット相手がいないって、さみしいですね (^_^;
田中 宏明さんのコメント
(コメントID: 5949)
tyuさんへのアドバイスは、私がアドバイスされているように思えてなりません。
発展編を復習しながらエクセルマクロ以外の抽象思考力を高めようと努力しています。このとき、むしろ、並行して基礎編の復習を一生懸命やり、抽象と具象の間を行き来することが体感できるようになりました。
> 「抽象と具象の間を行き来する」ということです。
小川 慶一さんのコメント
(コメントID: 5954)
良問をくり返し解くのがいちばん力になりますね。
「身体に馴染んで見た瞬間問題を溶けるようになる」ということと、「抽象的な視野で問題を俯瞰できるようになる」ということは、連動しています。
基礎編の課題は、最低3回は解くべきです。
いつも言っていますが、さらに効果的な学びにするには、時間を計ることと、人に説明しているかのように解き方を説明しつつ解くことです。
そういう風に取り組む都度課題を決めるて取り組むと、3回くらいはあっという間です。