重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下画像をご覧ください。

左のブックにてアクティブセルにある時間(12:01:01)を右の別ブックから検索
見つかったセルから最終行までを範囲選択をしたい

右のブックに検索してヒットしなければ、メッセージBOXにて表示したいです。
「検索時間なし」メッセージ表示したいです

ご存じの方、マクロのコードorアドバイスお願いします


【条件】
左のブック
C:\Users\2020\OneDrive\マクロ\E\3月度管理シート.xlsm

右のブック
C:\Users\2020\OneDrive\マクロ\E\売上一覧20250418173839.csv

シート名⇒2つのブック⇒Sheet1

時間の書式⇒h:mm:ss⇒ユーザー定義
※普通に秒まで入力した場合の書式

「【マクロ】アクティブセルの時間を別ブック」の質問画像

A 回答 (4件)

No3です。

補足ありがとうございました。
複数のCSVファイルがオープンされているので、
"売上一覧20250418173839.csv" のみを探して、そのSheet1 のC列を2行目から最後まで
アクティブセルにある時間で検索します。
こちらの環境では、"売上一覧20250418173839.csv"をオープンすると、シート名は
"売上一覧20250418173839"になるのですが、あなたの環境では"Sheet1"になるということなので、
"Sheet1"を使用します。
以下のようにしてください。
Sheet1が存在しない場合は、
Set ws = wb.Worksheets("Sheet1")
の行でエラーが発生します。その場合は、その旨、補足してください。

以下のマクロを3月度管理シート.xlsmの標準モジュールに登録してください。

Option Explicit
Public Sub 時間検索()
Dim wwb As Workbook
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long
Dim wrow As Long
Dim stime As Date
Dim s As String
Dim bookName As String: bookName = "売上一覧20250418173839.csv"
stime = -1

If ActiveCell.Column = 2 Then
s = ActiveCell.Value
If IsNumeric(s) Then
If CDate(s) >= 0 And CDate(s) < 1 Then
stime = ActiveCell.Value
End If
End If
End If
If stime = -1 Then
MsgBox ("アクティブセルの位置又は内容が不正")
Exit Sub
End If
Set wb = Nothing
For Each wwb In Workbooks
If LCase(wwb.name) = bookName Then
Set wb = wwb
Exit For
End If
Next
If wb Is Nothing Then
MsgBox (bookName & "がありません")
Exit Sub
End If
Set ws = wb.Worksheets("Sheet1")
lastRow = ws.Cells(Rows.Count, "C").End(xlUp).Row
For wrow = 2 To lastRow
If DateDiff("s", ws.Cells(wrow, "C").Value, stime) = 0 Then
wb.Activate
ws.Activate
ws.Range(ws.Cells(wrow, "C"), ws.Cells(lastRow, "C")).Select
Exit Sub
End If
Next
MsgBox ("検索時間なし")
End Sub
    • good
    • 1

補足要求です。


1.作成したマクロを格納するブックは、
3月度管理シート.xlsm でしょうか。それとも、別のブックでしょうか。

2.マクロ実行時に、オープンされているブック(ファイル)は、
3月度管理シート.xlsm と
売上一覧20250418173839.csv の2つだけでしょうか。
それとも、ほかにも、オープンされているブックがあるのでしょうか。
特に、CSVファイルで、売上一覧20250418173839.csv の他にオープンされているものがありますか。

3.対象となるシートは、
3月度管理シート.xlsmのSheet1
売上一覧20250418173839.csvのSheet1
ということですが、
売上一覧20250418173839.csvをオープンすると、
シート名は売上一覧20250418173839 になり、Sheet1にはなりません。
対象となるシートは、
売上一覧20250418173839.csvのSheet1ではなく、
売上一覧20250418173839.csvの売上一覧20250418173839 と理解して良いでしょうか。
    • good
    • 1
この回答へのお礼

補足要求です。
1.作成したマクロを格納するブックは、
3月度管理シート.xlsm でしょうか。それとも、別のブックでしょうか。
⇒3月度管理シート.xlsm です

