発展編1 フォローメールセミナー 第25回

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

発展編1のフォローメールセミナー第25回のフィードバック記入ページです。 【動画はありません】個別ページにて重要事項満載のフォローメールをお読みいただけます。

この教材についての過去の質問・感想

11098 : 小川慶一の回答 (2019-02-09 23:13:28)

Takao Kanekoさん:

> 1.With EndWithの中の構文は、オブジェクトを指定すれば、こちらが認識されて動くのは新しい発見でした。今までWith構文は、その同じオブジェクトを対象とするものしか入れられないと思ってました。

言語によります。
Visual Basic は、「With 句の中で With 句が指定したオブジェクトを操作するときは先頭にピリオドを入れる」という約束なので分かりやすいですね。

> 2. rgSummaryというように、

変数は可読性向上のために有効ですね。

> 3. ちなみに、ここまでスラスラとできる人は、すでに達人です。
> そうなれるように、引き続きがんばります٩( ‘ω’ )و !

くり返すことが大切です。
同じ課題に対しても、違う課題を持って臨むことをくり返します。


11089 : Takao Kanekoさんのコメント (2019-02-09 17:30:14)

小川先生、

1.With EndWithの中の構文は、オブジェクトを指定すれば、こちらが認識されて動くのは新しい発見でした。今までWith構文は、その同じオブジェクトを対象とするものしか入れられないと思ってました。

その動作が見られたのは、Module16 With構文中のさらに、For nextの入れ子の ”rgSummary.Offset(c, cYoko).Formula =”が始まる部分です。

2.
rgSummaryというように、
シートのRangeに変数名を付ける、この変数名がすごくわかりやすいと思いました。
参考にしたいと思います。

3.
>ちなみに、ここまでスラスラとできる人は、すでに達人です。
そうなれるように、引き続きがんばります٩( ‘ω’ )و !

Takao


9969 : 小川慶一の回答 (2018-05-14 19:18:59)

受講生 さん:

慣れればなんということないですよ。

とは言っても、僕も With - End With は、覚えたての頃は慣れるまで結構苦労しました。
引っ掛かるところは人それぞれかと思います。



> 私はレベルでは、今まで
> Range("A" & Gyo) = …
> Range("B" & Gyo) = …
> といったように、自分が今どのセルに対して指示をしているかがダイレクトでかつ一目瞭然で分かるように、作ってきました。
> しかし、第24回、第25回のseminarのように、
> Offsetプロパティや、Wihr~End Withを使うと、ホント抽象的なってしまって、可読性となると、これはかなり慣れないとかなり困難を極める印象をうけました。
> 自分にとっては、ハードルは高く感じますが、今後は、Offsetプロパティや、Wihr~End Withを使うことを極力意識していきたいと思います。


9955 : 受講生さんのコメント (2018-05-12 15:47:55)

私はレベルでは、今まで
Range("A" & Gyo) = …
Range("B" & Gyo) = …
といったように、自分が今どのセルに対して指示をしているかがダイレクトでかつ一目瞭然で分かるように、作ってきました。
しかし、第24回、第25回のseminarのように、
Offsetプロパティや、Wihr~End Withを使うと、ホント抽象的なってしまって、可読性となると、これはかなり慣れないとかなり困難を極める印象をうけました。
自分にとっては、ハードルは高く感じますが、今後は、Offsetプロパティや、Wihr~End Withを使うことを極力意識していきたいと思います。


9927 : 小川慶一の回答 (2018-05-06 17:57:04)

柴田 邦彦さん:

こんにちは。

> 昨日、検証済みですが、翻訳機能を無効にしたところ、表示は正常になりました。

日頃お使いになっていない機能であれば、それでもありかもしれませんね。
ともあれ、良かったです。

> ただ、なぜ翻訳が行われたかの原因は不明ですがね…。

今回は問題が同じテンプレートのページすべてで発生したわけではないので、なんとも言えませんが...。

<meta http-equiv="content-language" content="ja">

という一行を入れると、「このページは日本語で書かれているよ」という意味になります。
このページのテンプレートを編集し、この一行を入れることで、翻訳機能が「日本語だからあえて別の言語に翻訳しなくていいか」と思ってくれるのでは?と、少し期待しています。



> 小川慶一さん:
> 昨日、検証済みですが、翻訳機能を無効にしたところ、表示は正常になりました。
> やはり、私が推測したとおり、表示の不具合が発生した何カ所かの部分で、翻訳が行われていたと考えます。結果的に翻訳ができずに、意味不明な文字化け状態になっていましたが…。
> ただ、なぜ翻訳が行われたかの原因は不明ですがね…。


9925 : 柴田 邦彦さんのコメント (2018-05-06 16:02:41)

小川慶一さん:
昨日、検証済みですが、翻訳機能を無効にしたところ、表示は正常になりました。
やはり、私が推測したとおり、表示の不具合が発生した何カ所かの部分で、翻訳が行われていたと考えます。結果的に翻訳ができずに、意味不明な文字化け状態になっていましたが…。
ただ、なぜ翻訳が行われたかの原因は不明ですがね…。

