[[20190530152109]] 『最終行 End(xlUP).Rowについて』(しのみや) ページの最後に飛ぶ

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

 

『最終行 End(xlUP).Rowについて』(しのみや)

 教えてください。
 データが入っている最終行の選択をVBAでしています。

 『状況』
 ★データが入っている列が以下のような場合
   A 
 1
 2
 3 【見出し】
 4  商品A
 5 
 6  商品B
 7  商品B
 8  商品C
 9
 ↓
 255 合計

 最終行 = Range("A255").End(xlUP).Row 
 とすることで、最終行の8は取ってこれています。
 (間に空白行があるので、下から数える)

 ★データが入っている列が以下のような場合
   A      B
 1
 2
 3 【見出し】 【見出し2】
 4  商品A   いいい
 5       あああ
 6  商品B
 7  商品B   えええ
 8  商品C   いいい
 9       おおお
 ↓
 255 合計 

 最終行の9を取りたいのです。
 ちなみにデータはAH列まで入っていて最終行がどこかわかりません。

 『考えたこと』
 AI4に
 =IF(COUNTA(A4:AH4)=0,"",COUNTA(A4:AH4))
 として、どこかのセルに文字が入っていると0以外の数字が入るようにして
 AI列で
 最終行 = Range("AI255").End(xlUP).Row
 としてみましたが、
  "" も文字が入っていると認識されるようでした。

 良い方法はありませんか?

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


http://www.excel.studio-kazu.jp/kw/20190513094442.html

で、いろいろなやり方を議論してましたね。
とても、参考になりました。
(う) 2019/05/30(木) 15:32


 ありがとうございます…奥が深いですね。
 そもそもEnd(xlUP).Rowの扱いがアレなんですね。

 回避策…

 AI4に
 =IF(COUNTA(A4:AH4)<>0,ROW(),"") 
 として、

 AI255に
 =MAX(AI4:AI254) 
 で、最終行を表示。

 VBAでは
 Cur最終行 = Range("AH255").Value
 としました。
(しのみや) 2019/05/30(木) 16:31

 どうしてそんな面倒なこと?
 Sub test()
     MsgBox Columns("a:ah").Find("*", , , , 1, 2).Row
 End Sub
(seiya) 2019/05/30(木) 17:36

 >Columns("a:ah").Find("*", , , , 1, 2).Row
 をお借りして試してみたのですが

   A        B      C     D
  1
  2
  3 【見出し】 【見出し2】 【見出し3】 【見出し4】
  4  商品A    いいい     20    =if(C4="","",C4/10)
  5        あああ          =if(C5="","",C5/10) 
  6  商品B           10    =if(C6="","",C6/10)
  7  商品B    えええ     5    =if(C7="","",C7/10)
  8  商品C    いいい          =if(C8="","",C8/10)
  9        おおお     3    =if(C9="","",C9/10)
  ↓
 254                    =if(254="","",254/10)
 255 合計         =sum(C4:C254)

(もともとはEnd(xlUP).Rowの質問でしたので、記載がもれていましたが)

 実際のデータは【見出し4】のように、式が入っている列があり

 データ終了行 = Range("A4:AH254").Find("*", , , , 1, 2).Row とすると

 式が入っている行も、何かが入っていると判定されてしまい

 データ終了行は 254となります。(数式を消すと、消した行は判定されなくなります)

 Find関数について調べてみて、

 私の調査不足かもしれませんが対応できなさそうに思いますが、

 上記のデータでの対応は可能でしょうか。

 私の書いた回避策は、エクセルに基準の式を追加しないといけないため、

 VBAのみで行数が取れればありがたいです。
(しのみや) 2019/06/05(水) 11:51

 > データ終了行 = Range("A4:AH254").Find("*", , , , 1, 2).Row
 データ終了行 = Range("A4:AH254").Find("*", , xlValues, , 1, 2).Row
 にして下さい。
(seiya) 2019/06/05(水) 12:03

 ありがとうございました。
 頂いた内容で確認しなおして見つけました。
 xlFormulas	検索対象を数式に指定
 xlValues	検索対象を値に指定
 xlComents	検索対象をコメント文に指定確認しなおす
 助かりました。
(しのみや) 2019/06/05(水) 16:09

コメント返信:

[ 一覧(最新更新順) ]


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