いつもお世話になります。
以下の問題について何かわかりましたらご教示ください。
複数のセルが選択されているとします。
選択されているセルを■、されていないセルを□とします。
問題は「選択されているセルを含む行のE列にマークをしろ」です。
(例題1)
\ABCDE
1□□□□□
2□□■□□
3□□■□□
4□□■□□
5□□□□□
今、C2、C3、C4が選択されています。
影響のある行は2,3,4行目ですので、以下のようになります。
(マークを*で示します)
\ABCDE
1□□□□□
2□□■□*
3□□■□*
4□□■□*
5□□□□□
以下、前と後で例題を示します。
(例題2)
\ABCDE
1□□□□□
2■■□□□
3□□□□□
4□□□□□
5□□□□□
=>
\ABCDE
1□□□□□
2■■□□*
3□□□□□
4□□□□□
5□□□□□
(例題3)
\ABCDE
1□□□□□
2□□□□□
3□□□□□
4□□□■□
5□□■■□
=>
\ABCDE
1□□□□□
2□□□□□
3□□□□□
4□□□■*
5□□■■*
(例題4)
\ABCDE
1■□□□□
2□■□□□
3□□□□□
4□□□■□
5□□□□□
=>
\ABCDE
1■□□□*
2□■□□*
3□□□□□
4□□□■*
5□□□□□
以下のようにやればわかっているんですが、この場合は縦方向だけでなく横方向にも処理するので、同じ行について何回も処理が発生してしまいます。
実際には縦にも横にもすごく広いので、避けたいところです。
Sub test()
Dim cell As Range
For Each cell In Selection
Cells(cell.row, 5).Value = "*"
Next cell
End Sub
以下のようにすれば必ず縦方向優先ですが、同じ理由で避けたいです。
Sub test()
Dim myRow as long
Dim myCol as long
For myRow = 1 to 65536
For myCol = 1 to 4
If Cells(myRow, myCol).Selected Then
Cells(myRow, 5).Value = "*"
Exit For
End If
Next myCol
Next myRow
End Sub
もっといい方法があればご教示ください。
よろしくお願いします!
お礼
ありがとうございます! 行けそうです。
補足
ありがとうございます。 元質問に書いてなかったこともあるんですが、結果的に教えていただいた方法で完璧にうまく行きました。 ありがとうございます。 ぼくにはとても思いつかないエレガントな解で感服しました。 やはりふだん使わない関数も勉強しないとダメですね。。。