> 受講生 さん:
>
> > 今回、初めて気づきましたが、第25回のみ、Google Chromeの翻訳機能が作動して、翻訳を行っています。
>
> なるほど。そういうこともあるのですね。
>
> 以下の検索キーワードで調べてみました。
> "chrome 外国語 戻す"
> "特定のページ chrome 翻訳 オフ"
>
> それで出てきた中で言うと、以下が参考になりそうです。
>
> Google Chrome ヘルプ - Chrome の言語の変更とウェブページの翻訳
> https://support.google.com/chrome/answer/173424
>
> Google Chromeで翻訳ツールの有効/無効を設定する方法
> http://uxmilk.jp/16571
>
> とはいえ、Chromeもクセのあるブラウザなので、問題解決は簡単ではないかもしれません。
> 特定のページでたまたまうまくいかなかっただけということでしたら、今回はこのページについては、Microsoft Edgeで見ることにして、で済ませてしまう方が得策かもしれません。
>
> このWEBサイトが出力するHTMLの方でも、ブラウザに対してこのページで使用している言語は何かという通知をより明示的にやる方法があるので、パートナー技術者に、その件を別途相談してみます。
>
> ひきつづきよろしくお願いいたします。
>
>
> > 小川慶一さん:
> > > [1] 別URLを試してみる
> > > [2] ChromeのUIからキャッシュ削除の操作をする。
> > 結果は[1]、[2] を実施後もダメでした。
> > おそらく、キャッシュが原因ではないと考えます。
> > 〈その理由〉
> > 今回、初めて気づきましたが、第25回のみ、Google Chromeの翻訳機能が作動して、翻訳を行っています。
> > 他国言語が使用されているとは、考えにくいですが、表示が不具合の部分を他国言語と判断し翻訳を行っている可能性があります。
> > ただ、原文表示に戻しても、不具合表示は不具合のままですので、一度翻訳されてしまうと、Google Chromeが言語と判断できずに、原文に戻せないのかもしれません。
> >
> > 以上、今回判明しました件をご報告いたします。
>


9920 : 小川慶一の回答 (2018-05-06 14:45:56)

受講生 さん:

> 今回、初めて気づきましたが、第25回のみ、Google Chromeの翻訳機能が作動して、翻訳を行っています。

なるほど。そういうこともあるのですね。

以下の検索キーワードで調べてみました。
"chrome 外国語 戻す"
"特定のページ chrome 翻訳 オフ"

それで出てきた中で言うと、以下が参考になりそうです。

Google Chrome ヘルプ - Chrome の言語の変更とウェブページの翻訳
https://support.google.com/chrome/answer/173424

Google Chromeで翻訳ツールの有効/無効を設定する方法
http://uxmilk.jp/16571

とはいえ、Chromeもクセのあるブラウザなので、問題解決は簡単ではないかもしれません。
特定のページでたまたまうまくいかなかっただけということでしたら、今回はこのページについては、Microsoft Edgeで見ることにして、で済ませてしまう方が得策かもしれません。

このWEBサイトが出力するHTMLの方でも、ブラウザに対してこのページで使用している言語は何かという通知をより明示的にやる方法があるので、パートナー技術者に、その件を別途相談してみます。

ひきつづきよろしくお願いいたします。


> 小川慶一さん:
> > [1] 別URLを試してみる
> > [2] ChromeのUIからキャッシュ削除の操作をする。
> 結果は[1]、[2] を実施後もダメでした。
> おそらく、キャッシュが原因ではないと考えます。
> 〈その理由〉
> 今回、初めて気づきましたが、第25回のみ、Google Chromeの翻訳機能が作動して、翻訳を行っています。
> 他国言語が使用されているとは、考えにくいですが、表示が不具合の部分を他国言語と判断し翻訳を行っている可能性があります。
> ただ、原文表示に戻しても、不具合表示は不具合のままですので、一度翻訳されてしまうと、Google Chromeが言語と判断できずに、原文に戻せないのかもしれません。
>
> 以上、今回判明しました件をご報告いたします。


9914 : 受講生さんのコメント (2018-05-05 09:40:33)

小川慶一さん:
> [1] 別URLを試してみる
> [2] ChromeのUIからキャッシュ削除の操作をする。
結果は[1]、[2] を実施後もダメでした。
おそらく、キャッシュが原因ではないと考えます。
〈その理由〉
今回、初めて気づきましたが、第25回のみ、Google Chromeの翻訳機能が作動して、翻訳を行っています。
他国言語が使用されているとは、考えにくいですが、表示が不具合の部分を他国言語と判断し翻訳を行っている可能性があります。
ただ、原文表示に戻しても、不具合表示は不具合のままですので、一度翻訳されてしまうと、Google Chromeが言語と判断できずに、原文に戻せないのかもしれません。

以上、今回判明しました件をご報告いたします。

