こんにちは。
Wendy02さんはじめ、みなさんのお力をお借りして、
できあがりまじかのグラフですが、恥を承知で教えて
ください。
教えてもらったマクロ
Sub getMyRange3()
Dim r As Range
With ActiveSheet.Range("A1").CurrentRegion
Set r = Cells(65536, .Cells(.Cells.Count).Column).End(xlUp)
Range("A1", r).Select
End With
Set r = Nothing
End Sub
******************
・データ範囲には0が存在する場合がある。
・末尾データの0は範囲には入れない
のことを考慮すると、期待の範囲がとれません。
オートフィルタでの処理も考えましたが、必要な
0までもフィルタされます。
******************
masa_peeさんの作られたデータサンプルをお借りすると
データ的には、
A B
1 あ 13
2 い 0
3 う 60
4 え 52
5 お 0
6 か 0
というデータのなかで欲しい範囲は、A1からB4です
No.4ベストアンサー
- 回答日時:
こんにちは。
Wendy02です。#3のgaloon さんへ
実は、ここまで至る話は、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2019619
(http://okwave.jp/kotaeru.php3?q=2019619)
という長い話があって、成立しています。私は、たまたま、そのスレッドの後に書いた者であって、みなさんのおかげで出来上がったものなのです。
つまり、B列であって、B列でないことも考慮してなくてはならないっていうことなのですね。(たぶん……)
Do While 1 < r.Row And (IsNull(Cells(r.Row, "B").Value) Or Cells(r.Row, "B").Value = 0)
Set r = Cells(r.Row - 1, r.Column)
それは、ともかくとして、
tabtab9さんへ
実は、私は、なんとなく、自分の書いたものに満足できていないのです。それは、セルを1つずつ調べるのは、少なくとも、最善手ではありません。それで、猶予を与えていただいたので、もう一度、ご質問を読み直してみて、
>オートフィルタでの処理も考えましたが、必要な0までもフィルタされます。
というのをヒントに作ってみました。この方が、納まりがよく格好が良いし、私らしいコードです。巨大なデータになった時に、おそらく、かなりの速度の違いが出るはずです。うまくいくかは分りませんが。
Sub getMyRange5()
Dim r As Range
Application.ScreenUpdating = False
With ActiveSheet.Range("A1").CurrentRegion
.AutoFilter field:=.Columns.Count, Criteria1:="<>0"
Set r = .Cells(65536, .Columns.Count).End(xlUp)
.AutoFilter
Range("A1", r).Select
End With
Set r = Nothing
Application.ScreenUpdating = True
End Sub
この回答への補足
>つまり、B列であって、B列でないことも考慮してなくてはならないっていうことなのですね。(たぶん……)
すみません。そこまで高尚な考えは持ち合わせていなかったです。分かりやすい例えが例えを生んだ結果です。
ホントにすみませんでした。
Wendy02さん、こんばんは。
ヒントになんて・・・
うそでも悪い気がしません。
ぼくにとっては、ある意味
雲の上のひとだったので・・・
ごめんなさいです。ちょっと冷静に
なれません。
これからもよろしくお願いいたします。
No.3
- 回答日時:
ANo.1 galoon です。
ダメでしたか、失敬。
後学のため全ロジックを一応載せておきます。
Sub getMyRange3()
Dim r As Range
With ActiveSheet.Range("A1").CurrentRegion
Set r = Cells(65536, .Cells(.Cells.Count).Column).End(xlUp)
Do While 1 < r.Row And (IsNull(Cells(r.Row, "B").Value) Or Cells(r.Row, "B").Value = 0)
Set r = Cells(r.Row - 1, r.Column)
Loop
Range("A1", r).Select
End With
Set r = Nothing
End Sub
では。
なんだか、お偉方の登場で完全に僕は
面食らっています。galoonさんも、あ
のgaloonさんだし・・・
うれしいのと、申し訳なさでいっぱいです。
どうもありがとうございました。
No.2
- 回答日時:
こんにちは。
Wendy02です。Sub getMyRange4()
Dim rng As Range
Dim i As Long
Dim c As Range
With ActiveSheet.Range("A1").CurrentRegion
Set rng = .Columns(.Columns.Count)
For i = rng.Rows.Count To 1 Step -1
If rng.Cells(i).Value <> 0 _
And rng.Cells(i).Value <> "" Then
Set c = rng.Cells(i)
Exit For
End If
Next i
If Not c Is Nothing Then
Range("A1", c).Select
End If
End With
Set rng = Nothing: Set c = Nothing
End Sub
注:B列まで限定というと、今回のコードは正確ではありません。あくまでも、領域の右端下から検索します。
この手のものは、いくつか案が出てくるはずですから、いくつかご自身のサンプルを作って試してみるとよいですね。後は、疑問に思うことは、ヘルプでチェックしておいたほうがよいです。1度では、とても覚えられないと思いますが、何度か出会うとなんとなく分ってきます。
それと、どういう考え方(ロジック)で作られているか、考えてみるとよいと思います。
この回答への補足
Wendy02さん、すみません。
処理的にはWendy02さんのおかげで、期待の結果を得ることができました。
>この手のものは、いくつか案が出てくるはずですから、
というお話や、”できたのでもういい”、という気持ちは、みなさんに申し訳無いというのと、僕もイヤなので、もうちょっとだけ開けさせてください。
すごーいです。
わがままな上にわがままを重ねてしまいました。
今度こそ、これで十分です。
ありがとうございました。
うれしいです。
P.S.galoonさんの記述も今、試みています。
No.1
- 回答日時:
取得した r を元にして B 列の値が 0 であるかぎり r を上にずらしていって 0 以外の値がある一を探してみればいかがですか?
Set r = Cells(65536, .Cells(.Cells.Count).Column).End(xlUp)
Do While 1 < r.Row And (IsNull(Cells(r.Row, "B").Value) Or Cells(r.Row, "B").Value = 0)
Set r = Cells(r.Row - 1, r.Column)
Loop
ちょっと処理に時間がかかる場合もありますけどね(^^;
この回答への補足
ありがとうございます。
今、実行してみました。
説明不足が原因だと思います。
実行したら、全件が範囲になりました。
申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルオートフィルタで余計...
-
教えて下さい!関数SUBTOTALとC...
-
エクセルで、桁数の異なるデー...
-
色フィルターをかけた状態で、...
-
エクセルのフィルタをかけると...
-
Excel関数、何がいけないのかわ...
-
行番号の文字の色が青色の理由?
-
オートフィルタで抽出したデー...
-
UsedRangeを使ってソートするこ...
-
Excel VBAでオートフィルタで抽...
-
【Excel】 可視セルへの貼り付...
-
=SUBTOTAL に =COUNTIF の機能...
-
色のついたセルにフラグを立た...
-
エクセルの計算表の下向き三角...
-
エクセル オートフィルタ、文字...
-
関数で可視セルのデータ個数カ...
-
エクセルで作成 混合名簿から...
-
フィルタをかけた列のセルの▼マ...
-
Excelでオートフィルタ時に交互...
-
EXCELのフィルタオプションで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、桁数の異なるデー...
-
エクセルオートフィルタで余計...
-
色フィルターをかけた状態で、...
-
Excel関数、何がいけないのかわ...
-
オートフィルタで抽出したデー...
-
教えて下さい!関数SUBTOTALとC...
-
エクセルの計算表の下向き三角...
-
エクセルのフィルタをかけると...
-
5の倍数の日付だけを抽出したい
-
=SUBTOTAL に =COUNTIF の機能...
-
エクセル:色の付いたデータを...
-
excelで奇数の行のみ削除したい
-
色のついたセルにフラグを立た...
-
エクセルを使用してデジタルフ...
-
Excelでオートフィルタ時に交互...
-
【Excel】 可視セルへの貼り付...
-
行番号の文字の色が青色の理由?
-
Excel2010 フィルタで抽出できない
-
関数で可視セルのデータ個数カ...
-
エクセルでのオートフィルタオ...
おすすめ情報