No.9ベストアンサー
- 回答日時:
tabtab9さん、こんにちは。
Wendy02です。
このようにしたらいかがかしら?
Sub getMyRange3()
Dim r As Range
With ActiveSheet.Range("A1").CurrentRegion
'または、Activesheet.UsedRange
Set r = Cells(65536, .Cells(.Cells.Count).Column).End(xlUp)
Range("A1", r).Select
End With
Set r = Nothing
End Sub
.UsedRange は、離れた場所のものまでを範囲にしてしまう欠点があります。逆に、.CurrentRegion は、A1 からデータが離れすぎると、取れないことがあります。これは、C列なら、C列の右下端からA1に向かって、範囲を取るようにします。
一応、分りやすいように、r で変数を取りましたが、1つにまとめてしまって結構です。こういうのは、簡単なコードなのですが、慣れていないと、ちょっと思いつきませんね。慣れていなかったら、やはり、一度、Union の使い方を覚えたら良いかと思います。1つずつ、足していく方法です。ローテクに見えますが、かなり便利です。
もしも、点々と間が空いているようにデータの場合は、右端列の.SpecialCells(xlCellTypeConstants) から、そのAreas Count の最後尾、最後のセルを取るのが一番確実です。
ありがとうございます。
完璧な結果となりました。
P.S.本当にお手数をとらせて申し訳ないです。
最低でも、Wendy02さんから教えていただいた内容は、
熟知して、お礼とさせていただきます。
No.8
- 回答日時:
tabtab9さん、こんにちは。
今、私自身、少しずつプログラミングを勉強をしています。もし、私が、仕事で使わなくてはならないとしたら、達成しなければならないという、アセリに近いものを感じながら、土日を掛けて、質問掲示板に聞いていることになるかと思います。
さて、マクロですが、以下は、ActiveCell が、ブランクでなかったら、その場所から、左端上に伸ばすことにはなるのですが、やっぱりコードとしては、基点となるのはA1と書くわけです。そして、10行以上は取らないとすれば、以下のようになります。
Sub getMyRange1()
Dim myRow As Long
'値の入っている右端を選択
If Not IsEmpty(ActiveCell) Then
'10行以上は、範囲を取らない
If ActiveCell.Row > 10 Then myRow = 10 Else myRow = ActiveCell.Row
Range(Range("A1"), ActiveCell).Resize(myRow).Select
End If
End Sub
以下は、通常では、考えられない設定ですが、左端上のデータの入っているものを探し、範囲を取るコード
Sub getMyRange2()
Dim r As Range
'値の入っている右端を選択
If Not IsEmpty(ActiveCell) Then
'左端上を探す
On Error Resume Next
Set r = ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeConstants)
If Err.Number > 0 Then Exit Sub
On Error GoTo 0
Range(r.Cells(1), ActiveCell).Select
End If
End Sub
この回答への補足
すっ、すみません。
masa_peeの例を使わせていただきますと、
(本当に僕が悪いというのは実感していますの
で、この場をお借りしてお詫び申しあげます。)
<masa_peeさんの作られたデータサンプル>
A B
1 あ 13
2 い 9
3 う 60
4 え 52
5 お 21
6 か 87
7 き
8 く
9 け
10 こ
この例だとB列が6行目までなのでA1:B6を選択したい。
P.S.
>今、私自身、少しずつプログラミングを勉強をしています。
Wendy02さんほどの技術をもつとしても、少しずつプログラミングを勉強・・・とのことですが、僕はなぜ
No.7
- 回答日時:
こんばんは。
良くあることなのですが、マクロコードに慣れている方なら、ダイレクトに問題的を提示できても、そうでない方ですと、その周辺部分や具体的に言ってもらわないと、ほとんど通じないということなのですね。
No.2016904『超基本ですみません。EXCELマクロの記述で改行』のコードの書き方で、一応の解決はされているようですが、実際は、Rangeオブジェクトのプロパテイとして、ひじょうに不自然なんですね。
そのご質問とセットで考えると、
例えば、以下のように、Union でつなげていくのがよろしいのではないか、と私は思うのですが、一般的には、マクロで行うにしても、マトリックス(長方形の四角)で扱ったほうが楽なのですね。マトリックスにしておいて、条件で、For Each -In ~などのループで振り分けて、選別して処理していくというのが、マクロとしては簡単なのです。
だから、以下のような方法は、例外中の例外です。
Sub RangeCollecting1()
Dim rng As Range
Dim UnionRng As Range
Set rng = Range("A1:A10") '固定範囲
'Range("B2")の可変範囲
Set UnionRng = Union(rng, Range("B2", Range("B2").End(xlDown)))
UnionRng.Select
End Sub
>A列は10行まで確かに固定なのですが、B列以降のデータが不定。
Sub RangeCollecting2()
Dim r As Range
Dim i As Integer
Dim rc As Range
Dim ur As Range
Set ur = Range("A1:A10") '固定範囲
Set r = Range("A1").CurrentRegion
'B列以降不定範囲
For i = 2 To r.Columns.Count
On Error Resume Next
'定数のみを拾う
Set rc = r.Columns(i).SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Err.Number = 0 Then
Set ur = Union(rc, ur)
End If
Next i
ur.Select
End Sub
この回答への補足
Wendy02さん、すみません。
実は、・・・説明の仕方が非常にまずいことを
痛感しました。
範囲で欲しかったのは”『 ”の形ではなく□
でした。右端を起点に左上に延ばす範囲指定です。
本当に手間を取らせて申し訳ないです。
P.S.社内では実際のところ、以前にWendy02
さんに教えていただいた”手で範囲・・・”が重宝
されていますが、ワンランク上(自動範囲指定)の
マクロの実行をと思い、今回Q&Aをださせていた
だきました。
No.5
- 回答日時:
補足の仕方ですが、言葉だけで説明されてもわかりにくいのでどんなデータかサンプルを出した方がいいですよ。
A B
1 あ 13
2 い 9
3 う 60
4 え 52
5 お 21
6 か 87
7 き
8 く
9 け
10 こ
この例だとB列が6行目までなのでA1:B6を選択したいんです。
とかね。
No.3
- 回答日時:
B列の行が不定なのであれば下記のような感じでしょうか。
Range("B2:B" & Range("B65536").End(xlUp).Row).Select
この回答への補足
※他の方と重ねた補足ですみません。
このような内容しかかけないので
お許しください。
******************
説明の仕方がわるかったです。申し訳無いです。
A列は10行まで確かに固定なのですが、B列以降の
データが不定。
で、で・・・欲しいのは、右側の最終行を基本とした
データ範囲です。データ範囲を 左から右下に求めるのではなく、右下(データの最終)から左上に求めたいのです。・・・A列の使用しなかったデータは範囲外にしたいのです。
No.2
- 回答日時:
>この範囲を選択する方法を教えてください。
範囲とは「A1:Bnn」ですか?
それとも「B1:○nn」ですか?
>(『 みたいにA列に固定データがあるのでうまく
範囲をひろえません。)
該当部分のソースを載せてください。
No.1
- 回答日時:
複数の範囲を選択するには
Range("A1:A10,B2:" & str & ).Select
※「str」は任意のアドレスを示すstring型の変数
でよいと思いますが、お聞きしたい回答だったでしょうか?
この回答への補足
説明の仕方がわるかったです。申し訳無いです。
A列は10行まで確かに固定なのですが、B列以降の
データが不定。
で、で・・・欲しいのは、右側の最終行を基本とした
データ範囲です。データ範囲を 左から右下に求めるのではなく、右下(データの最終)から左上に求めたいのです。・・・A列の使用しなかったデータは範囲外にしたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
Excel関数で、範囲内の最後のセ...
-
【エクセル】区切り位置で分割...
-
値の入っているセルのうち、一...
-
ピボットテーブル 0個の行を...
-
SUMIFで数値が入力されているセ...
-
correl関数の範囲指定
-
複数の候補列から、検索値と一...
-
EXCELであるデータの数を数える
-
エクセル 8ケタの数字から日数...
-
Excelで複数列かつ複数行分の一...
-
Excelの集計で65000行のデータが?
-
Excelのマクロでソートがうまく...
-
更新前と更新後の差分をVBAを使...
-
空白セルと行に色をつけるVBA E...
-
エクセルの日付書式を一発置換...
-
エクセルで見出し(項目名)の...
-
Excelで、72列のデータがありま...
-
エクセル 別のファイルにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
Excel関数で、範囲内の最後のセ...
-
値の入っているセルのうち、一...
-
SUMIFで数値が入力されているセ...
-
更新前と更新後の差分をVBAを使...
-
エクセル 8ケタの数字から日数...
-
ピボットテーブル 0個の行を...
-
エクセルで何種類のデータがあ...
-
エクセルに入力された日付「S40...
-
SUMPRODUCT関数 行が増えても...
-
Excelのマクロで行を間引きたい
-
【Excel】歯抜けデータの集約
-
エクセル、正数のみの集計[(負...
-
A and B or Cの合計の出し方
-
Excelで複数列かつ複数行分の一...
-
ピボットで複数の区切りでグル...
-
エクセルで見出し(項目名)の...
-
Excelのマクロでソートがうまく...
おすすめ情報