> 受講生 さん:
>
> > とりあず、第25回のみEdgeで対応いたします。
>
> よろしくお願いします。
>
> > ブラウザの再起動
> > pcの再起動
> > [Shift]+[Ctrl]+[R]の操作
> > 全て、ダメでした。
>
> Chromeはキャッシュのクリアが少し大変です。
> しつこい油汚れのようなもので、他のブラウザであればキャッシュクリアできるはずの操作(上記のようなもの)でもうまくいかないことがあります。
>
> ついては、簡単に試せることがあるとすれば、以下の2つです。
>
> [1] 別URLを試してみる
> [2] ChromeのUIからキャッシュ削除の操作をする。
>
>
> [1] 別URLを試してみる
>
> 以下のURLではどうでしょう。
> https://online.pc5bai.com/Movie/index/30/260?hoge=1&fuga=2&piyo=3
>
> 通常、違うURLの場合は違うページとみなされます。(違うページなので、キャッシュ読み込みではなく、ページそのものを再読込する)
> 上に紹介したリンク先の表示であればうまくいくのではないか?と少しは期待できるのですが。
>
>
> [2] ChromeのUIからキャッシュ削除の操作をする。
> おそらく以下のURLでできるかと思います。
> chrome://settings/clearBrowserData
>
> 「基本」タブで、「キャッシュされた画像とファイル」のチェックが入ってることを確認した上で、「データを消去」ボタンを押す。
> 「閲覧履歴」や「Cookieと他のサイトデータ」のチェックは今回の件には関係ないのでチェックを外してから操作します。
> https://www.dropbox.com/s/hbv6yrdgkn02ue9/ChromeCacheClear.JPG?dl=0
>
>
> [1]はまだ怪しいですが、[2]はかなり期待できるかと思います。
>
> 通常のオンラインのサービスであればここまでの提案をすることはありません。
> あくまで、プログラムを書きたい人向けの提案です。いろいろ操作したり試してみたりすることでパソコンの仕組みにも詳しくなりますので。
>
> よろしければ、気の向く範囲/試してみたい範囲でやってみたうえで、結果をお知らせいただければ幸いです。
>
>
> > 小川慶一さん:
> > ブラウザの再起動
> > pcの再起動
> > [Shift]+[Ctrl]+[R]の操作
> > 全て、ダメでした。
> > 表示の不具合が発生しているのは第25回のみです。
> > 全ての回は確認しておりませんが、前後の回は問題ありません。
> > 当方のpcのみでの発生となると、当方のpc環境の不具合と切り分けられますが、第25回のみというのも、解せません。
> > とりあず、第25回のみEdgeで対応いたします。
> >
> > > 受講生 さん:
> > >
> > > お世話になります。
> > >
> > > 当方の手元の環境で確認しました。
> > > 同じ現象は起きていませんでした(Google Chrome使用)。
> > >
> > > たまたま、受講生さんのお手元のGoogle Chromeがこのページを読み込んだときに、読み込みに失敗があったか、通信上の問題があったのではないか?と思います。
> > >
> > > 今改めてこのページをGoogle Chromeで読み込んでも、同じ問題が起きますでしょうか?
> > > もし今でも同じ問題が起きているようでしたら、Google Chromeのキャッシュ(※)のせいかもしれません。
> > > ですので、もし同じ問題が続くようでしたら、[Shift]+[Ctrl]+[R]の操作(キャッシュをクリアして再読み込みするショートカット)をしてみてください。
> > >
> > > (※)通信にかかる負荷やページの表示までかかる時間を削減するため、以前読み込んだページの中身については、そのサーバに再取得しに行かず、以前読み込んだ内容を再表示する仕組み。
> > >
> > > よろしくお願いいたします。
> > >
> > >
> > > > 当方はネットブラウザをGoogle Chromeをメインで使っておりますが、添付ファイルのように表示に不具合があります。
> > > > 至急、修正をお願いいたします。
> > > > なお、Edgeでは正しく表示されております。


9912 : 小川慶一の回答 (2018-05-05 09:08:10)

受講生 さん:

> とりあず、第25回のみEdgeで対応いたします。

よろしくお願いします。

> ブラウザの再起動
> pcの再起動
> [Shift]+[Ctrl]+[R]の操作
> 全て、ダメでした。

Chromeはキャッシュのクリアが少し大変です。
しつこい油汚れのようなもので、他のブラウザであればキャッシュクリアできるはずの操作(上記のようなもの)でもうまくいかないことがあります。

ついては、簡単に試せることがあるとすれば、以下の2つです。

[1] 別URLを試してみる
[2] ChromeのUIからキャッシュ削除の操作をする。


[1] 別URLを試してみる

以下のURLではどうでしょう。
https://online.pc5bai.com/Movie/index/30/260?hoge=1&fuga=2&piyo=3

通常、違うURLの場合は違うページとみなされます。(違うページなので、キャッシュ読み込みではなく、ページそのものを再読込する)
上に紹介したリンク先の表示であればうまくいくのではないか?と少しは期待できるのですが。


[2] ChromeのUIからキャッシュ削除の操作をする。
おそらく以下のURLでできるかと思います。
chrome://settings/clearBrowserData

「基本」タブで、「キャッシュされた画像とファイル」のチェックが入ってることを確認した上で、「データを消去」ボタンを押す。
「閲覧履歴」や「Cookieと他のサイトデータ」のチェックは今回の件には関係ないのでチェックを外してから操作します。
https://www.dropbox.com/s/hbv6yrdgkn02ue9/ChromeCacheClear.JPG?dl=0


[1]はまだ怪しいですが、[2]はかなり期待できるかと思います。

通常のオンラインのサービスであればここまでの提案をすることはありません。
あくまで、プログラムを書きたい人向けの提案です。いろいろ操作したり試してみたりすることでパソコンの仕組みにも詳しくなりますので。

よろしければ、気の向く範囲/試してみたい範囲でやってみたうえで、結果をお知らせいただければ幸いです。


