ここから本文です

エクセルについて質問があります。 図1から図2に現状手作業でコピペしているので...

hyo********さん

2019/11/2311:26:57

エクセルについて質問があります。
図1から図2に現状手作業でコピペしているのですが、手作業でなく関数やマクロを使用し効率よく作業をする方法はないでしょうか。

方法は図1の3列目の開始の列に時間が表示されており、日付の表示がある行にその日の解除と開始の時間をコピペしております。
以下2点の注意点があります
図1の6行目から10行目までを例に上げると、解除はその日の一番早い時間で開始は一番遅い時間を入力する
図1の11行目から14行目までを例に上げると、11行目の4(金)解除は08:49でいいのですが、開始は00:23となることです。

解除,End With,Then Exit For,開始,エクセル,現状手作業,With Range

閲覧数:
55
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

30246kikuさん

2019/11/2317:07:20

雰囲気、以下でどうなりますか

標準モジュールに記述して、Samp1 を実行してみます
処理対象は、アクティブシートの A1 ~ の表
結果は、F1 ~ 書き出します

※ 細かい仕様がわからないので・・・・おかしなところあると思います

どうなりますか


Option Explicit

Public Sub Samp1()
   Dim rng1 As Range, rng2 As Range
   Dim vA As Variant
   Dim i As Long, j As Long, k As Long, n As Long

   With Range("A1").CurrentRegion.Resize(, 3)
      If (.Rows.Count < 2) Then Exit Sub
      Set rng1 = .Rows(1)
      Set rng2 = .Rows(2).Cells
      vA = .Value
   End With

   For i = 2 To UBound(vA)
      If (vA(i, 1) <> "") Then Exit For
   Next

   k = 1: n = 0
   While (i <= UBound(vA))
      k = k + 1
      vA(k, 1) = vA(i, 1)
      vA(k, 2) = ""
      If (n = 0) Then vA(k, 2) = vA(i, 3)
      vA(k, 3) = ""
      For i = i + 1 To UBound(vA)
         If (vA(i, 1) <> "") Then Exit For
         If (vA(k, 2) = "") Then
            vA(k, 2) = vA(i, 3)
         Else
            vA(k, 3) = vA(i, 3)
         End If
      Next

      n = 0
      If ((vA(k, 2) <> "") And (vA(k, 3) = "")) Then
         If (i <= UBound(vA)) Then vA(k, 3) = vA(i, 3)
         n = 1
      End If
   Wend

   Application.ScreenUpdating = False
   With Range("F1").Resize(, 3)
      .CurrentRegion.Clear
      If (k > 1) Then
         With .Resize(k)
            .Value = vA
            With .Columns(1)
               .NumberFormatLocal = _
                  rng2(1).NumberFormatLocal
               .HorizontalAlignment = _
                  rng2(1).HorizontalAlignment
            End With
            With .Columns(2).Resize(, 2)
               .NumberFormatLocal = _
                  rng2(3).NumberFormatLocal
               .HorizontalAlignment = _
                  rng2(3).HorizontalAlignment
            End With
            rng1.Copy .Rows(1)
            .Borders.LineStyle = xlContinuous
         End With
      End If
   End With
   Application.ScreenUpdating = True
End Sub

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

xdx********さん

2019/11/2312:01:37

できそうですね。
仕様が関数でやるのは複雑なので、関数で作るよりはマクロが良さそうです。
適当ですが、流れを考えたのですがこんな感じですかね?


日付列の検索(値が入ってる所まで)
入ってたらそのセルの値と位置を変数に格納ー①
取得したセル位置からまた値が入ってる所まで日付列を検索
入ってたらそのセル位置を変数に格納ー②

図2の日付列と①で取得した日付の内容が合うところのセルを検索して、その位置を変数に格納

その格納した変数の列+2したとこに①で取得したセルの値を入れる…

みたいな感じでいけそうな気がします。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる