Private Sub Worksheet_Change(ByVal Target As Range)
Dim r
If Target.Count > 1 Then
Exit Sub
End If
If Target.Row <= 6 Then
Exit Sub
End If
If Target.Column <> 3 Then
Exit Sub
End If
If Target.Value <> UCase(Target.Value) Then
Target.Value = UCase(Target.Value) '受け取った文字列を大文字に直す
End If
☞ For Each r In Target
If r.Value = "D" Then
Target.Offset(, 1).Value = "DVD無料"
ElseIf r.Value = "C" Then
Target.Offset(, 1).Value = "CD無料"
ElseIf Target.Value = "J" Then
r.Offset(, 1).Value = "ジャケット無料"
Else
r.Offset(, 1).ClearContents
End If
Next
End Sub
受講生さんの投稿
(投稿ID: 3798)
いつも、お世話になっています。
つまずきながらですが、勉強させて頂いています。感謝!
動画22の講義を学んで、ここに戻ってきました。
下記のとおり、For Each構文を使用して実行してみましたが、上手く機能しませんでした。
(キャンペーンタイプをコピーして複数に貼り付けても反映されません)
書き方に問題があるのでしょうか?
添削の程、よろしくお願いします。
小川慶一さんのコメント
(コメントID: 5311)
おはろうございます。
ソースを見る限りは問題なさそうですね。。
出先でパソコンが手元にないので、僕は、今は、動作検証できません。
ということなので、以下お願いします。
1. ブレークポイントを入れてテストをする。
例えば、先頭にブレークポイントをいれ、セルの値を更新した時、当該プロシージャがはじまるか?確かめる。
あるいは、for each 構文の先頭にブレークポイントを入れ、無事にそこに来たなら、ステップイン実行。処理は期待どおりに進行しているか?一行ずっとマクロを実行しつつい慎重に確かめる。
前者でおかしかったならそもそもイベントプロシージャを書く場所が間違ってるとか、コードウィンドウ上部のリストからプロシージャを生成せず、イチからすべて手書きで書いたから、てのが良くある理由。
後者の問題なら、テストデータによってはうまく行くこともあるか?さらに確認。
出先でパソコンが手元にないのでソースを見ただけでの感触ですが…。
例えば、投入するデータが以下のどちらでも結果は変わらないでしょうか?
[1] "d"
[2] “D”
状況いろいろやってみてさっぱり解消しない場合は、ファイルをお送りください。