> 小川慶一さん:
> ブラウザの再起動
> pcの再起動
> [Shift]+[Ctrl]+[R]の操作
> 全て、ダメでした。
> 表示の不具合が発生しているのは第25回のみです。
> 全ての回は確認しておりませんが、前後の回は問題ありません。
> 当方のpcのみでの発生となると、当方のpc環境の不具合と切り分けられますが、第25回のみというのも、解せません。
> とりあず、第25回のみEdgeで対応いたします。
>
> > 受講生 さん:
> >
> > お世話になります。
> >
> > 当方の手元の環境で確認しました。
> > 同じ現象は起きていませんでした(Google Chrome使用)。
> >
> > たまたま、受講生さんのお手元のGoogle Chromeがこのページを読み込んだときに、読み込みに失敗があったか、通信上の問題があったのではないか?と思います。
> >
> > 今改めてこのページをGoogle Chromeで読み込んでも、同じ問題が起きますでしょうか?
> > もし今でも同じ問題が起きているようでしたら、Google Chromeのキャッシュ(※)のせいかもしれません。
> > ですので、もし同じ問題が続くようでしたら、[Shift]+[Ctrl]+[R]の操作(キャッシュをクリアして再読み込みするショートカット)をしてみてください。
> >
> > (※)通信にかかる負荷やページの表示までかかる時間を削減するため、以前読み込んだページの中身については、そのサーバに再取得しに行かず、以前読み込んだ内容を再表示する仕組み。
> >
> > よろしくお願いいたします。
> >
> >
> > > 当方はネットブラウザをGoogle Chromeをメインで使っておりますが、添付ファイルのように表示に不具合があります。
> > > 至急、修正をお願いいたします。
> > > なお、Edgeでは正しく表示されております。


9911 : 受講生さんのコメント (2018-05-04 14:07:16)

小川慶一さん:
ブラウザの再起動
pcの再起動
[Shift]+[Ctrl]+[R]の操作
全て、ダメでした。
表示の不具合が発生しているのは第25回のみです。
全ての回は確認しておりませんが、前後の回は問題ありません。
当方のpcのみでの発生となると、当方のpc環境の不具合と切り分けられますが、第25回のみというのも、解せません。
とりあず、第25回のみEdgeで対応いたします。

> 受講生 さん:
>
> お世話になります。
>
> 当方の手元の環境で確認しました。
> 同じ現象は起きていませんでした(Google Chrome使用)。
>
> たまたま、受講生さんのお手元のGoogle Chromeがこのページを読み込んだときに、読み込みに失敗があったか、通信上の問題があったのではないか?と思います。
>
> 今改めてこのページをGoogle Chromeで読み込んでも、同じ問題が起きますでしょうか?
> もし今でも同じ問題が起きているようでしたら、Google Chromeのキャッシュ(※)のせいかもしれません。
> ですので、もし同じ問題が続くようでしたら、[Shift]+[Ctrl]+[R]の操作(キャッシュをクリアして再読み込みするショートカット)をしてみてください。
>
> (※)通信にかかる負荷やページの表示までかかる時間を削減するため、以前読み込んだページの中身については、そのサーバに再取得しに行かず、以前読み込んだ内容を再表示する仕組み。
>
> よろしくお願いいたします。
>
>
> > 当方はネットブラウザをGoogle Chromeをメインで使っておりますが、添付ファイルのように表示に不具合があります。
> > 至急、修正をお願いいたします。
> > なお、Edgeでは正しく表示されております。


9908 : 小川慶一の回答 (2018-05-04 10:53:33)

受講生 さん:

お世話になります。

当方の手元の環境で確認しました。
同じ現象は起きていませんでした(Google Chrome使用)。

たまたま、受講生さんのお手元のGoogle Chromeがこのページを読み込んだときに、読み込みに失敗があったか、通信上の問題があったのではないか?と思います。

今改めてこのページをGoogle Chromeで読み込んでも、同じ問題が起きますでしょうか?
もし今でも同じ問題が起きているようでしたら、Google Chromeのキャッシュ(※)のせいかもしれません。
ですので、もし同じ問題が続くようでしたら、[Shift]+[Ctrl]+[R]の操作(キャッシュをクリアして再読み込みするショートカット)をしてみてください。

(※)通信にかかる負荷やページの表示までかかる時間を削減するため、以前読み込んだページの中身については、そのサーバに再取得しに行かず、以前読み込んだ内容を再表示する仕組み。

よろしくお願いいたします。


> 当方はネットブラウザをGoogle Chromeをメインで使っておりますが、添付ファイルのように表示に不具合があります。
> 至急、修正をお願いいたします。
> なお、Edgeでは正しく表示されております。


9900 : 受講生さんのコメント (2018-05-03 16:06:08)

添付ファイルのようにGoogle Chromeでは学習状況の表示にも不具合が発生しております。
第24回までは正常でした。


9899 : 受講生さんのコメント (2018-05-03 16:00:43)

当方はネットブラウザをGoogle Chromeをメインで使っておりますが、添付ファイルのように表示に不具合があります。
至急、修正をお願いいたします。
なお、Edgeでは正しく表示されております。


3301 : 小川慶一の回答 (2014-11-07 06:52:11)

匿名 さん:

>今回の場合はシート名が数字から始まるために「'」でシート名が囲まれているのだと思うのですが、
>「'」を付け忘れても自動で補完されるように思えます。
>それでも「'」は意識的につけた方がいいのでしょうか?

どちらもありですね。
「自分で意識してつける」と決めた場合は覚えることが減ります。
「勝手につけてくれるときはつけない」と決めた場合は実装の手間が(もしもうろ覚えではなく、ちゃんと覚えていれば)減ります。

可読性は、前者のほうが高いかもしれません。

そのあたりは、例によって以下↓の判断基準ですね。
「[質問] 同じ機能を実現するマクロの書き方が複数ある場合、どの書き方が良いか分からなくて迷います。」
http://www.exvba.com/blog/?p=4378


