• ベストアンサー

UsedRange って、「空白セル」までも参照するのですか?

Windows XP Home Edition Office XP Personal 2002 Excel 2002 1行~200行までのみに値があります。他は空白です。 UsedRange は、 何らかの編集が行われているセル範囲を選択するということですが、 確認のために、 3、 4 にして実行しますと、 3はColumns("G:H") を全部選択してしまいます。 書式を変更した「空白セル」までも、UsedRangeとなってしまうのでしょうか。 私は、3も "G1:H200" を選択すると思っていたのですが、 確認のしかたが間違っておりますでしょうか? よろしくお願い致します。   '1   With ActiveSheet.UsedRange.Columns("G:H")   '2   With ActiveSheet.Range("G1:H200")   '3    ActiveSheet.UsedRange.Columns("G:H").Select   '4    ActiveSheet.Range("G1:H200").Select

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

UsedRangeプロパティをヘルプには 指定されたワークシートで使われたセル範囲 (Range オブジェクト) を返します。 と、書かれています。 >書式を変更した「空白セル」までも、UsedRangeとなってしまうのでしょうか。 そのようです。 やってみれば直ぐ解りますね。 MsgBox ActiveSheet.UsedRange.Address MsgBox ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address

oshietecho-dai
質問者

お礼

早速のご回答誠に有難うございました。 空白であれば、返さないと思っておりました。 いろいろ行ってみて、よく解かりました。

