小川塾長:改めて一度整理し考えて見まして、フラグのfalse, trueですが、4:45あたりから説明が始まりまして、左のIDと右のIDで一致しないものを見つけたときmitsuketaと定義し、そしてその一致がみつからないとき→true、反対に一致がみつかったとき→false ということでいいのかなと思いました。そうすると、左のIDと右のIDの一致について (1)では一致がみつかるときだから、false (2)では一致がみつからないすなわち不一致があるときだからtrue そして(3)では一致がみつからないときだから、trueとすべきだと思いました。(解説ではfalseでした) 実際小生の解釈で実行すると解答と異なりA30行以下一致しているIDの12,17,2,11,19,6,26,10,13が表示されました。 (3)にてfalseになるところが知りたいです。 いろんなcodeでfalseやtrueが出てくるのでこの機会につかみたいです。 よろしくお願いします。 Sub mondai201_01() Dim hida Dim migi Dim mitsuketa Dim tenkisaki
tenkisaki = 30
For migi = 11 To 21 mitsuketa = False-----(1) For hida = 4 To 29 If Range("A" & hida).Value = Range("E" & migi).Value Then Range("C" & hida).Value = Range("F" & migi).Value mitsuketa = True------(2) Exit For End If Next If mitsuketa = False Then-----(3) 不一致があるときだからtrue?? Range("A" & tenkisaki).Value = Range("E" & migi).Value Range("C" & tenkisaki).Value = Range("F" & migi).Value tenkisaki = tenkisaki + 1 End If Next End Sub
Sub mondai201_01()
Dim hida
Dim migi
Dim mitsuketa
Dim tenkisaki
tenkisaki = 30
For migi = 11 To 21
mitsuketa = False-----(1)
For hida = 4 To 29
If Range("A" & hida).Value = Range("E" & migi).Value Then
Range("C" & hida).Value = Range("F" & migi).Value
mitsuketa = True------(2)
Exit For
End If
Next
If mitsuketa = False Then-----(3) 不一致があるときだからtrue??
Range("A" & tenkisaki).Value = Range("E" & migi).Value
Range("C" & tenkisaki).Value = Range("F" & migi).Value
tenkisaki = tenkisaki + 1
End If
Next
End Sub
morimotoさんの投稿
(投稿ID: 4104)
(1)では一致がみつかるときだから、false
(2)では一致がみつからないすなわち不一致があるときだからtrue
そして(3)では一致がみつからないときだから、trueとすべきだと思いました。(解説ではfalseでした)
実際小生の解釈で実行すると解答と異なりA30行以下一致しているIDの12,17,2,11,19,6,26,10,13が表示されました。
(3)にてfalseになるところが知りたいです。
いろんなcodeでfalseやtrueが出てくるのでこの機会につかみたいです。
よろしくお願いします。
Sub mondai201_01()
Dim hida
Dim migi
Dim mitsuketa
Dim tenkisaki
tenkisaki = 30
For migi = 11 To 21
mitsuketa = False-----(1)
For hida = 4 To 29
If Range("A" & hida).Value = Range("E" & migi).Value Then
Range("C" & hida).Value = Range("F" & migi).Value
mitsuketa = True------(2)
Exit For
End If
Next
If mitsuketa = False Then-----(3) 不一致があるときだからtrue??
Range("A" & tenkisaki).Value = Range("E" & migi).Value
Range("C" & tenkisaki).Value = Range("F" & migi).Value
tenkisaki = tenkisaki + 1
End If
Next
End Sub
小川慶一さんのコメント
(コメントID: 5664)
以下について、[1]から順に解いてください。
[1]-[7]について、書き上がったマクロと、それぞれの課題を解くのにかかった時間もお知らせください。
ks201.xls を使用する。
[1]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しない場合は"なし"、存在する場合は"あり"とG列に記入するマクロを作れ。
[2]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在する場合は1, 2, 3, ... とH列に上から順に番号を割り振るマクロを作れ。
存在しない場合はH列には何も記入しない。
[3]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しない場合は1, 2, 3, ... とI列に上から順に番号を割り振るマクロを作れ。
存在する場合はI列には何も記入しない。
[4]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しないもののリストをK列に作れ。
ただし、リストの内容はIDだけでよい。
[5]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しないもののリストをK列に作れ。
ただし、リストの内容は、K列にID、L列に氏名とする。
[6]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しない場合は以下を行うマクロを作れ。
・当該右の表のE列に記載されたIDをA列に追記する。
[7]
シート「キャンペーン名簿1」で、右の表11行目から21行目までについて順番に調査する。
右の表の各行ごとに、E列のIDが左の表のA列に存在するかを調べ、存在しない場合は以下を行うマクロを作れ。
・当該右の表のE列に記載されたIDをA列に追記する。
・当該右の表のF列に記載された名前をB列に追記する。
> 小川塾長:改めて一度整理し考えて見まして、フラグのfalse, trueですが、4:45あたりから説明が始まりまして、左のIDと右のIDで一致しないものを見つけたときmitsuketaと定義し、そしてその一致がみつからないとき→true、反対に一致がみつかったとき→false ということでいいのかなと思いました。そうすると、左のIDと右のIDの一致について
> (1)では一致がみつかるときだから、false
> (2)では一致がみつからないすなわち不一致があるときだからtrue
> そして(3)では一致がみつからないときだから、trueとすべきだと思いました。(解説ではfalseでした)
> 実際小生の解釈で実行すると解答と異なりA30行以下一致しているIDの12,17,2,11,19,6,26,10,13が表示されました。
> (3)にてfalseになるところが知りたいです。
> いろんなcodeでfalseやtrueが出てくるのでこの機会につかみたいです。
> よろしくお願いします。
> Sub mondai201_01()
> Dim hida
> Dim migi
> Dim mitsuketa
> Dim tenkisaki
>
> tenkisaki = 30
>
> For migi = 11 To 21
> mitsuketa = False-----(1)
> For hida = 4 To 29
> If Range("A" & hida).Value = Range("E" & migi).Value Then
> Range("C" & hida).Value = Range("F" & migi).Value
> mitsuketa = True------(2)
> Exit For
> End If
> Next
> If mitsuketa = False Then-----(3) 不一致があるときだからtrue??
> Range("A" & tenkisaki).Value = Range("E" & migi).Value
> Range("C" & tenkisaki).Value = Range("F" & migi).Value
> tenkisaki = tenkisaki + 1
> End If
> Next
> End Sub
小川慶一さんのコメント
(コメントID: 5671)
[4]で、以下は不要では?
以下から、練習不足はご自身としても実感されていることと思います。
・[1]は60分、[3]は5時間かかって「ようやくできた」たということ
・「[2], [4], [5], [6], [7]はそれぞれ[1], [3]でできたマクロを編集加工して済ませた」ということ
この理解度では、構造全体について考察することは難しいです。
ついては、理解を深め、パターンを手になじませるため、同じ問題を何度もくり返し解くことをおすすめします。
具体的には、[1]-[7]のそれぞれについて、イチから書いて以下の時間内で収まるようになるまで練習してください。
[1] 7分
[2] 7分
[3] 7分
[4] 10分
[5] 10分
[6] 10分
[7] 10分
[1]-[7]すべて上記の時間内で解けるようになったころには、当初の疑問はもう解消していることと思います。
上記の制限時間で問題を解けるようになったら、そのうえで、以下の投稿についてご自身で回答を考え、その回答をこのページコメント欄に投稿ください。
あるいは、当初の疑問はもう解消しているかもしれません。
が、その場合でも、上記制限時間内でマクロを書ききる練習は行ってください。
実装能力次第で、理解度や腑に落ち方がまったく変わります。
「人の書いたマクロをちゃちゃっと編集しても期待通りに動かなかった。なぜだ?」というときに、イチから書き直して検証できる人とそうでない人とでは、理解度や腑に落ち方がまったく違いがあります。
僕としては、この機会にそこまで実感してもらいたいです。
> 小川塾長:改めて一度整理し考えて見まして、フラグのfalse, trueですが、4:45あたりから説明が始まりまして、左のIDと右のIDで一致しないものを見つけたときmitsuketaと定義し、そしてその一致がみつからないとき→true、反対に一致がみつかったとき→false ということでいいのかなと思いました。そうすると、左のIDと右のIDの一致について
> (1)では一致がみつかるときだから、false
> (2)では一致がみつからないすなわち不一致があるときだからtrue
> そして(3)では一致がみつからないときだから、trueとすべきだと思いました。(解説ではfalseでした)
> 実際小生の解釈で実行すると解答と異なりA30行以下一致しているIDの12,17,2,11,19,6,26,10,13が表示されました。
> (3)にてfalseになるところが知りたいです。
> いろんなcodeでfalseやtrueが出てくるのでこの機会につかみたいです。
> よろしくお願いします。
小川慶一さんのコメント
(コメントID: 5672)
ちょっと厳しいかな。
まずは、最低限、以下の制限時間を目指してください。
[1] 7分→12分
[2] 7分→11分
[3] 7分→10分
[4] 10分→15分
[5] 10分→14分
[6] 10分→13分
[7] 10分→12分