>このあたりになるとかなり難しく感じられるため、何とか読めても一から書けと言われると無理です。
>今回の場合はシート名が数字から始まるために「'」でシート名が囲まれているのだと思うのですが、
>「'」を付け忘れても自動で補完されるように思えます。
>それでも「'」は意識的につけた方がいいのでしょうか?


3300 : 受講生さんのコメント (2014-11-06 23:01:54)

このあたりになるとかなり難しく感じられるため、何とか読めても一から書けと言われると無理です。
今回の場合はシート名が数字から始まるために「'」でシート名が囲まれているのだと思うのですが、
「'」を付け忘れても自動で補完されるように思えます。
それでも「'」は意識的につけた方がいいのでしょうか?


3245 : ガラパゴスタディー事務局の回答 (2013-08-19 09:15:00)

望月さん:

> やはり自分で手を動かして作ってみると、理解が足りない箇所がよくわかります

大切ですね。

> 今回の事例で教えていただいた、基準を決めて相対指定する方法(OffsetやParent)が、いかに役立つかよくわかりました

基点を決めてそこからの相対距離でデータなりオブジェクトなりを取得する、というのは、ITでよくある考え方です。
「マクロの書き方」というレベルにとどめず、広く、世の中のどこでそんな手法が取り入れられているか探してみるのもおもしろいですよ。


3243 : 望月 晋一さんのコメント (2013-08-16 20:16:00)

Offsetを使うことで、Summaryへの記載行と、各月カレンダーへの記載行指定を一つの変数でこなすことができるんですね。自分で最初作ってみた時、二つ変数を使いました。他にも違うパターンで作ってみましたが、小川先生のお手本がやはり、考え方、組み立て方において、無理がなくわかりやすい事がよくわかりました。また、今回お教え下さったワークシート名の指定方法もとても便利です。やはり自分で手を動かして作ってみると、理解が足りない箇所がよくわかります。今回の事例で教えていただいた、基準を決めて相対指定する方法(OffsetやParent)が、いかに役立つかよくわかりました。


3192 : ガラパゴスタディー事務局の回答 (2013-04-12 16:24:00)

こんにちは。

> 気持ちいいですね。色がバラバラーっと変わっていくのを見てると思わず声が出てしまいます。

