エクセルマクロ オンライン講座コメント紹介

コメント紹介
   └ エクセルマクロ「イベントとフォーム」講座
       └ イベントプロシージャ実行と作成の流れまとめ

イベントプロシージャ実行と作成の流れまとめ

[9731] 2018-04-15 04:26:11 受講生さんからの投稿です。

小川先生
いつも、お世話になっています。
つまずきながらですが、勉強させて頂いています。感謝!

動画22の講義を学んで、ここに戻ってきました。
下記のとおり、For Each構文を使用して実行してみましたが、上手く機能しませんでした。
(キャンペーンタイプをコピーして複数に貼り付けても反映されません)
書き方に問題があるのでしょうか?
添削の程、よろしくお願いします。

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

 


[9732] 2018-04-15 07:25:26 小川慶一さんからの投稿です。

受講生 さん:

おはろうございます。
ソースを見る限りは問題なさそうですね。。

出先でパソコンが手元にないので、僕は、今は、動作検証できません。

ということなので、以下お願いします。
1. ブレークポイントを入れてテストをする。
例えば、先頭にブレークポイントをいれ、セルの値を更新した時、当該プロシージャがはじまるか?確かめる。
あるいは、for each 構文の先頭にブレークポイントを入れ、無事にそこに来たなら、ステップイン実行。処理は期待どおりに進行しているか?一行ずっとマクロを実行しつつい慎重に確かめる。
前者でおかしかったならそもそもイベントプロシージャを書く場所が間違ってるとか、コードウィンドウ上部のリストからプロシージャを生成せず、イチからすべて手書きで書いたから、てのが良くある理由。
後者の問題なら、テストデータによってはうまく行くこともあるか?さらに確認。
出先でパソコンが手元にないのでソースを見ただけでの感触ですが…。
例えば、投入するデータが以下のどちらでも結果は変わらないでしょうか?
[1] "d"
[2] “D”

状況いろいろやってみてさっぱり解消しない場合は、ファイルをお送りください。

 


まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