お世話になります。
エクセルのシートのある列に昇順に並んだ日付データがあり、
その中から指定した年の最初のデータを検索するマクロを作成したいです。
(データは1990年から2012年までで50000件ほどあり、歯抜け、日付重複があります。
また、1/1のデータがない年もあります)
Findメソッドではその年の1/1がなく1/2以降からの場合にはうまくいかず、
Loop系の場合は2011年のデータを対象としたときには1990年の最初のデータから
読み飛ばしをしなければならず、処理に無駄な時間がかかってしまいます。
何かいい方法はないでしょうか?
No.1ベストアンサー
- 回答日時:
こんばんは。
>Findメソッドではその年の1/1がなく1/2以降からの場合にはうまくいかず
データが降順に並んでいるなら、エクセルの検索機能で、検索する文字列を2011などとすれば、完全一致でない限り検索できます。
マクロは上記の操作を「マクロの記録」で記録すれば分かります。
ご教授ありがとうございました。
Ctrl+Fの検索で「セル内容が完全に同一であるものを検索する」ははずして試してみていたのですが、うまく検索できず質問させていただきました。
検索できるとの回答でしたので、他のオプションをいろいろ変えてみたところ、検索対象を「値」から「数式」に変えたら検索できました。
LookInの違いがあまりわかっていなかったのですが、勉強になりました。
No.2
- 回答日時:
例えばA列に昇順で日付のデータが入力されており、B列にデータが入力されているとします。
そこでC2セルに指定する年を1996のように入力するとします。
マクロでその年の最初のデータD2セルに表示させるとしたら例えば次のようなマクロにすればよいでしょう。
Range("D2").Select
ActiveCell.FormulaR1C1 = "=INDEX(C[-2],MATCH(DATE(RC[-1],1,1)-0.01,C[-3],1)+1)"
Range("D3").Select
ご教授ありがとうございました。
昇順並びなので指定した年の1/1から15分引いてMATCH関数を使ったのですね。
今回はマクロの中で指定した年の範囲の最初のデータの位置を求めて使いたかったのでベストアンサーではありませんでしたが、それはこちらの質問があいまいだったせいでした。
INDEXもMATCHも使ったことがなかったので大変勉強になりました。
いつもVLOOKUP用にわざわざ列を置き換えて検索用のテーブルを作っていたりしたのでそちらで応用させていただきます。
No.3
- 回答日時:
こんばんは!
一例です。
A列に日付データがあるとして、A列を選択するようにしてみました。
Sub test()
Dim i As Long, j As Long, k As Long
i = Cells(Rows.Count, 1).End(xlUp).Row
k = Application.InputBox("検索西暦年を入力")
Application.ScreenUpdating = False
Columns(1).Insert
Range(Cells(1, 1), Cells(i, 1)).Formula = "=YEAR(B1)"
If WorksheetFunction.CountIf(Columns(1), k) Then
j = WorksheetFunction.Match(k, Columns(1), False)
Columns(1).Delete
Cells(j, 1).Select
Else
MsgBox "検索年データがありません。"
Columns(1).Delete
End If
Application.ScreenUpdating = True
End Sub
こんな感じではどうでしょうか?m(_ _)m
ご教授ありがとうございました。
MATCH関数のマクロ内での使用方法がよくわかりました。
今回はFindメソッドのパラメーターの使い方がよくわからなかったのが、発端でしたが、使ったことのないMATCH関数の使い方がわかり大変勉強になりました。
No.4
- 回答日時:
No.3です!
たびたびごめんなさい。
前回のコード内の
>Application.ScreenUpdating = False
の行と
>Application.ScreenUpdating = True
の2行を削除してください。
画面更新を止めていますので、いくらその行を選択しても選択セルが画面上にない場合は
選択セルが表示されません。
何度も失礼しました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数で、範囲内の最後のセ...
-
更新前と更新後の差分をVBAを使...
-
Excel関数:「0」を除いた標準...
-
エクセル 8ケタの数字から日数...
-
エクセル セル内の重複する文...
-
値の入っているセルのうち、一...
-
ピボットテーブル 0個の行を...
-
【エクセル】区切り位置で分割...
-
複数の候補列から、検索値と一...
-
Excelで複数列かつ複数行分の一...
-
SUMIFで数値が入力されているセ...
-
エクセルの表について
-
あるexcel表からチェックボック...
-
エクセル、正数のみの集計[(負...
-
Excelのマクロでソートがうまく...
-
スプレッドシートでドロップダ...
-
エクセルVBAを使ってセルに日付...
-
Excel:合計が一番上になる形で...
-
Excelのマクロで行を間引きたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
Excel関数で、範囲内の最後のセ...
-
エクセルに入力された日付「S40...
-
値の入っているセルのうち、一...
-
ピボットテーブル 0個の行を...
-
SUMIFで数値が入力されているセ...
-
エクセルで何種類のデータがあ...
-
複数の候補列から、検索値と一...
-
【Excel】歯抜けデータの集約
-
更新前と更新後の差分をVBAを使...
-
SUMPRODUCT関数 行が増えても...
-
A and B or Cの合計の出し方
-
SUMIFとCOUNTIFの違いについて
-
エクセル 8ケタの数字から日数...
-
VLOOKUPの検索で該当するものが...
-
Excelのマクロでソートがうまく...
-
ピボットで複数の区切りでグル...
-
Excelで複数列かつ複数行分の一...
おすすめ情報