プロが教えるわが家の防犯対策術!

任意のセルに入力されている文字数分(スペースも一文字とカウント)だけ、任意のセルから斜め上にセルを選択状態にしたいのですが。



●文字数をカウントするセル(毎回違う)の中身が"g6# 3w."(文字数は7)
●選択状態の起点となるセルがC30(毎回違う)

実行結果は、C30 D29 E28 F27 G26 H25 I24 が選択状態になります。

上記のことができるマクロを教えてもらいたいのです
が。
(文字数分だけ斜め上には行けない状況は想定されなくて結構です)

A 回答 (3件)

あ、こうかな?



Sub Test1()
Dim r1 As Range, i As Integer, cnt As Integer
On Error Resume Next
 Set r1 = Application.InputBox("文字数カウントセルは?", "Count", Type:=8)
 cnt = Len(r1.Value)
 Set r1 = Application.InputBox("先頭セルを1つ選択", "Select", Type:=8)
 s = r1.Address
 For i = 1 To cnt - 1
   s = s & "," & r1.Offset(-1 * i, i).Address
 Next i
 Range(s).Select
End Sub

この回答への補足

自己レスですが、斜め左上はOffset(-i, -i)、真上はOffset(-i, x)でできました。

補足日時:2006/04/04 04:51
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
大変参考になりました。

今回は斜め右上方向に進んでいきましたが、斜め左上や真上に進んで行く場合は、以下の部分はどう変わってくるでしょうか?
s = s & "," & r1.Offset(-1 * i, i).Address

お礼日時:2006/04/03 23:48

どんな使い道があるのか、判らず、VBAのシートのイベントを使うものは不安定なもののように思いますが、一応それらしくできました。


標準モジュールに
Public n
Sheet1のイベントトプロシージュアーとして
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
n = Len(Target)
MsgBox n
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo e1
Application.EnableEvents = False
s = ""
For i = 0 To n - 1
t = Target.Offset(-i, i).Address
s = s & t & ","
Next i
'MsgBox s
s = Left(s, Len(s) - 1)
Range(s).Select
e1:
Application.EnableEvents = True
End Sub
を貼り付ける。
文字数をカウントするセルをダブルクリックする。
(するとnに文字数を覚え増すが)、起点となるセルをクリックする。
すると、起点から右上方向のセルを数だけハイライトする。
もしエラーでイベントが反応しなくなったら
標準モジュールに下記を貼り付け、
Sub test01()
Application.EnableEvents = True
End Sub
を実行後、上記をやってみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
大変参考になりました。

お礼日時:2006/04/04 04:51

こんな感じ?



Sub Test()
On Error Resume Next
 Set r1 = Application.InputBox("先頭セルを1つ選択", "Select", Type:=8)
 s = r1.Address
 For i = 1 To 6
   s = s & "," & r1.Offset(-1 * i, i).Address
 Next i
 Range(s).Select
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2006/04/03 23:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!