ですよね (^^*


> あとCreateMonthSheetもシートControlを削除しないように改変しました。

おもしろいです (^^*


> 借り物のパソコンだったからというのは言い訳になりますので速攻で設定しました。
> すみませんでした。

option explicit の設定は、自分がプログラムを楽に書くために、自分のためにすることです。
僕に謝るところではないです。

初期設定というのは、仕事を進めるうえでの前提です。

前提をしっかりおさえていないと、ひどいときは、はしごの掛け違いになりますね。港湾作業の現場だったなら、それは死を意味します。(僕は死ななかったですが、大けがをしました。セミナーでもお話ししたとおり)
プログラムであれば、前提をしっかりおさえていないということは、その手順書をそのまま実行すると、山根さんが上司か小人ちゃんか、誰が死ぬということです。部署がなくなるとか、会社が倒産するということかもしれない。仕事でマクロ書いていますか。ぜひいちど初期設定で手を抜いて、誰かを殺してみてください。そうすれば、二度とこういう失敗はしなくなるでしょう。


3190 : 山根信行さんのコメント (2013-04-10 23:23:00)

Option Explicit
借り物のパソコンだったからというのは言い訳になりますので速攻で設定しました。
すみませんでした。

宿題なかなか難しいです。

Option ExplicitDim dtFm As DateSub CreateCalendar16()    Worksheets("Summary").Activate    Range("A2:E65536").Font.Color = 0    '追加    Dim ln As Long    ln = Range("A65536").End(xlUp).Row    If ln > 1 Then        Range("A2:E" & ln).ClearContents    End If        CreateMonthSheet    Dim c As Long        For c = 1 To 12        dtFm = DateAdd("m", c - 1, #1/1/2009#)        Worksheets(c & "月").Activate        ExeCreateCalendar16        hlClr       '追加    Next    Worksheets("Summary").Activate    hlClr       '追加End Sub

CreateCalendar16をこのように改変し、
以下のhlClrを作成しました。
Sub hlClr()    Dim rwMx As Long    Dim dtAria As Range    Dim r As Range    Dim wsCtrl As Worksheet    Dim cnt As Long    Dim clm As Long    rwMx = ActiveSheet.Range("A65536").End(xlUp).Row    Set dtAria = ActiveSheet.Range("A2:E" & rwMx)    Set wsCtrl = Worksheets("Control")    For Each r In dtAria        For cnt = 2 To 8            If r.Value = wsCtrl.Range("A" & cnt).Value Then                For clm = -1 To 3                    r.Offset(, clm).Interior.Color = wsCtrl.Range("A" & cnt).Interior.Color                    r.Offset(, clm).Font.Color = wsCtrl.Range("A" & cnt).Font.Color                Next            End If        Next    NextEnd Sub

気持ちいいですね。色がバラバラーっと変わっていくのを見てると思わず声が出てしまいます。
しかし実行すると枠線が消えてしまいます。この原因は検討つきませんのでフォローセミナーNo.26であきらかになりますかどうかです。
あとCreateMonthSheetもシートControlを削除しないように改変しました。


3189 : ガラパゴスタディー事務局の回答 (2013-04-08 10:15:00)

山根さん:

Option Explicit 、入れています?
宣言されていない変数があるようですが。


> 予期しない動きをしてもそれを修正していくのがほんと楽しいです。
> その後、サンプルコードと見比べ、サンプルコードを再度書いてみてみました。

ですね。
他人の評価を恐れず、子供の遊びのように、純粋に楽しんでください。

自分で考え抜いてそれなりに動くコードを書けたなら、それはすごいことですよ。がっくりしないように。反応が逆です ヾ(´ー`)ノ


3187 : 山根信行さんのコメント (2013-04-07 22:20:00)

ご教授ありがとうございます。
すべてなかったことにしてイチからトライしてみました。
サンプルコードを何度も実行して何度も動きを確認したその後、新しくモジュールを追加し同じ結果になるマクロを自力で書いてみて自分なりに理解を深めようとしました。
それが以下です。

Dim mDt As DateSub setWorksheet()    Dim ws As Worksheet    Dim summaryDT As Long    Dim cpMX As Long    summaryDT = Worksheets("Summary").Range("A65536").End(xlUp).Row    Worksheets("Summary").Activate    If summaryDT > 1 Then        Range("A2:E" & summaryDT).Value = ""    End If    Application.DisplayAlerts = False    For Each ws In Worksheets        If ws.Name <> "Summary" Then            ws.Delete    End If    Next    Application.DisplayAlerts = True    For cnt = 1 To 12        mDt = DateAdd("m", cnt - 1, #1/1/2009#)        Worksheets("Summary").Copy AFTER:=Worksheets(Worksheets.Count)        ActiveSheet.Name = cnt & "月"        cpMX = ActiveSheet.Range("A65536").End(xlUp).Row        If cpMX > 1 Then            Range("A2:E" & cpMX).Value = ""        End If        Call Calender    NextEnd SubSub Calender()    Dim dDt As Date    Dim summaryMX As Long    Dim G As Long    dDt = mDt    G = 0    summaryMX = Worksheets("Summary").Range("A65536").End(xlUp).Row + 1    Do While Month(mDt) = Month(dDt)        With Range("A2")            .Offset(G, 0).Value = dDt            .Offset(G, 1).Value = WeekdayName(Weekday(dDt))            .Offset(G, 2).Value = #9:00:00 AM#            .Offset(G, 3).Value = #5:00:00 PM#            .Offset(G, 4).Formula = "=" & .Offset(G, 3).Address & "-" & .Offset(G, 2).Address        End With        dDt = DateAdd("d", 1, dDt)        With ActiveSheet.Range("A2")            For summaryCLM = 0 To 4                Worksheets("Summary").Range("A" & summaryMX).Offset(G, summaryCLM) = "='" & .Worksheet.Name & "'!" & .Offset(G, summaryCLM).Address            Next        End With        G = G + 1    LoopEnd Sub

サンプルコードと見比べると随分違っていてがっくりきました。
先生から「フォローセミナーNo.25で教えたかったのはそんなことではない」と怒られそうですが。
でも面白かったです。
予期しない動きをしてもそれを修正していくのがほんと楽しいです。
その後、サンプルコードと見比べ、サンプルコードを再度書いてみてみました。

まだまだ頑張ります!


3185 : ガラパゴスタディー事務局の回答 (2013-04-06 13:51:00)

山根さん、

がんばっていますね!


ずっと前の投稿に戻りますが。

> 変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。

↑上記の問いには、2つの問題があったわけです。

[1] ひとつは、予想がはずれていること。
[2] 予想に対して責任を取ろうという態度が見られなかったこと。(責任を取るためにできる限りの調査をした様子が見られなかった)

[1] の問題は、 [2] で責任を取ろうとしていれば起こらなかったことです。

山根さんの場合は、あやふやな書き方にせず、もっとハッキリ言い切る習慣をつけるようにしたほうがよいかと。
ここは学びの場です。学びの場では、ハデな失敗をしてナンボだ、ということを忘れないように。(そのほうが覚えます)

もう一度、ここまでのやりとりのことはすべて忘れて、

> 変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。

という問いから、すべて考え直してみてください。
あるいは、すべて忘れたうえで、サンプルコードを読み返してみる。まるで同じものをイチから作り直してみる。


- - -

基礎編冒頭にも時間をかけて言いましたが、常に、予測を立てることです。

「こういう質問をしたら、どういう回答が返ってくるだろうか」という予測を立てることです。

そうすると、先回りして予測した返答に対して、自分で答えることで、さらに思考を深めることができます。
思考をもうワンランク先に進めることができます。

「小人ちゃんの立場になって考える」というのと、本質的には同じです。

For Next 構文の中の If 文の中の Do Loop 構文の中の If 文 の中に書かれることについて考え抜こうとすること。

あるいは逆に、入れ子構造の一番奥に書くべきことの、ひとつ外側の If 文、 その外側の Do Loop構文、 その外側の If 文、その外側の For Next 構文について考え抜こうとすること。

いい仕事につながるマクロを書きたいなら、自問自答をくり返すこと。すべてつながっています。


どういう態度をとればよいか迷うことがあったら、基礎編でお渡ししたマインドマップの2枚目を読み返しながら考えてみてください。



> これはinMXがモジュールレベル変数でないからプロシージャが変わると0になるのだろうと結論しました。

↑ 0 になるのではなく、破棄されます。

基礎編で、小人ちゃんを使って変数の説明をしたとき。

小人ちゃんは、「End Sub」の行を読んだあと、 zeiritsu という変数の値と名前を
黒板消しで消していましたよね。(値を 0 になおしたのではなく)、覚えているかな?小人ちゃんのイラストばかりのプリントをお渡ししているかと思います。探して、中身を確認してみてください。


いつも辛口ですいません。


3184 : 山根信行さんのコメント (2013-04-04 23:33:00)

あやふやな書き方になってしまいすみませんでした。

まず、
>> 変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。

これに対する答えは「いいえ」です。
この時も指差ししてコードを順に読んでいったつもりで何をどう勘違いしたのかわかりませんが、このFor NextはExeCreateCalendar内のDo Loopの中に記述されたものを指しておりました。
そして先生から
>lnMxの値が変わる瞬間は、どこか、指さしして確認してみてください。
と言われて再度指差してコードを追うとCreateCalendar
内のFor Nextの中のExeCreateCalendarであるとわかりました。
ここから初めてCreateCalendarをF8で実行しての指差し確認をしました。
そして先ほどのまでを実行後、さらにFor Next内を実行しExeCreateCalendarに移って
lnMx = shSummary.Range("A65536").End(xlUp).Row + 1
を実行した瞬間にinMXの値が変わります。

ただその時、頭の中ではてなマークが出たのは、
CreateCalendar→ExeCreateCalendar→CreateCalendar
と12回実行しますが、CreateCalendar実行中はinMXがからっぽになります。
これはinMXがモジュールレベル変数でないからプロシージャが変わると0になるのだろうと結論しました。

inMXの値が変わる瞬間と言われるとExeCreateCalendarからCreateCalendarに戻った瞬間にも変数の中身は2から0になりますし先生のおっしゃる「瞬間」とはどの瞬間だろうかと考えてしまいました。
そこで「まさかからっぽになった瞬間ではないだろう」という結論に至ったのですが、あまり自信がなかったのです。
なのであのようなあやふやな書き方をしてしまいました。

以後、気をつけます。
コメント・フィードバックも手順書だと思い書かせていただきます。


3183 : ガラパゴスタディー事務局の回答 (2013-04-04 12:37:00)

> プロシージャCreateCalendar内のFor Next内にあるプロシージャExeCreateCalendarの実行ごとでしょうか。
> ワークシートSummaryのA列の月が変わるごとに変数inMXが変わっていると思います。

「でしょうか。」って言っているてことは、指さしてないのかな。

僕の問いは「lnMxの値が変わる瞬間は、どこか、指さしして確認してみてください。」でした。
指さした対象は、都度、一カ所しかないはずですよ。

複数箇所あれば、複数箇所を指さしているはずです。

指さして、声を出して、指を折って数えてください。
それはどこですか。合計何カ所ありますか。

そして。

>> 変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。

↑上記の問いに、自分なりに「はい」か「いいえ」のどちらかで答えを示してください。
つづきはそれから。

正解を示す努力を人にゆだねないように。
少なくとも、そういう努力を人にゆだねたような書き方はしないように。
このフォローはテキストベースのやりとりですから、相手が文字を読んだだけで細かい意図まで伝わるようにしましょう。

そういった努力の積み重ねが、プログラムの可読性も高めますし、人のプログラムを読むときの読解力も高めます。


3181 : 山根信行さんのコメント (2013-04-02 22:27:00)

inMXの値が変わる瞬間。
プロシージャCreateCalendar内のFor Next内にあるプロシージャExeCreateCalendarの実行ごとでしょうか。
ワークシートSummaryのA列の月が変わるごとに変数inMXが変わっていると思います。
実際そうでしたが、初期値は見出ししかありませんので2でした。
inMX+cで値を入れる行を変えるかOffset(c, で値を入れる行を変えるかの違いだと思います。

感じてみます。のニュアンス、なんとなくわかります。
僕の場合ですが、書きたいコードの全体像がにじんだ墨絵のように浮かび組み込むべき部品の位置がうすいピンク色でマーキングされたような感覚になる時があります。
ですが、書き出して全然ダメだったりまったく違っていたりすることもよくあります。

宿題、少しやっておりましたが、難解です。
もう少しやってみて解説に移ります。


3178 : ガラパゴスタディー事務局の回答 (2013-04-02 20:26:00)

山根さん:

がんばっていますね!


> ほんとに解説は、まずは動くマクロを小さい部品から大きくしていくといった具合でわかりやすいです。

実際、そうなので。。僕だって、いまだにそうやってプログラム書いていますよ。

基本的に、人間の脳は、構造とコンテンツを同時に考えることが苦手なので。

ということで。

> しかしながらとてもとてもスラスラにはほど遠いです。
> まだ解説を見て「あ、そうだった」となる具合ですね。

まずは、構造だけに着目し、作業全体の流れをつかんでみてください。

作業全体の流れが見えたとき、流れの中の個々の作業のやり方のイメージがすぐにつくかを感じてみます。
(あえて、「考えてみます」ではなくて、「感じてみます」と書きました。「考える」というと、考えちゃいそうだから。このニュアンスの違い、伝わりますか?)

> RangeオブジェクトのNameプロパティを任意に設定しておくと

そのオブジェクトを取得するための手続きを簡単に書けますね。
ときおり有力な手法です。


> shSummary.Range("A" & lnMx)
> をDo Loopの外へ出した時になぜ+cが不要になったのか最初わからずにかなり悩みました。
> 変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。

Set rgSummary = shSummary.Range("A" & lnMx)
rgSummary.Offset(c, cYoko).Formula = "='" & .Worksheet.Name & "'!" & .Offset(c, cYoko).Address

とするほうが、

shSummary.Range("A" & lnMx + c).Offset(, cYoko).Formula = "='" & .Worksheet.Name & "'!" & .Offset(c, cYoko).Address

とするより可読性高そうかな、ということで書き直してみたのがそもそもの発想です。

lnMxの値が変わる瞬間は、どこか、指さしして確認してみてください。
左辺が lnMx = ではじまっているところを見つけます。



3175 : 山根信行さんのコメント (2013-04-01 21:54:00)

宿題、いちから何も見ずにすべてを書き上げるという意味ではなかったんですね。勘違いしておりました。
ほんとに解説は、まずは動くマクロを小さい部品から大きくしていくといった具合でわかりやすいです。
しかしながらとてもとてもスラスラにはほど遠いです。
まだ解説を見て「あ、そうだった」となる具合ですね。

今回の
Range("A1").Worksheet.Name
は収穫でした。
するとRangeオブジェクトのNameプロパティを任意に設定しておくと膨大なシート数の膨大なセル範囲であっても容易に取り扱うことができそうです。

shSummary.Range("A" & lnMx)
をDo Loopの外へ出した時になぜ+cが不要になったのか最初わからずにかなり悩みました。
変数inMXの数値が変わるのはFor Nextが終わる直前だからということでいいんでしょうか。


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 発展編1 フォローメールセミナー 第1回
    【動画1】 発展編1 フォローメールセミナー 第1回 未習得
  2. 【動画2】 発展編1 フォローメールセミナー 第2回
    【動画2】 発展編1 フォローメールセミナー 第2回 未習得
  3. 【動画3】 発展編1 フォローメールセミナー 第3回
    【動画3】 発展編1 フォローメールセミナー 第3回 未習得
  4. 【動画4】 発展編1 フォローメールセミナー 第4回
    【動画4】 発展編1 フォローメールセミナー 第4回 未習得
  5. 【動画5】 発展編1 フォローメールセミナー 第5回
    【動画5】 発展編1 フォローメールセミナー 第5回 未習得
  6. 【動画6】 発展編1 フォローメールセミナー 第6回
    【動画6】 発展編1 フォローメールセミナー 第6回 未習得
  7. 【動画7】 発展編1 フォローメールセミナー 第7回
    【動画7】 発展編1 フォローメールセミナー 第7回 未習得
  8. 【動画8】 発展編1 フォローメールセミナー 第8回
    【動画8】 発展編1 フォローメールセミナー 第8回 未習得
  9. 【動画9】 発展編1 フォローメールセミナー 第9回
    【動画9】 発展編1 フォローメールセミナー 第9回 未習得
  10. 【動画10】 発展編1 フォローメールセミナー 第10回
    【動画10】 発展編1 フォローメールセミナー 第10回 未習得
  11. 【動画11】 発展編1 フォローメールセミナー 第11回
    【動画11】 発展編1 フォローメールセミナー 第11回 未習得
  12. 【動画12】 発展編1 フォローメールセミナー 第12回
    【動画12】 発展編1 フォローメールセミナー 第12回 未習得
  13. 【動画13】 発展編1 フォローメールセミナー 第13回
    【動画13】 発展編1 フォローメールセミナー 第13回 未習得
  14. 【動画14】 発展編1 フォローメールセミナー 第14回
    【動画14】 発展編1 フォローメールセミナー 第14回 未習得
  15. 【動画15】 発展編1 フォローメールセミナー 第15回
    【動画15】 発展編1 フォローメールセミナー 第15回 未習得
  16. 【動画16】 発展編1 フォローメールセミナー 第16回
    【動画16】 発展編1 フォローメールセミナー 第16回 未習得
  17. 【動画17】 発展編1 フォローメールセミナー 第17回
    【動画17】 発展編1 フォローメールセミナー 第17回 未習得
  18. 【動画18】 発展編1 フォローメールセミナー 第18回
    【動画18】 発展編1 フォローメールセミナー 第18回 未習得
  19. 【動画19】 発展編1 フォローメールセミナー 第19回
    【動画19】 発展編1 フォローメールセミナー 第19回 未習得
  20. 【動画20】 発展編1 フォローメールセミナー 第20回
    【動画20】 発展編1 フォローメールセミナー 第20回 未習得
  21. 【動画21】 発展編1 フォローメールセミナー 第21回
    【動画21】 発展編1 フォローメールセミナー 第21回 未習得
  22. 【動画22】 発展編1 フォローメールセミナー 第22回
    【動画22】 発展編1 フォローメールセミナー 第22回 未習得
  23. 【動画23】 発展編1 フォローメールセミナー 第23回
    【動画23】 発展編1 フォローメールセミナー 第23回 未習得
  24. 【動画24】 発展編1 フォローメールセミナー 第24回
    【動画24】 発展編1 フォローメールセミナー 第24回 未習得
  25. 【動画25】 発展編1 フォローメールセミナー 第25回
    【動画25】 発展編1 フォローメールセミナー 第25回 未習得
  26. 【動画26】 発展編1 フォローメールセミナー 第26回
    【動画26】 発展編1 フォローメールセミナー 第26回 未習得
  27. 【動画27】 発展編1 フォローメールセミナー 第27回
    【動画27】 発展編1 フォローメールセミナー 第27回 未習得
  28. 【動画28】 発展編1 フォローメールセミナー 第28回
    【動画28】 発展編1 フォローメールセミナー 第28回 未習得
  29. 【動画29】 発展編1 フォローメールセミナー 第29回
    【動画29】 発展編1 フォローメールセミナー 第29回 未習得
  30. 【動画30】 発展編1 フォローメールセミナー 第30回
    【動画30】 発展編1 フォローメールセミナー 第30回 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