Option Explicit
Public Sub タスク検索及び転記()
Const SrcFolder As String = "C:\Users\user\Documents\ツール\ダウンロード場所\ファイル名変更場所\"
Const TrgBook As String = "C:\Users\user\Documents\ツール\時間管理シート.xlsx"
Dim srcName As String 'コピー元ブック名
Dim taskName As String 'タスク名
Dim sbk As Workbook 'コピー元ブック
Dim sws As Worksheet 'コピー元シート
Dim tbk As Workbook 'コピー先ブック
Dim tws As Worksheet 'コピー先シート
Dim maxRow As Long '日付(A列)最終行
Dim lastRow As Long '該当タスク列最終行
Dim wrow As Long '作業用行
Dim wcol As Long '作業用列
Dim trgday As Date '本日の日付
Dim trgRow As Long '本日の日付の行
Dim trgCol As Long '本日の日付のタスク対応列
'コピー元ブック取得
srcName = Dir(SrcFolder & "*.xls")
If Len(srcName) <= 18 Then
MsgBox ("該当ファイルが無いか又はファイル名が短すぎます")
End If
taskName = Left(srcName, Len(srcName) - 18)
'コピー元 ブック&シート設定
Set sbk = Workbooks.Open(SrcFolder & srcName)
Set sws = sbk.Worksheets("Sheet1")
'コピー先 ブック&シート設定
Set tbk = Workbooks.Open(TrgBook)
Set tws = tbk.Worksheets("Sheet1")
'コピー先の行&列を決定する
maxRow = tws.Cells(Rows.Count, "A").End(xlUp).Row
trgday = Date
trgRow = 0
trgCol = 0
'本日の日付検索
For wrow = 1 To maxRow
'本日の日付に一致すれば、その行を記憶する
If trgday = tws.Cells(wrow, "A").Value Then
trgRow = wrow
Exit For
End If
Next
'該当日付なし
If trgRow = 0 Then
MsgBox (trgday & "に該当する日付はありません")
Exit Sub
End If
'タスクの検索
For wcol = 2 To 4
'タスクが部分一致すれば、その列を記憶する
If InStr(1, tws.Cells(wrow, wcol).Value, taskName, vbTextCompare) > 0 Then
trgCol = wcol
Exit For
End If
Next
If trgCol = 0 Then
MsgBox (taskName & "が部分一致するタスクはありません")
Exit Sub
End If
'該当列の最終行検索
lastRow = 0
wrow = trgRow + 1
'空きセルが
Do While True
'次の日付に達したら打ち切る
If tws.Cells(wrow, 1).Value <> "" Then Exit Do
'該当タスク列に空きセルが有れば、その行を記憶する
If tws.Cells(wrow, trgCol).Value = "" Then
lastRow = wrow
Exit Do
End If
wrow = wrow + 1
Loop
If lastRow = 0 Then
MsgBox (trgday & "の" & trgCol & "列に空きセルなし")
Exit Sub
End If
sws.Cells(2, 3).Copy tws.Cells(lastRow, trgCol)
tws.Activate
tws.Cells(lastRow, trgCol).Select
MsgBox (lastRow & "行 " & trgCol & "列へコピー完了")
End Sub