
【この動画で使用する教材ファイル】
・Kiso04_03IfThen
・kiso_mm_movie.pdf(P7:主要な「構造」)
※講座内で使用する資料は、この個別ページ内でダウンロードできます。
この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。
学習記録としてメモを残す
質問や感想を投稿する
投稿時に 記号が \ に変換されてしまいますが、気にせず投稿してください。※投稿に必要な権限がありません。
このページへの投稿/コメント
セル範囲を変数で置き換える手順は、「手堅く」ですね。
わかりました。
本やネット検索して苦労してマクロを書いていた頃の自分に教えてあげたいです。
もっと早いうちに、この講座に出会っていればと思います。
コメントありがとうございます。
一気に大きい成功を得ようとすると失敗します。
細かい成功をつみあげていくのがプログラミングのコツです。
ただ、こういうのは、紙で説明するとなると紙面を割きますし、その割に結局わかりにくいです。
動画はその点強力ですね。
ひきつづき、講座お楽しみいただければと思います。
9:00~の文字の範囲について要復習!
結論だけ書くと、最終行を調べるには、以下のように書きます。
A列なら:
Dim saigo
saigo = Range("A" & Rows.Count).End(xlUp).Row
第4章の各種問題で試してみてください。
(データが1個もない場合についても試してみてください)
ただし、基礎編レベルでは「なんて書いてあるのか?」とか、「なぜこのコードで動くのか?」とか、「このコードで問題なく動くようにするには、どんな条件を満たさなければならないか?」といったことは説明できないので、そこについては、 tyu さんがいずれ発展編1まで学習を進められることがあれば、そのときにと思います。
> データの数(行数)が可変である場合、for next の数値をどのようにするのがいいのでしょうか。一個もない場合も含めて。
発展編1を申込みましたので、そのときに改めて学習します。
お返事ありがとうございます。
ともあれ、活用してしまうのがよいかと思います。
使っているうちに目や手に馴染んできて、ついに解説!というときにも、すんなり入りやすいかと。
ひきつづきよろしくお願いいたします。
> わかりました。
> 発展編1を申込みましたので、そのときに改めて学習します。
今まで何度もIf構文とFor Next構文でつまづいていましたが、理解できていなかったのと、全体の構造をつかめていなかったことが、改めてわかりました。ありがとうございます。
個々の部品に分けて作業するのがポイントです。
この考え方とそれに従った作業ができるようになれば、マクロはモノにできたようなものですよ!
ひきつづきお楽しみください☆
> とてもわかりやすいです!
> 今まで何度もIf構文とFor Next構文でつまづいていましたが、理解できていなかったのと、全体の構造をつかめていなかったことが、改めてわかりました。ありがとうございます。
range("a" & gyo & ": j" & gyo)・・・文字列のdrillでも似たよ
うなことをやりましたが、ついrange("a" & gyo : "j" & gyo)書いてしますのですが(もちろんエラー) : j の部分を &で結合し、文字列にするため""をつけ & " : j"にするという理解でいいのでしょうか?
>: j の部分を &で結合し、文字列にするため""をつけ & " : j"にするという理解でいいのでしょうか?
そういう悩まれ方をされているということは、理解以前に練習が足りないということです。
以下のドリルをやりなおしてください。
https://forum.pc5bai.com/lesson/page/119
https://forum.pc5bai.com/lesson/page/120
そのうえで、上記ページの他の受講生の方とのやりとりもひととおり読んでください。
(下にある投稿ほど古いものです)
特に、前者の「きんとうん」にかかるやりとりは参考になるかと。
頭で考える前に、手を使って細かいひとつひとつステップを踏んで作業する習慣を見につけてください。
Else
End If
の型を紙に書いて暗記しよう。
複数条件は難しい。。。汗
こんなの、かけ算九九よりだいぶ簡単です。
小学2年生修了経験があれば、覚えられますよ!
> If [条件]Then
> Else
> End If
> の型を紙に書いて暗記しよう。
>
> 複数条件は難しい。。。汗
>
おだんご作りから始めて、1行テストで忠実にハナコのステップを進めると、確実に完成することを確認できました。
rangeのセル範囲指定にカウント変数をあてはめるところで何回か赤が出ましたが、
数字とそれ以外を切り分けてから変数にすると、うまくいきますね!
変数への加工にショートカットのコピペを使うことにも慣れてきました。
まだまだ練習が足りないですけれど、
こんなに簡単にIF構文が完成することに勇気づけられています。
gooska
>おだんご作りから始めて、1行テストで忠実にハナコのステップを進めると、確実に完成することを確認できました。
>こんなに簡単にIF構文が完成することに勇気づけられています。
手順の分解と忠実な実践がすべてです。
ところで、条件文の方を2つにしたい場合、どういったコードを書けばよいのでしょうか。動画の中の例でいうと、男性でかつ合格した場合に、コメントを”やったね”とし、男性で不合格の場合には”次にがんばろう”、女性で合格した場合には”おめでとうございます”、女性で不合格の場合には”あとちょっとでしたね”などというようなケースを想定しています。
>ところで、条件文の方を2つにしたい場合、どういったコードを書けばよいのでしょうか。
演習問題の前半で登場します。お楽しみに☆
>Range("i" & cnt & ":j" & cnt).Font.Color = vbRedといった複数範囲指定と変数を組み合わせたコードを書くのは四苦八苦でした。特に":j"のように、:まで””で括るという発想が思いつきませんでしたので、参考になりました。
>ところで、条件文の方を2つにしたい場合、どういったコードを書けばよいのでしょうか。動画の中の例でいうと、男性でかつ合格した場合に、コメントを”やったね”とし、男性で不合格の場合には”次にがんばろう”、女性で合格した場合には”おめでとうございます”、女性で不合格の場合には”あとちょっとでしたね”などというようなケースを想定しています。
お世話になります。
基本的な質問ですが、マクロ実行後に、エクセル画面上で元に戻す(例えばCtrl+Z)ことはできないのでしょうか。元に戻す矢印アイコンも無効になっているので無理だとは思いますが
設定で変えることもできないのでしょうか。
[Ctrl] + [Z] ではマクロで処理したエクセルファイルの状態を元に戻すことはできません。
心配な場合は、マクロ実行前にバックアップを作成しておき、それからマクロ実行!という流れでいくよりないですね。
あとは、ファイルは保存しないでまた開いて再度チャレンジか。
フォローアップ動画の中で、実際に僕がそういう作業をしている様子を収録している回がありますので、そちらも参考にしていただければと思います。
>小川様
>お世話になります。
>基本的な質問ですが、マクロ実行後に、エクセル画面上で元に戻す(例えばCtrl+Z)ことはできないのでしょうか。元に戻す矢印アイコンも無効になっているので無理だとは思いますが
>設定で変えることもできないのでしょうか。
Dim gyo
For gyo = 2 To 11
If Range("e" & gyo).Value = "女性" Then
Range("i" & gyo) = "女性です"
Range("j" & gyo) = "ステキですね"
Range("a"&gyo&":j"&gyo).Font.Color = vbRed
とやると
Range("a"&gyo&":j"&gyo).Font.Color = vbRed
の部分が赤くなって怒られます。
2つめの&の前に空白を入れ、
Range("a"&gyo &":j"&gyo).Font.Color = vbRed
カーソル移動するとOKしてくれます。
上2つは入力するときに&の前に空白を
Range("i"&gyo) = "女性です"
Range("j"&gyo) = "ステキですね"
入れなくてもOKしてくれます。
たしか、エクセルマクロは空白とかをたくさん入れても、逆に入れなくても小人ちゃんが認識してくれる、ということだったような…
for next構文のtoの前後にも空白を入れないと認識してくれなかったり、空白が必要なものと不要なものの違いがよくわかりません。
文字色が&もToも黒、と言うことが関係ありそうなのですが、正解はなんですか?
先に、結論を書きます。以下のとおりです。
変数やキーワードの直後のスペースを無くすのはやや危険。
というか、前後にスペースがはいるはずのところで構文エラーになってしまったら、そこがアウトの可能性大。
以下、基礎編レベルの知識ではちょっと難しいかもしれませんが、簡単に解説します。
- - -
実は、「型指定文字」というのがあります。
データ型の指定については発展編1で解説していますので今は深く触れませんが、「gyo&」と書くと、その変数には整数しか入れられない、という意味になります。(「gyo&」と、「&」まで含んだ形でひとつの変数名です)
分かりにくいので「gyo&」を説明の便宜上、「hoge」と置き換えてみます。
すると、いただいたコードの問題の箇所は、以下のようになります。
Range("a"&hoge":j"&gyo).Font.Color = vbRed
これは、 hoge と ":j" との間に結合演算子がないので構文エラーになります。
「gyo &」は、変数gyo と、 & 以降に続くものを結合するという意味になります。
- - -
続いて、for next 構文について。
以下の形について、「to」前後のスペースをなくして考えてみます。
for gyo = 2 to 10
このとき、考えられる構文エラーの理由は以下のとおり。
[1]
2 to10 → 「2」という数値と「to10」という変数があるとみなされる→「2」と「to10」との間に演算子がないので構文エラー。
[2]
2to10 → 「2to10」という変数があるとみなされる→変数名の先頭が数値なので構文エラー。
- - -
ということで。
以下、結論は以下です。
変数やキーワードの直後のスペースを無くすのはやや危険。
というか、前後にスペースがはいるはずのところで構文エラーになってしまったら、そこがアウトの可能性大。
..という解説でOKでしょうか?
まずは以上のとおりです。さらに何かあればご質問ください。
①「gyo&」でひとつの変数としてみなされてしまい、結合演算子がない事になるので赤くなって怒られたということですか。
②for next構文の例ではキーワードと数値の間にスペースがないため、やはりひとつの変数としてみなされて怒られると。
試しに、
Sub to10()
to10 = 2
Range("A1") = to10
End Sub
とやってみたら、「コンパイルエラー:Fuctionまたは変数が必要です。」となりました。
つまり関数と数値とキーワード以外の文字列は変数として認識されてしまう。
また、「Dim=◯◯◯」で宣言しないと機能しない。
また、結合演算子がないので構文エラーになってしまう。
ので変数とキーワードの前後の状態に要注意。
という認識でいいでしょうか?
誤 Dim=◯◯◯
正 Dim ◯◯◯
◯◯◯=◎◎◎
>[1] 「gyo&」でひとつの変数としてみなされてしまい、結合演算子がない事になるので赤くなって怒られたということですか。
>[2] for next構文の例ではキーワードと数値の間にスペースがないため、やはりひとつの変数としてみなされて怒られると。
OKです。
>変数とキーワードの前後の状態に要注意。
>という認識でいいでしょうか?
OKです。
↓ただしこれは、サブプロシージャ名と変数名が同じですね。
変数の宣言もありませんので、いろいろな意味でNGです。
Sub to10()
to10 = 2
Range("A1") = to10
End Sub
以下の動画も参考にしてください。
https://forum.pc5bai.com/lesson/page/105