[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『.End(xlDown).End(xlDown)の省略』(さき)
VBAのこの記述なんですが、2回つづけてのEnd(xlDown)を
一つにまとめたいのですが、適当な記述はあるのでしょうか?
< 使用 Excel:Excel2007、使用 OS:Windows7 >
MsgBox Cells(Rows.Count, "A").End(xlUp).Row (???) 2017/07/07(金) 17:45
>2回つづけてのEnd(xlDown)を 一つにまとめたいのですが、
MsgBox Range("a1").End(xlDown).End(xlDown).Address
こんな感じでできますが、何を求めているのでしょう? (seiya) 2017/07/07(金) 18:11
>二つ目のブランクセルを指定したいということですか?
間違ってました。たとえば、↓のような場合、A1から2回End(XlDown)を行うと、 A5になりますね。
A 1 1 2 1 3 1 4 5 1 6 1 7 1 8 1 9 10 1 11 1
seiyaさんがおっしゃるように、何を求めているかによっては >2回つづけてのEnd(xlDown) というの自体が実は間違っていた、という可能性もありますね。 (カリーニン) 2017/07/07(金) 20:26
考えた末ああなって、かっこうよく書こうとした結果だと推測。 A1:A11と範囲固定しちゃってるけど。 こんな感じなのかな?
Dim Rng As Range, N番目の範囲 As Long N番目の範囲 = 2 Set Rng = Range("A1:A11").SpecialCells(xlCellTypeConstants, 23) With Rng.Areas(N番目の範囲) MsgBox N番目の範囲 & "個目の範囲の" & vbLf & _ "先頭は、" & .Cells(1).Address(0, 0) & vbLf & _ "最後は、" & .Cells(.Cells.Count).Address(0, 0) End With Set Rng = Nothing
(BJ) 2017/07/07(金) 22:38
End(xldown)End(xldown)の記述自体をイメージとしては
End(xldown*2)みたいに一つにまとめる記述方法はありますかという事でです。
説明不足ですみません。
(さき) 2017/07/08(土) 11:20
seiyaさんの
>MsgBox Range("a1").End(xlDown).End(xlDown).Address
で何か問題がありますか? それとも、 >End(xldown*2)みたいに一つにまとめる記述方法はありますかという事でです。 という記述があるはずだ、ということですか? どこかのHPで見かけたのでしょうか? あったとしても、自作Functionか何かだったと思います。 (カリーニン) 2017/07/08(土) 11:28
>End(xldown*2)みたいに一つにまとめる記述方法はありますかという事でです。
ありません。
追記: 12:36 MsgBox Range("a1").End(xlDown).End(xlDown) にしても、きちんと処理をしてやらないと使い物にならないので私は使用しませんね。 (seiya) 2017/07/08(土) 11:43
まとめる記述方法は知らないですが、どういった場面で使用されるのか興味あります。 下記のような場合、それぞれ1行目からCtrl+↓↓とすると、すべて4行目で止まると思いますが 意味合いがまったく違うような気がします。
|[A]|[B]|[C] [1]| 1| 1| [2]| 1| | [3]| | 1| 1 [4]| 2| 2| 2
参考までに、現在想定されている使いどころを教えてもらえませんか? (稲葉) 2017/07/08(土) 13:19
>.End(xlDown).End(xlDown)
なんか外国の方では、結構いるみたいですね なんて書いているのか読めないけど。
日本でそう回答している方も1人いたし。 私は、そういう風にかきたくないですね。
(BJ) 2017/07/09(日) 00:10
少し駄文を。
もしそういう使いかたがニーズにマッチしているなら、 普通に二回繰り返せばよい、というのが私の意見です。
(1) >End(xldown*2)みたいに一つにまとめる記述方法はありますかという事でです。 回答がありましたように、それはありません。
Endは何かというと、RangeオブジェクトのRangeを返すプロパティです。 ユーザーがその挙動を変更させること(xlDown*2などという引数の追加) はできません。 また、End2(xlDown)のような発想で、そうした機能を持つプロパティを 既存のRangeオブジェクトに追加することも、仕様上できません。
(2) どうしても、二回繰り返す書き方が、何度も何度も色々な箇所に出てきて、 どうしても自身の美学として許せない、ということなら、 ユーザー定義関数を作ればよいでしょう。 以下、例示。
Sub test1() ' 普通はこう書く Debug.Print Range("A1").End(xlDown).End(xlDown).Address End Sub
Sub test2() ' 二回繰り返すのは恥だという美学派 Debug.Print end2(Range("A1")).Address End Sub
' ユーザー定義関数 Function end2(r As Range) As Range Set end2 = r.End(xlDown).End(xlDown) End Function
ただ、貴兄の厳格な美学を少し緩めたほうが、幸せになれるだろうと思われます。
# 力を入れるようなテーマではなかったねえ。
(γ) 2017/07/09(日) 10:01
需要あるのかわからんけど。
Sub aaaa() MsgBox EndxlDownDown(Sheets("Sheet1").Range("A1"), 3).Address End Sub
Function EndxlDownDown(Rng As Range, 回数 As Long) As Range For i = 1 To 回数 Set Rng = Rng.End(xlDown) Next Set EndxlDownDown = Rng End Function
(BJ) 2017/07/09(日) 13:09
問題は無いのですが、単純に私が.End(xlDown).End(xlDown)の記述に違和感を感じ、省略して記述できないのかなー?と思って質問した次第です。
わざわざユーザー定義関数を使うのものでもないですし、おとなしく列挙しようと思います。
(さき) 2017/07/09(日) 17:18
結局使い道は教えていただけないのですね (稲葉) 2017/07/09(日) 19:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.