質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

662閲覧

VBAによるEnd(xlDown)によるセルの選択について

yutkts

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/01/23 04:52

前提

以下のようなエクセルの表があった場合に
VBAにてB列目の最初の行から最後の行の文字列を取得し
B列の値をメッセージボックスで出力するようにしております。

<エクセル表の例>

AB
1hoge
2fuga
3piyo

<VBAコード>

vba

1Set r = Range("B1", Range("B1").End(xlDown)) 2For Each str In r 3 MsgBox(str) 'hoge,fuga,piyoの順に出力される 4Next

解決したい内容

上記の表の場合は、特に問題はないですが、
表が以下のようになっている場合に同様の処理を実行すると、B列のxlDownにおいて、
エクセル上での最大行数まで行ってしまうため処理がオーバーフローを起こしてしまいます。

<エクセル表の例>

AB
1hoge

上記のような場合は、End(xlDown)を実行せず、Range("B1")のみを出力したいと思うのですが、
何かいい方法はありませんでしょうか。

恐れ入りますが、ご回答いただけますと幸いです。
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

一番下から上に見ていけばいいのでは。

VBA

1Set r = Range("B1", Range("B" & Rows.Count).End(xlUp))

余談ですが、Strという関数が存在するので、変数に使うのはよろしくないですよ。

投稿2019/01/23 05:29

編集2019/01/23 05:31
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/01/23 06:18

たしかに言われたとおり下から上で解決できそうです! Rows.Countで一番下という意味になるんですね。 コメントいただきありがとうございました! 変数strについてもご指摘ありがとうございます。
guest

0

想定できるあらゆる場合を考慮して仕様を決定して、コーディングすべきです。

質問のようにデータが1件だけの場合はすでに回答が付いていますが、


下記のように空欄があったらどうするのか。

AB
1hoge
2fuga
3
4piyo

hoge, fuga まででいいのか。
piyoも出力するのか。

前者ならkobacさんの回答、後者ならttyp03さんの回答になります。


データが0件ならどうするのか。

AB

何もしないのか、空欄のメッセージを出力するのか、エラーメッセージを出力するのか。

それによってもコードが変わってきます。

投稿2019/01/23 05:45

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/01/23 06:24

たしかにご指摘いただいた通り、空白がある場合までは想定しておりませんでしたが 空白があった場合でも、piyoまでを出力対象としたい考えております。 また、データが0件の場合は、処理は行わないものとして、条件分岐で抜けるつもりでした。 ご指摘いただきありがとうございました!
guest

0

End(xlDown)は実行してしまって、最大行数まで行ってしまったかを確認し、行ってたら分岐する形でどうでしょうか。

VBA

1If r.Count = Rows.Count Then 2 MsgBox Range("B1") 3 Exit Sub 4End If

他にも「B2セルを確認して空白ならEnd(xlDown)しない」とか色々やり方はあると思います。

投稿2019/01/23 05:25

kobac

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutkts

2019/01/23 06:19

こちらの条件分岐でもうまくいくのを確認できました。 コメントいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問