プロが教える店舗&オフィスのセキュリティ対策術

「作業員データ」シートにはM.N.Oの6~500行まで出勤した作業員の日付、名前、会社名が一覧として書かれています。

そのデータを下記のようにをB.C.F列に各作業員が初めて出勤した日にちのみのデータを自動で詰めて反映させるようにしたいのですが、計算式、マクロ等方法がありましたらご教授いただけたらと思います。

「エクセルについて!!」の質問画像

A 回答 (2件)

こんばんは!



作業用の列を使えば関数で出来そうですが、
手っ取り早くVBAでの一例です。
尚、M列日付は昇順に並んでいるとします。

画像通りの配置だとして・・・

Sub Sample1()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myStr As String
 Dim myKey, myItem, myR, myAry
  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "B").End(xlUp).Row
    If lastRow > 5 Then
     Union(Range(Cells(6, "B"), Cells(lastRow, "C")), Range(Cells(6, "F"), Cells(lastRow, "F"))).ClearContents
    End If
   lastRow = Cells(Rows.Count, "M").End(xlUp).Row
    myR = Range(Cells(6, "M"), Cells(lastRow, "O"))
     For i = 1 To UBound(myR, 1)
      If Not myDic.exists(myR(i, 2)) Then
       myStr = myR(i, 1) & "_" & myR(i, 3)
       myDic.Add myR(i, 2), myStr
      End If
     Next i
    myKey = myDic.keys
    myItem = myDic.items
     For i = 0 To UBound(myKey)
      myAry = Split(myItem(i), "_")
       Cells(i + 6, "B") = myAry(0)
       Cells(i + 6, "C") = myKey(i)
       Cells(i + 6, "F") = myAry(1)
     Next i
    Set myDic = Nothing
     Range("B:B").NumberFormatLocal = Range("M6").NumberFormatLocal
     MsgBox "完了"
End Sub

※ 関数でないので、データ変更があるたびに
マクロを実行する必要があります。m(_ _)m
    • good
    • 0
この回答へのお礼

書いてくっださったマクロを使用させて頂いたところ
素晴らしいです!完璧に反映されていて目が出ました!
感謝いたしますありがとうございました!
またエクセルで何かありましたらよろしくお願いいたします!

お礼日時:2019/01/28 12:32

範囲M5:O500選択 ⇒ Alt+MC ⇒ “上端行”のみにチェック入れ ⇒ [OK]をツンした後で、次式を入力したセル B6 を下方にズズーッとオートフィル


=MIN(IF((名前=C6)*(会社名=F6),日付))
【お断り】上式は必ず配列数式として入力のこと
    • good
    • 0
この回答へのお礼

そうゆうやり方もあるんですね!
勉強になりました!ありがとうございました!

お礼日時:2019/01/28 12:32

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