[[20201223103243]] 『Vbaで特定の範囲を選択(途中に空白あり)』(トコヤマ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Vbaで特定の範囲を選択(途中に空白あり)』(トコヤマ)

     A列   B列   C列   D列  E列
1  今月の売上
2  500     800               200
3            600      300             900 
4    700              400      600
5                              900

A2(固定)を起点とし、空白セルを含めてデータが入っているすべてのセルを範囲選択する方法はありますか。 
この例ではE5が最終セルですが、データが縦横に増えていくため範囲は常に変わります。

worksheet(1).usedrange.selectだとA1から選択されてしまうため、A2から選択する方法はありますか?

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 UsedRangeよりCurrentRegionを使用した方が
よいのでは?
With Range("A1").CurrentRegion
    .Offset(1).Resize(.Rows.Count - 1).Select
End With
(はまちゃん) 2020/12/23(水) 11:00

 空白の位置によって正しくない範囲を選択する可能性もあるので
範囲をテーブルにして
Range("A1").ListObject.DataBodyRange
方がよいのかも?

(はまちゃん) 2020/12/23(水) 11:07


別案
    Sub さんぷる()
        With ActiveSheet
            Intersect(.Rows("2:" & .Rows.Count), .UsedRange).Select
        End With
    End Sub

(もこな2) 2020/12/23(水) 11:18


別案その2
    Sub さんぷる2()
        With ActiveSheet
            .Range("A2", .Cells.SpecialCells(xlCellTypeLastCell)).Select
        End With
    End Sub

真面目にやるなら各列の最終行を調べて最大値を採用するとか。

    Sub さんぷる3()
        Dim i As Long, 配列(4) As Long, 最終行 As Long

        With ActiveSheet
            For i = 1 To 5
                配列(i - 1) = .Cells(.Rows.Count, i).End(xlUp).Row
            Next i

            最終行 = WorksheetFunction.Max(配列)
            If 最終行 > 1 Then .Range("A2:E" & 最終行).Select
        End With
    End Sub

(もこな2) 2020/12/23(水) 11:56


失礼。↓を見落としてました。
>データが縦横に増えていく

以下に差し替えで。

    Sub さんぷる3()
        Dim i As Long, 配列() As Long, 最終行 As Long, 最終列 As Long

        With ActiveSheet
            最終列 = .UsedRange.Columns.Count
            ReDim 配列(最終列 - 1)

            For i = 1 To 最終列
                配列(i - 1) = .Cells(.Rows.Count, i).End(xlUp).Row
            Next i

            最終行 = WorksheetFunction.Max(配列)
            If 最終行 > 1 Then .Range("A2", .Cells(最終行, 最終列)).Select
        End With
    End Sub

(もこな2) 2020/12/23(水) 12:08


他の方とかぶっている部分もありますが、3例ほど。。。

Sub test()

    Worksheets(1).Select
    Range("A1").Select
    '例1
    With Worksheets(1).UsedRange
        .Resize(.Rows.Count - 1).Offset(1).Select
    End With

    Range("A1").Select
    '例2
    With Worksheets(1).UsedRange
        Intersect(.Cells, .Offset(1)).Select
    End With

    Range("A1").Select
    '例3
    With Worksheets(1).UsedRange
        .Range(.Range("A2"), .Cells(.Count)).Select
    End With
End Sub

ステップインで1行づつ実行して確認してみてください。

※実務ではセルをSelectすることは基本的に必要ない場合がほとんどなので、
Selectすることは無駄です。
Selectしないような書き方を覚えてください。
(まっつわん) 2020/12/24(木) 08:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.