[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vba 文字を検索・起点にしてセル範囲をコピー』(水無月)
お世話になります。 特定の文字を検索・起点にしてセル範囲をコピーするvbaを教えて下さい。
【流れ】 セルB10 に あいう という文字列あります。あいう の位置は都度移動します。 アクティブシート上で あいう の文字列を検索し セルB10 を取得
見つかった場合 B10を起点に、一つ右のC10から G20 までをコピーし計算2シートの B3へペースト
見つからなかった場合 C20から G30 までをコピーし計算2シートの B3へペースト
はどのように書けばいいのでしょうか? 下記までは分かったのですが、「起点検索してセル取得」が分かりません。よろしくお願いします。
Sub 検索コピー1() (起点を検索してセル取得) 見つかれば Range(Cells(起点, 起点 + 1), Cells(起点 + 10, 起点 + 5)).Copy Sheets("計算2").Select Cells(3, 2).PasteSpecial 見つからなければ Range(Cells(20, 3), Cells(30, 7)).Copy Sheets("計算2").Select Cells(3, 2).PasteSpecial End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
検索対象範囲内に"あいう"が1つしか存在しない事が前提です。 ActiveSheet.UsedRange は、必ず"あいう"が入力され得る範囲に変更可能。 例) Range("B10:B20")等
Sub 検索コピー2() Dim rng As Range Set rng = ActiveSheet.UsedRange.Find("あいう", , xlValues, xlWhole) If Not rng Is Nothing Then rng.Offset(, 1).Resize(11, 5).Copy Sheets("計算2").Range("B3") Else Range("C20:G30").Copy Sheets("計算2").Range("B3") End If End Sub (あなご) 2022/06/18(土) 07:21
あなごさん ありがとうございます。うまくいきました。
一つ伺います。 If Not rng Is Nothing Then この意味は「もし rng が無いことがなかったら」でしょうか? 言い換えると 「もし rng があれば」 で、vbaではこう書くのですね
(水無月) 2022/06/18(土) 10:17
そうですよ。
RangeのFindメソッドのヘルプを読まれることです。
>一致するデータが見つからなかった場合、このメソッドは Nothing を返します。
と書いてあります。
日本語に逐一変換せずに、そういうキーワードを使うのだと考えて下さい。
「Nothingを返さなかったら」ということです。
(γ) 2022/06/18(土) 11:11
(γ) 2022/06/18(土) 11:23
「否定形がどうしても我慢ならん」 その通り! の訳ないです(^^)。
ありがとうございました。
(水無月) 2022/06/18(土) 14:26
既にご指摘がある通り、 Findメソッドの戻り値は、 検索対象が有った場合は、Rangeオブジェクト(検索対象が最初に見つかったセル)が、 検索対象が無かった場合、Nothingが返ります。
コードを実行した時、戻り値の中身の可能性を挙げると、 例えば、Range("B10")が返る、Range("B11")が返る、Range("B12")が返る・・・Nothingが返るとなります。 つまり、有った/無かった という二択ではありませんので、 IFステートメントで条件分岐するとき、 If rng Is 「有った」 Then の様には書けません。 「無かった」方は明確に Nothing と書けるので、こちらを用います。
Not演算子を用いずに記述する場合、 γさんがご提示のTypeName関数以外にも、 If rng Is Nothing = False Then とか If rng Is Nothing <> True Then でも同じ結果になります。 今回の場合、有/無 の両方の場合に処理がありましたので、 If rng Is Nothing Then '無かった場合の処理 Else '有った場合の処理 End If と書くこともできました。
結論としては、書き方はいろいろあるので 自分が理解出来て読みやすい書き方をすれば良いと思います。 (あなご) 2022/06/18(土) 14:29
とても丁寧な解説 感謝いたします。 ありがとうございました。
(水無月) 2022/06/18(土) 15:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.