ばくがの業務効率化チャンネル

このブログは個人的なエクセルの備忘録です

VBAで日時と曜日を取得してセルに書き込む

Sub 日時の取得()

'変数宣言
Dim 本日 As Date
Dim 期限日 As Date
Dim 行番号 As Long

'本日の日付を取得
    本日 = Date

'期限日は本日から14日後
    期限日 = 本日 + 14

'対象は1列目の最終行まで
        For 行番号 = 2 To Cells(Rows.Count, 1).End(xlUp).Row

            '期限日
            Cells(行番号, 4) = 期限日
            '期限日の日のみ
            Cells(行番号, 5) = Day(期限日)
            '期限日の月のみ
            Cells(行番号, 6) = Month(期限日)
            '期限日の曜日のみ
            Cells(行番号, 7) = WeekdayName(Weekday(期限日), True)
      
        Next 行番号

End Sub

同じフォルダ内のファイルを開いてコピーする

Sub 同じフォルダ内のファイルを開く()

    '同じフォルダ内のファイルを開いてコピーする

    'パスとファイル名の変数宣言
    Dim 保存場所 As String, ファイル名 As String
    '転記先と転記元の変数宣言
    Dim 転記先, 転記元 As Workbook
    
        Set 転記先 = ActiveWorkbook
        
      
            '保存場所パス
             保存場所 = "C:\Users\Desktop\テスト\"
            'ファイル名
             ファイル名 = Dir(保存場所 & "V*.xlsm")
   
                '転記元を読み取り専用で開く
                 Workbooks.Open 保存場所 & ファイル名, ReadOnly:=True
    
            Set 転記元 = Workbooks.Open(保存場所 & ファイル名)
            
        '転送元のフィルタ設定
        転記元.Worksheets("Sheet1").Range("A1").AutoFilter 1, Criteria1:=xlFilterToday, Operator:=xlFilterDynamic
        '転送先のシート1のC2のコピペ
        転記元.Worksheets("Sheet1").Range(Range("C2"), Cells(Rows.Count, 3).End(xlUp)).Copy _
        転記先.Worksheets("Sheet1").Range("A1")
        
        'マスターデータ取り込み先のファイルを閉じる
        転記元.Close False
  
End Sub

まとめ3

Sub 最終行が非稼働日()
      
     '4列目の最後の稼働日の場合
    If Cells(Rows.Count, 4).End(xlUp) = "非稼働日" Then
             '非稼働日セルの1段上の右は、
         Cells(Rows.Count, 4).End(xlUp).Offset(-1, 1) = Cells(Rows.Count, 4).End(xlUp).Offset(-1, 1) + Cells(Rows.Count, 4).End(xlUp).Offset(0, 1)
                    
        End If
  
End Sub

まとめ2

Sub 加算対象セル()
    
    '行の変数宣言
    Dim 行 As Long
    
     '行を31行目からループ処理
    For 行 = 31 To 2 Step -1
        '4列目の最後の稼働日
        If Cells(行, 4) = "稼働日" Then
            '6列目の合計には、対象の6列目+E34の合計
           Cells(行, 6) = Cells(行, 6) + Range("E35")
             '対象があったらループを抜ける
           Exit For
            
        End If
        
    Next 行

End Sub

まとめ

Sub 最終行の右下を取得()
  
  '最終行が0以上の場合には、一旦枠外に転記する

  '目的のセルの変数宣言
  Dim 目的のセル As Range
  
  '取得するセルは日付セルの最終行の1段下の右4列目
  Set 目的のセル = Cells(Rows.Count, 2).End(xlUp).Offset(1, 4)
  
  '0以上の数字の場合には、E列35行目に転記
  If 目的のセル > 0 Then
     
          目的のセル.Copy Range("E35")
  
  End If
 
End Sub