2.マクロ実行時に、オープンされているブック(ファイル)は、
3月度管理シート.xlsm と
売上一覧20250418173839.csv の2つだけでしょうか。
それとも、ほかにも、オープンされているブックがあるのでしょうか。
特に、CSVファイルで、売上一覧20250418173839.csv の他にオープンされているものがありますか。

⇒他のCSVやexcelファイルも開いています
⇒対象ではない、日付の違う 売上一覧30000101100060.csv は開いています
⇒売上一覧+14ケタ.csv です


3.対象となるシートは、

3月度管理シート.xlsmのSheet1
売上一覧20250418173839.csvのSheet1
ということですが、

⇒はいそうです

売上一覧20250418173839.csvをオープンすると、
シート名は売上一覧20250418173839 になり、Sheet1にはなりません。

対象となるシートは、
売上一覧20250418173839.csvのSheet1ではなく

売上一覧20250418173839.csvの売上一覧20250418173839 と理解して
良いでしょうか。

⇒ここが、知識が無いため分かりません
⇒以下の❷を開いたら

売上一覧20250418173839.csv Sheet1 になりませんか?
以下になるということでしょうか?
ブック⇒売上一覧20250418173839.csv シート⇒売上一覧20250418173839

【対象ファイル】
❶3月度管理シート.xlsm Sheet1⇒マクロ保管
❷売上一覧20250418173839.csv Sheet1⇒データファイル

お礼日時:2025/04/24 07:49

Sub SearchTimeAndSelectRange()


Dim wsCSV As Worksheet
Dim searchTime As Double
Dim foundCell As Range
Dim lastRow As Long

' CSVデータが存在するシートを指定(例:"売上一覧"シート)
Set wsCSV = ThisWorkbook.Worksheets("売上一覧20250418173839")

' アクティブセルの時間値を取得(Double型に変換)
searchTime = ActiveCell.Value * 24 ' 時間を0-23の数値に変換

' 検索範囲(例:A列)
Set foundCell = wsCSV.Columns("A").Find(What:=searchTime, LookIn:=xlFormulas, LookAt:=xlWhole)

If Not foundCell Is Nothing Then
' 最終行を取得
lastRow = wsCSV.Cells(wsCSV.Rows.Count, foundCell.Column).End(xlUp).Row

' 範囲選択(見つかったセルから最終行まで)
wsCSV.Range(foundCell, wsCSV.Cells(lastRow, foundCell.Column)).Select
Else
MsgBox "該当する時間が見つかりませんでした", vbExclamation
End If
End Sub

こんな感じでしょうか?

ファイルの場所の指定とかはアレンジしてみてください
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
試しましたが、検索ができませんでした

アクティブセル⇒10:01:01
検索列A⇒10:01:01

を入力の上、試しましたが、検索できませんでした
主な変更点は

ThisWorkbook.Activate です
アクティブセルのブックがアクティブにならなかったので
入れました。自分のブックやシートの変数の入れ方が原因かと思います

【質問】
アクティブセルの時間は
searchTime = ActiveCell.Value * 24 ' 時間を0-23の数値に変換

24をかけて

検索するA列の時間帯は、24をかけないのはなぜでしょうか?

ご指導のほど、お願いします

お礼日時:2025/04/23 09:15

こんにちは



なんだか、ファジーな仕様ですけれど・・

完全一致で良ければ、Findメソッドで、
 対象シート.Columns(3).Find(What:=ActiveCell.Value, LookAt:=xlWhole)
とすれば、一致するセルを取得できます。
ただし、検索値と被検索セルの値は同じ形式になっている必要があります。
(文字列か、時刻型の値かなど)

一致するものがない場合には、エラーが発生しますので、エラー処理を加えてください。
エラー処理を行うのが面倒なら、対象範囲(=C列)をループする方法でも同様の結果を得ることは可能でしょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A