
:コレクションを対象にしたFor Each構文の利用について学ぶ。文字列か一定の条件を満たしているかどうかを元にして条件分岐する手法を学ぶ。
この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。
このページへの投稿/コメント
私もやりました「 .Color と .ColorIndex」
マクロの記録で「5287936」と出て作って解答見たら
「10」って書いてあったからなんだ「10」でいいのかと
やってみたら見出しが黒くなった(笑)
関数はどれをつかえばいいのか?どんな式を立てればいいのか?
スッとわかるようなっていて、自分で驚きました。
基礎編でみっちりやった成果なのだと思いました(^^♪
For Next構文は 2 to 15のように数字をしていしますが For Each構文は、しなくていいんですよね
あと基礎編で学んだLeft関数、Right関数、len関数、Instr関数は悩むことなく、うまく組み合わさりました。
難しかったのは色の設定。エクセルのバージョンによって違ってくるのですね。
完全には理解が難しいですが、自動記録から試行錯誤して形作ることはできました。
発展編になって自動記録の中身が読めるのは、かなりの強みですね。
>完全には理解が難しいですが、自動記録から試行錯誤して形作ることはできました。
それができるようになっていただけるのがウチの講座の真髄なのでw
直接習ってないことも勝手に上達していっていただけると僕もうれしいです。
>発展編になって自動記録の中身が読めるのは、かなりの強みですね。
まさに!ですね! ヾ(´ー`)ノ
>今回でFor Each構文についてしっくりくるようになりました。
>あと基礎編で学んだLeft関数、Right関数、len関数、Instr関数は悩むことなく、うまく組み合わさりました。
>難しかったのは色の設定。エクセルのバージョンによって違ってくるのですね。
>完全には理解が難しいですが、自動記録から試行錯誤して形作ることはできました。
>発展編になって自動記録の中身が読めるのは、かなりの強みですね。
この投稿へのコメント権限がありません
問題4の中での質問になります。
発展編の内容とは関係がない部分での質問で申し訳ありません。
"印刷"の文字を抽出するために、Mid関数とLen関数を使いました。
(Right関数が思いつかなかったため)
イミディエイトウィンドウでは、"印刷"の文字が抽出できているように
見えるのですが、IF文の分岐がうまくできませんでした。
(タブの色付けを実行しないでEnd Ifに行ってしまいます)
Sub Mondai4()
Dim w As Worksheet
For Each w In Worksheets
Debug.Print w.Name
Debug.Print Mid(w.Name, Len(w.Name) - 1)
Debug.Print Right(w.Name, 2)
If Mid(w.Name, Len(w.Name) - 2) = "印刷" Then '【Rightが思いつかず、Midでやりました】
'If Right(w.Name, 2) = "印刷" Then 【お手本の答え】
w.Tab.ColorIndex = 13
End If
Next
End Sub
Right関数で得られた値と、どのように違うのかがわかりませんでした。
どうぞよろしくお願いいたします。
おもしろい取り組みですね!いろいろトライするのはいいことだと思います。
ご質問の件。
イミディエイトウィンドウへの出力では
Mid(w.Name, Len(w.Name) - 1) '[1]
となっていますが、
条件分岐では、
Mid(w.Name, Len(w.Name) - 2) '[2]
となっています (^^;
こういうミスを減らすには、ですが。。
ずばり、[2]を書くときには、[1]をコピペして貼りつけてください。そうすると、確実です。
>いつもお世話になります。
>問題4の中での質問になります。
>発展編の内容とは関係がない部分での質問で申し訳ありません。
>
>"印刷"の文字を抽出するために、Mid関数とLen関数を使いました。
>(Right関数が思いつかなかったため)
>
>イミディエイトウィンドウでは、"印刷"の文字が抽出できているように
>見えるのですが、IF文の分岐がうまくできませんでした。
>(タブの色付けを実行しないでEnd Ifに行ってしまいます)
>
>
>Sub Mondai4()
> Dim w As Worksheet
> For Each w In Worksheets
> Debug.Print w.Name
> Debug.Print Mid(w.Name, Len(w.Name) - 1)
> Debug.Print Right(w.Name, 2)
>
> If Mid(w.Name, Len(w.Name) - 2) = "印刷" Then '【Rightが思いつかず、Midでやりました】
> 'If Right(w.Name, 2) = "印刷" Then 【お手本の答え】
>
> w.Tab.ColorIndex = 13
> End If
> Next
>End Sub
>
>
>Right関数で得られた値と、どのように違うのかがわかりませんでした。
>どうぞよろしくお願いいたします。
いえいえ、最初はよくあることです (^^;
この手の間違いを検出する方法のひとつは、
声を出して、指さし確認しながらプログラムを点検することです。
[1]のプログラムを大きくはっきりした声を出しながら点検していたとすれば、[2]のプログラムを読み上げたところで「ん・・・?」と思ったかもしれません。
ショートカットとコピペの技術も大切です。
タイピングの練習と並行して行ってください!
ひきつづき、お楽しみを☆
>小川先生
>
>お恥ずかしい・・・。(^^;
>キーボード入力の上達を願い、
>マクロを書くときも、いちいち手で入力しておりました。
>
>今後は、
>マクロを書く時はショートカットとコピペを徹底的に心がけます。
>キーボードの練習は別途特打で練習します。
>
>有り難うございました!
この投稿へのコメント権限がありません
オンライン講座で駆け足で5章まで見終わり、あとはフォローアップで体に叩き込んでいきたいところです。
今回のフォローアップ2も、かなり歯ごたえがありました。
ところで、オープニング問題で、セルの色を変える動作を自動記録で保存すると、以下のようになります。
Sub Macro5()
'
' Macro5 Macro
'
'
With Selection.Font
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.799981688894314
End With
End Sub
使用しているExcelのバージョンは2007です。
色選択の際には、以下の画面が出てきます。
http://www5d.biglobe.ne.jp/~middle/excelcolor.JPG
動画と同じようにならず、そのまま
結局こういうページを見て色を参照して、該当する数値をコードの中に入力しております。
http://www.relief.jp/itnote/archives/000482.php
今回気になった所としてはそんな所でした。
それではよろしくお願いします。
xlThemeColorAccent5 で調べてみると、いろいろ出てくると思います。
たとえば、以下。
http://www.happy2-island.com/excelsmile/smile03/capter00608.shtml
excel2007以降での色指定はexcel2003のころに比べいろいろややこしくなっていますね。
そのほかについては、この掲示板の過去投稿も見てみてください。またいろいろ学びになるかと思います。
自分で好きに色を決めたいということでしたら、 .color プロパティの値を、 rgb関数で自由に設定する、というのがお勧め(というか、いちばんIT的)です。
たぶん、荏隈さんにもいちばんそれがおすすめかと。
ひきつづきお楽しみください!
この投稿へのコメント権限がありません
ナオさんの投稿
(投稿ID: 4862)
.ColorIndex =13と表示されていますが、私のエクセル(2019)で実行してみると .Color = 10498160と表示されます。.ColorIndex と表示させるのに何か設定?とかありますでしょうか。
また過去コメントをキーワードで検索する事は可能でしょうか。
小川 慶一さんのコメント
(コメントID: 6814)
おはようございます。
> .ColorIndex =13と表示されていますが、私のエクセル(2019)で実行してみると .Color = 10498160と表示されます。.ColorIndex と表示させるのに何か設定?とかありますでしょうか。
この動画を収録したときのエクセルのバージョンですと、特に工夫しないで自動記録をすると、 .ColorIndex で記録されます。
今は、 .Color で自動記録されます。
.ColorIndex は、あからじめ指定された色番号で色を指定するときの書き方です。
.Color は、 RGB関数で色指定をするときの書き方です。赤、緑、青の発色具合を0-255の範囲で指定します。
例: Range("A1").Interior.Color = RGB(126, 32, 64)
RGB関数の戻り値は、「第一引数の値 * 256 ^ 0 + 第二数の値 * 256 ^ 1 + 第三引数の値 * 256 ^ 2」です。
以下、試してみてください。理解が深まるかと思います。
Sub RGB_func_value() Range("A1").Interior.Color = 4202622 Range("A2").Interior.Color = RGB(126, 32, 64) Debug.Print Range("A1").Interior.Color = Range("A2").Interior.Color 'True Dim r As Long, g As Long, b As Long Dim r_rgb As Long, g_rgb As Long, b_rgb As Long r = 126 g = 32 b = 64 r_rgb = r * 256 ^ 0 g_rgb = g * 256 ^ 1 b_rgb = b * 256 ^ 2 Debug.Print (r_rgb + g_rgb + b_rgb) '4202622 End Sub
このページのコメント584あたりからのやりとりも参考になるかと思います。
> また過去コメントをキーワードで検索する事は可能でしょうか。
すでにお気づきと思いますが、各ページにあるコメントは、前述のとおり、ページをスクロールしていくことでみつけられます。
講座横断的な検索方法は、現在提供できていません。
今リリース準備中の新システムでは講座横断的に検索できるように準備しています。恐縮ですが、そちらの新機能の利用については、もうしばらくお待ちいただけますでしょうか。
今後とも気軽にいろいろご質問、ご要望いただければと思います。
ひきつづきどうぞよろしくお願いいたします。
ナオさんのコメント
(コメントID: 6815)
コメントありがとうございます。
ColorIndex 、Color について、質問されている方がいましたね。
確認不足でした。ありがとうござます。
他の方もコメントされていましたが、発展偏になって急にハードルが上がったように感じています^^;
どんどん先に進めたくなりますが、あせらずじっくり知識を定着さます。
小川 慶一さんのコメント
(コメントID: 6817)
コメントありがとうございます。
> ColorIndex 、Color について、質問されている方がいましたね。
> 確認不足でした。ありがとうござます。
システムの使い勝手の問題もあるかと思います。ひきつづき改善していきたいと思っています。どうぞよろしくお願いいたします。
> 他の方もコメントされていましたが、発展偏になって急にハードルが上がったように感じています^^;
> どんどん先に進めたくなりますが、あせらずじっくり知識を定着さます。
抽象度が高くなるので、どうしてもそこは仕方ありませんね。
とはいえ、概念への理解が追いつけば、書けるマクロの質も急激にあがります。楽しみに学んでください。
この投稿へのコメント権限がありません