• ベストアンサー

エクセルで、セルを選択状態にするマクロ

任意のセルに入力されている文字数分(スペースも一文字とカウント)だけ、任意のセルから斜め上にセルを選択状態にしたいのですが。 例 ●文字数をカウントするセル(毎回違う)の中身が"g6# 3w."(文字数は7) ●選択状態の起点となるセルがC30(毎回違う) 実行結果は、C30 D29 E28 F27 G26 H25 I24 が選択状態になります。 上記のことができるマクロを教えてもらいたいのです が。 (文字数分だけ斜め上には行けない状況は想定されなくて結構です)

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

あ、こうかな? 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

laminex
質問者

お礼

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

laminex
質問者

補足

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

どんな使い道があるのか、判らず、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 を実行後、上記をやってみてください。

laminex
質問者

お礼

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

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな感じ? 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

laminex
質問者

お礼

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

関連するQ&A