質問: "=if(r[1]c="""","""",rc[-1])" Next End Sub ``` これだと、うまくいきません。 皆様の知恵をお借りしたいと考えています!
回答: まず苦言になってしまいますが、うまくいかないとき、どううまくいっていないかを伝えていただかないと適切なアドバイスができません。 落ち着いて、うまくいっていない状況を説明したほうが解決も早いですよ ここから本題です。 処理をするタイミングから、実際の動作をイメージしてみましょう。 もしクリック操作で処理が発生するのなら、対象範囲を左から順にチェックして空欄の場合はひとつ左からコピー、空欄でなければ何もせず隣へ移っていけばいいと思います。 しかし今回はWorksheet_Changeイベントに実装しているところから察するに、値を入力したときリアルタイムに変更したいのではないかと思います。 この場合、最初は全部空欄で、1つ値を入力するたびに入力内容が対象セル範囲に反映されていく、というような状況になるのではないでしょうか? だとすると、まっさらな状態からの最初の入力では、入力位置より右側のすべてのセルに同じ値が入るような動きが想像されます。 そうなると、書き換える条件も少し変わってきます。 ・入力位置の1つ右のセルが、入力した位置にもともと入力されていた値と同じか、もしくは空白なら今回入力値をセット。 コードにすると以下のような感じです。(机上コードですが。) ``` Application.EnableEvent=False 'イベント発生を停止する iLastCol = 10 '最終列はJ列 '変更後の値に退避 NewVal = target '変更前の値を調べるためにUnDo Application.UnDo OldVal = target '変更後の値に戻す target = NewVal For iCol = target.Column + 1 to LastCol If Cells(target.Row, iCol) = OldVal Or Cells(target.Row, iCol) = "" Then '変更前の値と同じか空欄の場合、 Cells(target.Row, iCol) = NewVal Else '条件を満たさない場合、ループ終了 Exit For End If Next Application.EnableEvent=True 'イベント発生を再開する ``` 推測から暴走気味にアドバイスしてしまいました。見当違いでしたらすみません。