EnjomonWeb

Excel VBAの画像
2023/11/27

Excel VBA セル位置が変わっても特定の範囲を選択する方法 | Find&Address

仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。

効率的なコードが書けていない可能性もありますので、予めご了承ください。

今回はFindとAddressを使用し、セル位置が変わっても特定の範囲を選択し、コピー等を行う方法を紹介します。

使用ケース

例として、以下のような上部には従業員別の数値等の一覧、下部に合計が集計(赤枠で囲った範囲)された表があるとします。

従業員の変動があると列が増えたり減ったりするため、合計の位置(列)も変わりますが、変動があっても合計の数値部分のみVBAで選択しコピーしたい、というケースを想定します。

かなりニッチで、そんなケースあるんかい!という感じですが、私はありました・・・。

サンプルコード


Sub cellsearch()

Dim c
Dim c2

Set c = ThisWorkbook.Sheets("従業員一覧").Range("B:B").Find("合計", SearchOrder:=xlByColumns)
c2 = c.Cells(2, 2).Address

Range(c2).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Copy

Sheets("集約").Range("c3").PasteSpecial Paste:=xlPasteValues

End Sub

どういう動きをしているかというと、以下の流れになります(もっといい方法があるかもしれませんが!)。

コード解説

テキストの「合計」検索

Set c = ThisWorkbook.Sheets("従業員一覧").Range("B:B").Find("合計", SearchOrder:=xlByColumns)

位置が変わる範囲をどのように指定しているかというと、今回の例であれば「合計」というテキストがあるように、テキスト等の固定されたデータの位置を基準にして、そこから目的のデータがある位置を取得しようと考えました。

なので、まずはテキストの「合計」を検索します。

検索はFindメソッドを使用します。

Findメソッド引数

Find(What, [After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat])

[]内は省略可能

今回は後の工程で変数としてセットしたいため、予めRangeで行を指定していますが、Findで「合計」というテキストを列方向に検索している流れとなります。

テキスト「合計」より指定した位置取得

c2 = c.Cells(2, 2).Address

Cellsを使用し、c(テキスト「合計」のセル)の位置より1つ右・1つ下のセルの場所をc2として変数にセットしています。

本来Addressは、現在位置の取得に使用することが多いと思うのですが、今回はCellsと組み合わせ、指定した移動位置の取得に使用しています。

取得したセルから最終行・最終列を選択、コピー

Range(c2).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Copy

集約先へ貼り付け

Sheets("集約").Range("c3").PasteSpecial Paste:=xlPasteValues

あとは集約先に貼り付けして完了です。

例では同じファイルの別のシートに貼り付けしていますが、別のファイルへ貼り付けする場合は別途指定ください。

以上、FindとAddressを使用し、セル位置が変わっても特定の範囲を選択し、コピー等を行う方法でした。

簡単でニッチなプログラムになりますが、どなたかの参考になれば幸いです!

Excel VBAの画像

ユーザーフォームを使用した入力フォームの作り方

Excel VBAの画像

週ごとに縦に並んだ表を横並びにする方法 | Find&Set

Excel VBAの画像

セルに入力された日付を取得し自動でシートとファイルを作る方法

Excel VBAの画像

検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect

Excel VBAの画像

ブックを開いた時のウィンドウサイズを指定する方法 | workbook_open

Excel VBAの画像

新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction

Excel VBAの画像

複数のワークシートをまとめて表示・非表示にする方法 | Visible Not.Visible

Excel VBAの画像

セル位置が変わっても特定の範囲を選択する方法 | Find&Address

Excel VBAの画像

電話番号からハイフンを削除し0から表示させる方法 | Evaluate&Replace

Excel VBAの画像

ダイアログボックスからファイルを選択して開く | GetOpenFilename

About

EnjomonWebは、「えんじょもん」である元転勤族の管理人が石川県金沢市から発信する、WEB制作情報をメインとした情報発信サイトです。

コーディング習得過程で検索してもすぐに解決しなかったことや、初心者には分かりづらい内容を分かりやすく説明することができるサイトを目指しています。

※「えんじょもん」とは金沢弁で「遠方の人、県外出身の人」という意味の方言。