こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAで作成できますか(2)

質問No.9506691に関連して添付ファイルのようなVBAを作成したい。
1:日付と時刻が同じセルで10分毎に合計を出すことはできますか。
 それとも日付と時刻は別々のセルにして算出する方がいいのでしょうか。
2:抽出する項目は先に作成しておいた方がいいのでしょうか。
 VBAで表示させることはできますか。
どなたかアドバイスお願いします。

マルチメディアファイルは削除されたか見つかりません。

投稿日時 - 2018-06-10 10:43:17

QNo.9506895

困ってます

質問者が選んだベストアンサー

出力先の1列目、1行目を利用者が用意しない場合と
出力先の1列目、1行目を利用者が用意する場合をサンプル掲示します。


Sub sample1()
 Dim inTblSh As Worksheet '入力シート
 Dim otTblSh As Worksheet '出力シート
 Dim wkRow As Long
 Dim PutRow As Long
 Dim ColCout As Long
 Dim STime As Date   '1行目の日時

 Set inTblSh = ThisWorkbook.Sheets(1)
 Set otTblSh = ThisWorkbook.Sheets(2)

 '開始行日時算出
 STime = inTblSh.Cells(2, 1).Value
 
 wkRow = 2   'データが2行目から
 
 '出力先クリアー
 otTblSh.Cells.ClearContents
' otTblSh.Range(Cells(2, 2), Cells(2000, 4)).ClearContents

 '出力先1行目編集
 otTblSh.Cells(1, 1).Value = "10分単位"
 For ColCout = 2 To 4
   otTblSh.Cells(1, ColCout).Value = inTblSh.Cells(1, ColCout).Value
 Next ColCout

 Do
  If inTblSh.Cells(wkRow, 1).Value = "" Then Exit Sub '終了判定
  '出力行番号算出
  PutRow = Int((inTblSh.Cells(wkRow, 1).Value - STime) / TimeSerial(0, 10, 0)) + 2
 
  '1列目出力
  otTblSh.Cells(PutRow, 1).Value = _
   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0), "YYYY/MM/DD HH:NN~") & _
   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0) + _
    TimeSerial(0, 9, 0), "YYYY/MM/DD HH:NN")

  For ColCout = 2 To 4  'データが2列目から4列目
   otTblSh.Cells(PutRow, ColCout).Value = _
   otTblSh.Cells(PutRow, ColCout).Value + _
   inTblSh.Cells(wkRow, ColCout).Value
  Next ColCout
 
  wkRow = wkRow + 1  '行カウントアップ

 Loop

End Sub


'//-----------------------------------------
'//出力先の1列目、1行目を利用者が用意する場合
'//-----------------------------------------
Sub sample2()
 Dim inTblSh As Worksheet '入力シート
 Dim otTblSh As Worksheet '出力シート
 Dim wkRow As Long
 Dim PutRow As Long
 Dim ColCout As Long
 Dim STime As Date   '1行目の日時

 Set inTblSh = ThisWorkbook.Sheets(1)
 Set otTblSh = ThisWorkbook.Sheets(2)

 '開始行日時算出
 STime = inTblSh.Cells(2, 1).Value
 
 wkRow = 2   'データが2行目から
 
 '出力先クリアー
' otTblSh.Cells.ClearContents
 otTblSh.Range(Cells(2, 2), Cells(2000, 4)).ClearContents

' '出力先1行目編集
' otTblSh.Cells(1, 1).Value = "10分単位"
' For ColCout = 2 To 4
'   otTblSh.Cells(1, ColCout).Value = inTblSh.Cells(1, ColCout).Value
' Next ColCout

 Do
  If inTblSh.Cells(wkRow, 1).Value = "" Then Exit Sub '終了判定
  '出力行番号算出
  PutRow = Int((inTblSh.Cells(wkRow, 1).Value - STime) / TimeSerial(0, 10, 0)) + 2
 
'  '1列目出力
'  otTblSh.Cells(PutRow, 1).Value = _
'   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0), "YYYY/MM/DD HH:NN~") & _
'   Format(STime + (PutRow - 2) * TimeSerial(0, 10, 0) + _
'    TimeSerial(0, 9, 0), "YYYY/MM/DD HH:NN")

  For ColCout = 2 To 4  'データが2列目から4列目
   otTblSh.Cells(PutRow, ColCout).Value = _
   otTblSh.Cells(PutRow, ColCout).Value + _
   inTblSh.Cells(wkRow, ColCout).Value
  Next ColCout
 
  wkRow = wkRow + 1  '行カウントアップ

 Loop

End Sub

投稿日時 - 2018-06-10 12:00:23

お礼

2パターン教示ありがとうございました。
sample1は大変有り難いです。

投稿日時 - 2018-06-10 16:20:06

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)