Sub AAA() Dim GYO For GYO = 4 To 19 Dim NAME NAME = Range("D" & GYO).Value If NAME = "資料A" Then Range("B" & GYO).Value = 1 ElseIf NAME = "資料B" Then Range("B" & GYO).Value = 2 ElseIf NAME = "資料C" Then Range("B" & GYO).Value = 3 End If Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1) Next End Sub
コメント番号10378で投稿されたマクロは以下。 Sub AAA() Dim GYO For GYO = 4 To 19 Dim NAME NAME = Range("D" & GYO).Value If NAME = "資料A" Then Range("B" & GYO).Value = 1 ElseIf NAME = "資料B" Then Range("B" & GYO).Value = 2 ElseIf NAME = "資料C" Then Range("B" & GYO).Value = 3 End If Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1) Next End Sub
そして、今回お送りいただいたファイルのモジュール「Module1」にあったマクロは以下です。
Sub AAA() Dim NAMAE Dim BANGO Dim GYO For GYO = 4 To 19 NAMAE = Range("D" & GYO).Value BANGO = Range("B" & GYO).Value If NAMAE = "資料A" Then BANGO = 1 ElseIf NAMAE = "資料B" Then BANGO = 2 ElseIf NAMAE = "資料C" Then BANGO = 3 End If Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1) Next End Sub
受講生さんの投稿
(投稿ID: 4078)
<>という発想がなく、先生の解説を見て目から鱗でした!
下記マクロを書いて、自分では出来た!と思っていたので、
問題の意図が掴めていなかったことに少しショックでした。笑
教材で<>を見た時、この比較演算子はどんな時に使うんだろうと
思っていましたが、こういう使い方ができるんですね。
マクロがよりシンプルになるので、
このパターンをきちんと体得できるように
繰り返し練習したいと思います。
質問
下のマクロを書いた際に、Range("B" & GYO).Valueも繰り返されるので
初め関数を使っていたのですが、資料番号が表に記入されませんでした。
スッテプインで一つずつ確認しても
問題なく実行出来ているように見えるのですが、
どうしてエクセルに反映されないのでしょうか。
Sub AAA()
Dim GYO
For GYO = 4 To 19
Dim NAME
NAME = Range("D" & GYO).Value
If NAME = "資料A" Then
Range("B" & GYO).Value = 1
ElseIf NAME = "資料B" Then
Range("B" & GYO).Value = 2
ElseIf NAME = "資料C" Then
Range("B" & GYO).Value = 3
End If
Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1)
Next
End Sub
小川慶一さんのコメント
(コメントID: 5641)
> 下のマクロを書いた際に、Range("B" & GYO).Valueも繰り返されるので
> 初め関数を使っていたのですが、資料番号が表に記入されませんでした。
> スッテプインで一つずつ確認しても
> 問題なく実行出来ているように見えるのですが、
> どうしてエクセルに反映されないのでしょうか。
↑
今、僕の環境で試しました。
が、きちんと動作しますね。。
これとは別のマクロのことでしょうか。
でしたら、添削して欲しいマクロを別送してください。
いただいたマクロについては、以下の2点修正したいですね。
[1] Dim NAME は、 For 文より前に持っていく
[2] 変数名は NAME でなく他の言葉推奨
[1] は、いただいたマクロのような書き方だと、くり返しの回数だけ変数を作り直すことになります。僕の提案の方法なら、一度作った変数の中身を差し替えていくだけ。
というか、「同じ名前の変数を何度も生成し直す」ということ自体、プログラミングでは推奨されません。
[2] については、基礎編本編第1章「基礎講座第1章9 - 変数を活用するときの注意点」をまずは参照。
https://forum.pc5bai.com/lesson/page/105/
英単語一語の変数名だと、実在するプロパティ等とかぶる危険性が高いです。(そして、実際、かぶってます)
受講生さんのコメント
(コメントID: 8233)
>今、僕の環境で試しました。
>が、きちんと動作しますね。。
>これとは別のマクロのことでしょうか。
>でしたら、添削して欲しいマクロを別送してください。
いえ、下記のマクロのことで間違いないです。
きちんと動作しましたか、、、
先生に質問する前にも、エクセル、パソコン自体の再起動をかけて
試して見たのですが、きちんと動作せず、
先ほど、もう一度、先生にご指摘頂いた点を修正して
実行しましたが、やはりB列への反映がされませんでした。
>[1] Dim NAME は、 For 文より前に持っていく
for文の中にいつもDIM XXXを入れていました。
説明を頂いて初めて、よく考えてみればそうだなと気づきました。
ありがとうございます。
>[2] 変数名は NAME でなく他の言葉推奨
もう一度、変数を活用するときの注意点を復習してみます。
ありがとうございます。
ーーーーーーーーーーーーーーーーーーーーー
> 下のマクロを書いた際に、Range("B" & GYO).Valueも繰り返されるので
> 初め関数を使っていたのですが、資料番号が表に記入されませんでした。
> スッテプインで一つずつ確認しても
> 問題なく実行出来ているように見えるのですが、
> どうしてエクセルに反映されないのでしょうか。
↑
今、僕の環境で試しました。
が、きちんと動作しますね。。
これとは別のマクロのことでしょうか。
でしたら、添削して欲しいマクロを別送してください。
いただいたマクロについては、以下の2点修正したいですね。
[1] Dim NAME は、 For 文より前に持っていく
[2] 変数名は NAME でなく他の言葉推奨
[1] は、いただいたマクロのような書き方だと、くり返しの回数だけ変数を作り直すことになります。僕の提案の方法なら、一度作った変数の中身を差し替えていくだけ。
というか、「同じ名前の変数を何度も生成し直す」ということ自体、プログラミングでは推奨されません。
[2] については、基礎編本編第1章「基礎講座第1章9 - 変数を活用するときの注意点」をまずは参照。
https://forum.pc5bai.com/lesson/page/105/
英単語一語の変数名だと、実在するプロパティ等とかぶる危険性が高いです。(そして、実際、かぶってます)
小川慶一さんのコメント
(コメントID: 5645)
動画の5分あたりから扱っている、2つ目の問題ですよね。
ちゃんと動きますね...。
ファイルごと送付いただけますか。
よろしくお願いいたします。
受講生さんのコメント
(コメントID: 8234)
「下のマクロを書いた際に、Range("B" & GYO).Valueも繰り返されるので
初め関数を使っていたのですが、資料番号が表に記入されませんでした。
スッテプインで一つずつ確認しても
問題なく実行出来ているように見えるのですが、
どうしてエクセルに反映されないのでしょうか。」
つまり、コメント番号10378で投稿したマクロのRange("B" & GYO).Valueの箇所をコメント番号10443で投稿したマクロのように関数(BANGO)に置き換えるとエクセルに反映されなくなります。このような関数の使い方は出来ないということなのでしょうか。という質問になります。
紛らわしい書き方をしてすいません。
よろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーー
>受講生 さん:
コメント番号10378で投稿されたマクロは以下。
Sub AAA()
Dim GYO
For GYO = 4 To 19
Dim NAME
NAME = Range("D" & GYO).Value
If NAME = "資料A" Then
Range("B" & GYO).Value = 1
ElseIf NAME = "資料B" Then
Range("B" & GYO).Value = 2
ElseIf NAME = "資料C" Then
Range("B" & GYO).Value = 3
End If
Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1)
Next
End Sub
そして、今回お送りいただいたファイルのモジュール「Module1」にあったマクロは以下です。
Sub AAA()
Dim NAMAE
Dim BANGO
Dim GYO
For GYO = 4 To 19
NAMAE = Range("D" & GYO).Value
BANGO = Range("B" & GYO).Value
If NAMAE = "資料A" Then
BANGO = 1
ElseIf NAMAE = "資料B" Then
BANGO = 2
ElseIf NAMAE = "資料C" Then
BANGO = 3
End If
Range("C" & GYO).Value = Mid(Range("F" & GYO).Value, 2, 1)
Next
End Sub
小川慶一さんのコメント
(コメントID: 5670)
>コメント番号10378で投稿したマクロのRange("B" & GYO).Valueの箇所をコメント番号10443で投稿したマクロのように関数(BANGO)に置き換えるとエクセルに反映されなくなります。
>このような関数の使い方は出来ないということなのでしょうか。という質問になります。
そういうご質問でしたか。
>関数(BANGO)に置き換えると
↑
ここで、用語を間違えています。これは関数ではありません。
>このような関数の使い方は出来ないということなのでしょうか。
↑
上記のとおり、BANGOは関数ではありません。
なので、「このような関数の使い方は出来ないということなのでしょうか」という質問には、回答不能です。
用語を間違えていて、機能への理解もできてない...ということなので。
このタイミングで、以下の動画を復習し、用語とその機能について、ご自身の知識を修正してください。
○基礎講座第1章8 - 変数を使ったプログラム、変数を使う意義
https://forum.pc5bai.com/lesson/page/104/
[a] まずは動画をひととおり見て、用語とその意味を確認してください。
[b] 次に、動画にあわせて、「こびとちゃんシート」を使って、こびとちゃんになったつもりで、一行一行、マクロのコードの内容をシートに反映させていってください。
[c] 上記のワークをしっかりやったあと、さらに、コメント番号10443のマクロを見直してください。
[d] それでもどこがどう問題なのか?が分からなければ、「こびとちゃんシート」を使って(*)、こびとちゃんになったつもりで、一行一行、コメント番号10443のマクロのコードの内容をシートに反映させていってください。
(*)こびとちゃんシートは19行目まではないですが、4行目から9行目まではFor Next構文に従っで実際に作業してください。10行目以降はやらなくてOKです。
[a]-[d] までのどこかで、何をどう勘違いしていたのか?ということについて、すっきり整理して理解できるかと思います。
無事に理解できましたら、[a]-[d] までのどこで問題解決できたか?お知らせください。
[e] もしここまでやっても分からなかった場合は、上記[d]のワークをやった結果のこびとちゃんシート、手書きワークをやりおえた状態のものをお送りください。
PDFファイルでもJPGファイルでもかまいません。スキャンまたは携帯で撮影した画像。どちらでも構いません。
ファイルをお送りいただけたなら、そのファイル、コメント番号10443のマクロを使って解説します。
[a]-[d]のワークは、とても面倒に感じられるかもしれません。
でも、なぜ、講座本編でもわざわざこういうワークをやる時間を取っているのか?というと、それは、こういう手書きワークはとても重要だからです。
それに、多少手書きワークをしたとしても、基礎編フォローの演習問題にチャレンジするのにかかる総時間と比べたら微々たるものですので、ここは面倒でもやってみてください。
漫然とマクロを実行しているだけのときとは比べようのない大きな学びを得ることができるでしょう。
受講生さんのコメント
(コメントID: 8235)
トンチンカンな質問に対して丁寧に指導いただき、ありがとうございます。
[a]の基礎講座第1章8と9を見直したところ、自分の間違いに気がつきました。格納された変数は右辺で利用される。左辺に変数を持ってくるということは、変数を格納するということであり、私がIF構文ないでやっていたことは、一度格納したBANGOという変数の内容を変更していただけだと、ハッとしました。よくよく冷静になって自分のマクロを見れば明白な間違いなのに、基礎フォローアップベーシックも最終にさしかかるにつれて、少しずつできるようになってきた楽しさと自信から、一度学んだ基礎の知識を置き去りにして、練習問題を解いていたように思います。基礎を再確認するためにも、自分の間違えたマクロを元に小人ちゃんシートに反映もさせていきました。小人ちゃんシートを使うと自分の書いたマクロをキチンと一つずつ理解しながら、反映ができるので、とても良かったです。基礎ができていないことを先生にご指摘いただき、ここで改めて基礎の大切さに気づけて本当に良かったです。ありがとうございました。
小川慶一さんのコメント
(コメントID: 5728)
受講生さんの理解と納得感が深まったようでよかったです。
そうなんです。実は、手を動かすと理解と納得の度合いがぜんぜん違います。
とりわけ良いな、と感じられたのは、以下です。
>基礎を再確認するためにも、自分の間違えたマクロを元に小人ちゃんシートに反映もさせていきました。
「変数」と「変数の使い方」の対応も修正できたようでよかったです。
演習は、「横に人がいるつもりで、その人に説明しながら解く」というのがとてもよいですよ。
自分が何は分かっていて、何はスラスラできて、何はなおざりにしているのか、が如実に分かります。
それで、理解不足?と感じられたところについては、必要に応じて以下の順序で再確認します。
・まずはいろいろコードをいじってチェック
・マインドマップレジュメでチェック
・テキストPDFを読んでみる
・動画講座で再確認
・さらに必要なら、手書きワーク
そのうえで、そこで再確認したことについて、「横に人がいるつもりで、その人に説明してみる」というのをしてみます。
少ししんどいですが、なおざりにしているところは先に進んだところで結局自分で自分を落とす落とし穴になります。
>基礎フォローアップベーシックも最終にさしかかるにつれて、少しずつできるようになってきた楽しさと自信から
復習と新しい学びとを同時並行されるのがよいですよ。
この先、過去問1つ、新問題1つ、という順番で解いていくとか。
たとえば、基礎編フォローアップベーシックの問題を1つ解いたら、アドバンスの問題を1つ解く、のくり返しです。
工夫して、楽しんで学んでください (^^)/~