• ベストアンサー

セルを選択するマクロ(エクセル)

Sub test() x = ActiveCell.Row y = ActiveCell.End(xlToLeft).Column z = ActiveCell.End(xlToRight).Column Range(Cells(x, y), Cells(x, z)).Select End Sub アクティブセルが含まれている行のみで、データが入力されている連続したセルを選択状態にするマクロとして、上記を考えました。 上記を違った形でもっと簡潔に表すことは可能でしょうか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

単純に Range(ActiveCell.End(xlToRight), ActiveCell.End(xlToLeft)).Select でいいと思います。 #1、は、行が選択されて #2、は、矩形でなくて凸凹の時にうまくいきません。

kayonon
質問者

お礼

有難うございました。 うまくいきました。

その他の回答 (2)

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

こんにちは。 Application.Intersect(ActiveCell.CurrentRegion, ActiveCell.EntireRow).Select でしょうか。

kayonon
質問者

お礼

有難うございます。 試してみました。 私の説明がまずかったかも知れません。 A1:B1データなし、C1:F1データあり、G1データなし、H1:K1データあり 上記の状況でD1:E1が選択状態の時に実行した場合は、C1:F1のみが選択状態になるマクロを求めていました。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

ActiveCell.EntireRow.Select

kayonon
質問者

お礼

有難うございます。 試してみました。 データが入力されているセルのみを対象にしたかったのですが、そうでないセルも選択されてしまいました。

関連するQ&A

  • エクセルのマクロ

    Sub test x = ActiveCell.Address y = ActiveCell.End(xlDown).Address range(x:y).Select End Sub 上記の"range(x:y).Select"の正しい記述の仕方を教えてもらいたいのですが。

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

  • エクセル VBA セルのデータを見に行ったのですが・・・

    いつも皆様には大変お世話になっております。 エクセルVBAなのですが・・・ sa = ActiveCell.Row tu = ActiveCell.Column z = Cells(sa + 18, tu + 3).Text MsgBox z If z = "" Then sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 18, tu + 3) = a Else sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 32, tu + 3).End(xlUp).Offset(1, 0) = a と、入力したのですが z = Cells(sa + 18, tu + 3).Text この zのセルに文字が入っていても MsgBox z  をみても何も入っていないと表示されてしまいます。 何が原因かさっぱりわかりません;; 皆様よろしくお願いいたします

  • オートフィルタ 最終行を指定する必要は?

    エクセルでVBAでオートフィルタをする場合、 ******************************************* Sub test1() 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(1, 最終列)).AutoFilter End Sub Sub test2() 最終行 = Range("a65536").End(xlUp).Row 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(最終行, 最終列)).AutoFilter End Sub ******************************************* どちらでもできるのですが、 test2のように最終行を取得・指定する必要はあるのでしょうか?

  • エクセルのマクロでセル選択の条件式の書き方

    いつもお世話になりありがとうございます。 Excel97です。 Worksheet_SelectionChangeマクロで、 Range("B2:D11")内のセルが選択されたときに動くマクロを書きたいのですが、条件式を With ActiveCell If .Row < 12 And .Row > 1 And .Column < 5 And .Column > 1 Then '実行するマクロ End If End With とIfの行を And、And、And で長々と書かず、Range("B2:D11")を使うなりしてもっと簡略な記述方法はないでしょうか? ご教示いただければ幸いです。

  • エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい

    エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい。 今、3列目に入力された値によって15列から17列の値を自動入力するように次の マクロを作りました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 3 Then Exit Sub For Each r1 In Selection If r1.Cells(1, 1) <> "部品表" Then Cells(r1.Row, 15) = "-" Cells(r1.Row, 16) = "-" Cells(r1.Row, 17) = "-" End If Next End Sub 3列目のみのセルをペーストすると正しく動作しますが、1列目から3列目のセルにペーストすると何も動きません。 正しく動くようにするには、どう修正すればいいでしょうか?

  • セルにワイルドカード*を含む式を書き込むには?

    下記コードはアクティブセルの右にアクティブセルと同じ値を書き込みますが、 ワイルドカード付きの値を書き込むにはどうすれば良いのでしょうか? n列  (n+1)列 あ     あ* い     い* う     え* ______________________________ Sub test1() Dim R As Range, R1 As Range Set R = ActiveCell Set R1 = Range(R, Cells(Rows.Count, R.Column).End(xlUp)) With R1.Offset(, 1) .Formula = "=" & R.Address(0, 0) End With Set R1 = Nothing: Set R = Nothing End Sub

  • カット&ペーストのマクロ(エクセル)

    Sub test()  Dim r1 As Range  Set r1 = Range(ActiveCell.Address)   On Error GoTo er:    For i = 0 To r1.End(xlToRight).Column - r1.Column    ActiveCell.Offset(-i, 0) = ActiveCell.Offset(0, i).Value    Next i   er: End Sub 上記のマクロを実行すると、以下のように横に入力されているものが縦にコピーされます。 A SS DDD FF GGG   ↓ ↓ ↓ ↓ GGG FF DDD SS A SS DDD FF GGG これを、コピーではなくカット&ペーストに変更するにはどうすればいいでしょうか?

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • vba エクセル

    2行目から、最終行までEmptyにしたいのにならないです。 1行目はフィールド行なのに、そのままにしたいのですが 2行目から最終行は空白にしたいです。 なので Sub TEST() With Sheets("log") lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column .Range(.Cells(2, LastCol), .Cells(lastRow, LastCol)) = Empty End With End Sub としたのですが、何も起こりません。 lastRowは100、LastColは5なのですが、 このマクロを実行しても何も起こらないです。 なぜでしょうか?

専門家に質問してみよう