Q.福岡県 総務・経理 50代男性より
福岡県の○○です。
仕事が忙しいくなかなか出来なかったのですが、言われたとおり
に毎日少しづつ勉強しました。
そして、いとも簡単に出来てしまうことにビックリしました。
チョッと拍子抜けという感もあります。
マクロの記録を使い我流で少しやってはいたのですが、知らない
ことばかりでした。
Lesson13のところで理解が出来ず、自分なりに意味を考えてみ
ました。
以下のような理解でいいのでしょうか?
③④で変数がからみあっているようで 初心者に理解するのは
なかなか難しいです。
① a = ActiveCell.Value
② ActiveCell.Offset(1, 0).Activate
③ For i = 1 To Len(a)
④ ActiveCell.FormulaR1C1 = Mid(a, i, 1)
⑤ ActiveCell.Offset(1, 0).Activate
⑥ Next i
Range("B4").Select
① クリックしたセルの値をaという変数に入れる。
② 書き込む位置を縦方向に1つ移動させる。
③⑥ i という変数(1からaという変数の文字数)の数
だけ④⑤の命令を繰り返す。
④ Mid(a, i, 1)の命令を書き込む。
Mid(a, i, 1)の意味は 文字列aを iの開始位置
(1からaという変数の文字数分)から1文字抽出する。
※この部分が?
⑤ 書き込む位置を縦方向に1つ移動させる。
自分でマクロをいじってみました。
i は別の文字でもいいこと。 ②を消すと最初の文字が消えて
しまうことなど
でも、なぜ②を消すと最初の文字が消えてしまうのでしょうか?
以上3ヶ所の疑問点よろしくお願いいたします。
※各レッスンの最後マクロが完成した時に各命令の横にコメント
があると初心者には復習の意味もあり理解が進みもっと分かり
やすくなるように思いました。
回答.三太郎より
> そして いとも簡単に出来てしまうことにビックリしました。
> チョッと拍子抜けという感もあります。
→(笑)。ちょっと簡単すぎましたかね!?
> 以下のような理解でいいのでしょうか?
> ③④で変数がからみあっているようで 初心者に理解するのは
> なかなか難しいです。
→とても詳しく、疑問な点をまとめていただけて感心しました。
これでバッチリです。これだけ理解できていて、しかもそれを
文章に書き表すことができるということが重要ですので、これは
すばらしい内容だと思いますし、この通りのご理解でまったく
問題ないです。(この部分が分かりにくい・・・とおっしゃる
部分も、私以上に説明がうまいです。^^; )
> 自分でマクロをいじってみました。
> i は別の文字でもいいこと。 ②を消すと最初の文字が消え
てしまうこと など
> でも、なぜ②を消すと 最初の文字が消えてしまうのでしょうか?
→これは、仰るとおりに「②書き込む位置を縦方向に1つ移動さ
せる。」ということですから、この行を消してしまう場合だと、
ここでは「書き込む位置を移動させない。」ということになります
ので、その後の1回目のループで最初に、まず先頭の1文字をその
移動させなかった位置(すなわち、入力する文字列のある位置)に
上書きをしてしまうわけですね。なので、上書きをされて最初の
文字が消えてしまうということになります。
例えば、②を消した上で、これの④と⑤の順番を入れ替えて下記
としても同じ結果が得られるわけです。
a = ActiveCell.Value
For i = 1 To Len(a)
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = Mid(a, i, 1)
Next i
(ただ、元々このような順番にあえてなっていないのは
( Offset(1, 0) が2回出てくるようになっているのは)、より
理解しやすくするためを考えてのレッスン上の都合で、です。)
とにかく、ご自分で色々試してみる!という姿勢がある方は必ず
上達が早いですので期待が持てます。
> ※各レッスンの最後マクロが完成した時に各命令の横にコメント
> があると初心者には復習の意味もあり理解が進みもっと分かり
> やすくなるように思いました。
→貴重なご意見ありがとうございます。仰るとおりですね。
ただ、実はそれ、あえて(わざと)書いていないという面もある
んです。
テキストの鉄則の中にも「コメントをたくさん書きなさい!!」と
いうことを書いていますが、もしこれに予めコメントが書かれて
いたとしたら、皆さん中々自分では書かなくなってしまうだろう
と思います。
○○さんのように、
> ① クリックしたセルの値をaという変数に入れる。
> ② 書き込む位置を縦方向に1つ移動させる。
> ③⑥ i という変数(1からaという変数の文字数)・・・
> ④ Mid(a, i, 1)の命令を書き込む。
> Mid(a, i, 1)の意味は 文字列aを・・・
> ⑤ 書き込む位置を縦方向に1つ移動させる。
このような自分で理解した内容を、プログラム中にコメントとして
”自分の言葉で書き残す”ということが非常に重要なことなんです
ね。
自分自信でプログラムの意味を理解しようとしないことには、こう
したコメントは書けませんから。
ぜひこれをこのままLesson13で作成したプログラムの各行の横に
書き残しておいてくださいね。
以上ですが、説明にご不明な点などありましたらお手数ですがまた
何なりとご質問ください。
また、その後の近況、「こんなマクロを作りました!(^^)」とか、
「中々勉強する時間がありません(~_~)」とか・・・などのご連絡も、
是非お待ちしています!(何らかのよいアドバイスもできるだろうと
思いますので。。。)
では。
お返事.ご質問者より
福岡の○○です。
早速のご回答有難うございます。
やはり そうだったのですね!
出来たマクロを見ていたら ActiveCell.Offset(1, 0).Activate
が2回あったので何か変だなと思い1つでいいのではと思い
1つ目を消して実行してみたしだいです。
a = ActiveCell.Value
For i = 1 To Len(a)
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = Mid(a, i, 1)
Next i
このマクロで理解できました。
「こんなマクロを作りました!(^^)」とか とありましたので
完成してはいるのですがアドバイスいただければと思い送ります。
ただ、個人情報に触れる部分がありますので内容を修正して
次回メールいたしたいと思いますのでよろしくお願いいたします。
まずは今日はお礼まで
最新の画像[もっと見る]
- 80代の年寄りにVBAが出来るわけがない? 2年前
- 鎌倉殿の13人ー義経の逆落としの地形 3年前
- 鎌倉殿の13人ー義経の逆落としの地形 3年前
- 鎌倉殿の13人ー義経の逆落としの地形 3年前
- 鎌倉殿の13人ー義経の逆落としの地形 3年前
- 鎌倉殿の13人ー義経の逆落としの地形 3年前
- 関ケ原の合戦場をデジタルマップで見ると 3年前
- 関ケ原の合戦場をデジタルマップで見ると 3年前
- 関ケ原の合戦場をデジタルマップで見ると 3年前
- 上田城の3Dデジタルマップ 3年前