関連するQ&A

  • UsedRangeの範囲の設定

    入力したデータの一番下にの行に"data_end"と入力するようにしたいと思っております。 今、UsedRangeを使用してその下の行に"data_end"と入力しようとすると以前に使用した行まで選ばれてしまい、空白の行ができてしまう状態になっています。また、CurrentRegionを使用すると空白行があると空白行以降を選んでもらえません。(データがトビトビにあるので空白行と認識されてしまう可能性があります。) しかも、データの入力されているセルは別のシートで計算式に参照されているのでいらない行を削除することはできません。 今入力されている状態の一番下の行を認識するにはどうしたらよいでしょうか? プログラムは以下のように入力してあります。 Sub test() Dim row_end As Integer Sheets("sheet1").Select ActiveSheet.UsedRange.Select row_end = Selection.Rows.Count Sheets("sheet1").Cells(row_end + 1, 1).Value = "data_end" End Sub ものすごく基本的な質問かもしれませんが、よろしくお願いしますっっっ。

  • 途中に空白行や列があるデータ範囲

    エクセル2003です。 セルA1からセルC50までデータがあり 10行目と20行目は全て空白、 セルC39が空白で セルE55、F57、G55にはデータがある の状態で以下の構文ですと Sub 範囲コピー1() Range("B3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy End Sub 途中に空白行や列、空白セルがあり さらに離れた所E55、F57、G55に データが有るのにもかかわらず セルB3からセルG57までを選択してクリップボードにコピー してくれます。 ですが問題がありまして 上記のシートにて A45~F50を選択してDeleteをし、 さらにセルのF55、G55もDeleteして データ範囲を セルA1~E44とセルE55のみにしてからから 上記構文を実行すると セルB3からセルE55を選択してクリップボードにコピー してほしいのに、 データ削除前と同様の セルB3からセルG57を選択してクリップボードにコピー されてしまいます。 これはエクセルの手操作 Ctrl+Shift+End でも同じようになりますので当然の結果(※1)と思っています。 (※1→なにか別な方法はありますか?) 上記の使用方法はあまりないのですが 構文を使う時点での最大行数や最大列数は常に不明で 途中空白が有る場合無い場合、 上記のようにシート上でデータ操作をした直後であっても データ削除部分は加味しデータのある範囲だけの取得の対応 が可能な構文を1種類で作成したいのですが どういう方法があるでしょうか? ちなみに Sub 範囲コピー2() Range("B3").Select Range(Cells(Rows.Count, 1).End(xlUp).Row).Select Range(Cells(1, Columns.Count).End(xlToLeft).Column).Select Selection.Copy End Sub これですと 実行時エラー1004 Rangeメソッドは失敗しましたGlobalオブジェクト となります。 ヘルプをクリックしても何も表示されません。 WEB検索するとこのエラーの質問は結構多いのですが 事例が相違する為よく理解できません。 もしかしてRangeなのに 取得できる値が一つの番号でセルを指定できないからでしょうか? エラーになる構文だと最初のRangeは行番号、次のRangeは列番号、 ですので。 で、 Sub 範囲コピー3() Dim 最終行 Dim 最終列 Range("B3").Select 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 最終列 = Cells(1, Columns.Count).End(xlToLeft).Column Cells(最終行, 最終列).Select Selection.Copy End Sub これならエラーにはなりませんが 事例だとセルC50だけが単独選択されて範囲として 取得をしてくれません。 また 1, Columns.Count ですので最終列の列番号の取得が1行目の最終列から左に検索し データのある所の列番号を返すので 3→C列 となってしまい D,E,F列を見つけてくれません。 かといって 55, Columns.Count では データが55行まで無い場合には対応が出来ませんのでこれも駄目です。 途中に空白が無い場合や離れたセルが無い場合でも使いたいので UsedRangeは使用したくない(よくわかってない事もあって)です。 よろしくお願いします。

  • CurrentRegionの不思議

    エクセルです。 A1 test B1 test C1 test と入れて、 Sub test() Range("a2").CurrentRegion.Select End Sub をすると、 $A$1:$C$2までが選択されてしまいます。 Range("a1").CurrentRegion.Select にすれば、a1からC1までを選択できますが、 なぜ Range("a2").CurrentRegion.Select だと、 文字が入ってないセルまでが対象になるのでしょうか? Range("a3").CurrentRegion.Select にしたら、A3だけが選択されました。 Range("d2").CurrentRegion.Select にしたら、 A1~D2までのセルが選択されました。 隣接した空白セルまで範囲の一部として認識されてしまうのは仕様なのでしょうか? ActiveSheet.UsedRange.Select をしたら、空白セルは選択されませんでした。

  • ExcelVBAで相対参照をしたい

    ExcelVBAで、任意の範囲を選択して各行ごとにある処理を行いたいと考えています。 Sheet_Name = ActiveSheet.Name range_address = Selection.Address range_address = Replace(range_address, "$", "") range_address = Left(range_address, InStr(range_address, ":") - 1) work_columns = Selection.Columns.Count '列数 Work_Rows = Selection.Rows.Count '行数 Range(range_address).Select Range(activecell_address, ActiveCell.Offset(0, work_columns)).Select 行の選択が出来れば、あとは、ソートするだけです。 と、選択範囲の左上のアドレスと、選択範囲の行数、列数の取得は出来たのですが、1行ごとの選択がうまく出来ません。(相対参照の仕方がわかっていないだけだと思いますが) やりたいことは、選択範囲を上から順に行ごとにソートしたいのですが、どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?

  • 無効なセルを参照した場合の判定について

    表内のセルを選択した場合と、表外のセルを選択した場合に処理を分けたいと考えています。アクティブセルがhaniに含まれる場合(または含まれない場合)ですが、<>と=では無理なようなのですが、何を調べても分かりません。どなたかよろしくお願いいたします。 Windows2003、XPです。 Sub shita() Dim a As Range Dim hani As Range Set hani = UsedRange b = ActiveCell.Address MsgBox UsedRange.Address & " " & ActiveCell.Address If b = hani.Address Then Range("A1").Select Else MsgBox "表内のセルを選択してください。" End If End Sub

  • 結合セルを含む空白行に下のデーターを上に詰める

    よろしくお願いします。 結合セルを含む空白行に、下のデーターを詰める。 下の場合の、【かわ、やま】は、1行目と2行目のセルを結合させています。また、【うみ、たに】は、3行目と4行目のセルを結合させています。   A   B   C   D   E 1      100 AAA      かわ やま 2 200 BBB 3       空白 空白     空白        空白 4       空白 空白 5        111 CCC      うみ たに 6 222 DDD これを、下のようにしたいのです。   A   B   C   D   E 1      100 AAA           かわ やま 2 200 BBB 3        111 CCC      うみ たに 4 222 DDD 結合されているため下の構文では詰めることができません Dim LastRow As Long With ActiveSheet LastRow = Range("A232").End(xlUp).Row Range("B1:E" & LastRow).Sort Key1:=Range("B1"), Order1:=xlAscending End With

  • 結合セルを含む空白行に下のデーターを上に詰める

    先ほど、質問を出さしていただいたのですが、説明文が詰められているため醜くなってしまいましたので再度出さしていただきます。 よろしくお願いします。 結合セルを含む空白行に、下のデーターを詰める。 下記の場合の、【かわ、やま】は、1行目と2行目のセルを結合させています。また、【うみ、たに】は、3行目と4行目のセルを結合させています。     A    B    C    D    E 1            100   AAA         かわ            やま 2            200   BBB 3            空白   空白         空白            空白 4            空白   空白 5            111   CCC         うみ            たに 6            222   DDD これを、下のようにしたいのです。     A    B    C    D    E 1            100   AAA              かわ            やま 2            200   BBB 3            111   CCC         うみ            たに 4            222   DDD 結合されているため下の構文では詰めることができません Dim LastRow As Long With ActiveSheet LastRow = Range("A232").End(xlUp).Row Range("B1:E" & LastRow).Sort Key1:=Range("B1"), Order1:=xlAscending End With

  • Excel VBA UsedRange範囲ソート

    図のような中抜の一覧ができているとき、商品コードで空行を飛ばして並び替えをしたいのですが、下記だと空行まで(チョコからわたがしまで)しか対象になりません。 ---------------------------- Sub 並べ替え() With ActiveSheet.Sort .SortFields.Clear 'Key:=Range("A3")でソートする列とタイトル位置を指定 .SortFields.Add Key:=Range("A3"), SortOn:=xlSortOnValues, _ Order:=xlAscending '.「商品コード」("A3").でソート .SetRange Range("A3").CurrentRegion ' 先頭行をタイトル行と見なす .Header = xlYes .Apply End With End Sub ------------------------- 範囲をCurrentRegion ではなくUsedRangeに広げるには、どこをいじったらいいでしょうか。 求める結果としては「商品コード」の列が登り順に揃ってほしいのです。 データ処理としてはソートをかければいいだけですが、UsedRange(範囲内のセルを選択し、Ctrl+Shift+Endキーで選ばれる範囲)をみつけてソートをかける方法を知りたいのです。

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • vba  対象セルが空白の間動作を繰り返すには?

    下記を走らせると、セルが右端まで行ってとまります。 そうなる前に、対象セル範囲が空白になった時点で、動作を止めたいのですが どう記述するのがいいでしょうか? Dim u As Integer, o As Integer Application.Calculate For u = 2 To 3 For o = 7 To 2000 If Cells(u, o) = "" Then Range("G2").Select Range("G2").End(xlToRight).Select ActiveCell.Resize(6, 5).Select Selection.Cut Range("B2").Select Range("B2").End(xlDown).Select ActiveCell.Offset(1).Select ActiveSheet.Paste End If Next o Next u End Sub

専門家に質問してみよう