画像のようなエクセルデータがあるのですが、下記のようなことをマクロでしたい場合、どのようなコードを書いたらよいでしょうか? やりたいこと
画像のようなエクセルデータがあるのですが、下記のようなことをマクロでしたい場合、どのようなコードを書いたらよいでしょうか? やりたいこと ①sheet1のC11セルに年月が入力されており、その年月と一致するsheet2 2行目を検索する。 ②検索結果で出たセルのある列を選択(例えば、2022/05の検索結果ならE列を選択) ③選択した列をコピーし、そのまま同じ列で「値のみ貼り付け」する。 詳しい方、宜しくお願い致します。
③の補足説明で、 選択した列をコピーし、そのまま同じsheet2の検索結果の列で「値のみ貼り付け」をしたいです。
Excel | Visual Basic・178閲覧・100
ベストアンサー
Excel関数であれば、 =INDEX(Sheet2のD2から日付範囲全体,,MATCH(C11,Sheet2D4からデータ全体,0)) です。 VBAだと以下です。 多少の設定変更に対してご自身で対応できるように書いたつもりです。 Sub 日付を検索して一致する列を書き出す() '設定変更箇所 Const TargeDateSheetName As String = "Sheet1" '検索する日付のあるシートの名前 Const TargetDateRangeName As String = "C11" '検索する日付のあるセル Const InputSheetName As String = "Sheet2" 'データあるシートの名前 Const DateRow As Integer = 2 'データのあるシートうち日付のある行番号 Const OutputSheetName As String = "Sheet1" '出力したいシートの名前 Const OutputColumn As Integer = 2 '出力したいシートの出力したい列番号 '前処理 Dim TargetDateRange As Range Dim InputSheet As Worksheet Dim OutputSheet As Worksheet Set TargetDateRange = Worksheets(TargeDateSheetName).Range(TargetDateRangeName) Set InputSheet = Sheets(InputSheetName) Set OutputSheet = Sheets(OutputSheetName) '主処理 Dim TargetColumn As Integer With InputSheet TargetColumn = WorksheetFunction.Match(TargetDateRange, .Rows(DateRow), 0) OutputSheet.Columns(OutputColumn).Value = .Columns(TargetColumn).Value End With '後処理 Set TargetDateRange = Nothing Set InputSheet = Nothing Set OutputSheet = Nothing End Sub
1人がナイス!しています
画像付きで回答ありがとうございます。エラーなく実行できたのですが、望んでいた結果と異なってしまいました。私の説明が下手で申し訳ありません。 sheet2の日付検索結果の列を選択・コピーし、 同じくsheet2の同じ列に「値のみ貼り付け」の動作としたいです。 回答頂いた「Const OutputColumn As Integer = 2 '出力したいシートの出力したい列番号」の場合だと、必ずB列に貼り付けになってしまうと思いますが、この部分を検索結果の列に貼り付けにしたいです。
質問者からのお礼コメント
たつろうさん ありがとうございます。貴方様の回答で、完成できました。 即レス、優しく回答頂き大変助かりました。 1150601247さん、1150246010さん 何度も回答ありがとうございました。ベストアンサーにできず心苦しいですが一旦締め切りにさせて頂きます。
お礼日時:6/28 12:33