- ベストアンサー
Excel VBAで営業日報を縦表示にする方法
- Excel VBAを使用して、横方向に展開している営業日報を縦方向に展開する方法について教えてください。
- 現在の営業日報は勤務年月、所属名、社員番号、氏名、労働時間の順に横方向に表示されています。
- 求める営業日報は、所属名、社員番号、氏名を固定して、勤務年月ごとの労働時間を縦に表示する形式です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ Sub test() Dim gyo As Long, max_gyo As Long Dim retu As Long, max_retu As Long Dim j As Long, k As Long Dim key As String Sheets("Sheet2").Select Cells.ClearContents Range("A1") = "key" Sheets("Sheet1").Range("B1:D1").Copy Range("B1") max_gyo = 1 max_retu = 4 For j = 2 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row If Sheets("Sheet1").Range("A" & j) <> "" Then key = Sheets("Sheet1").Range("B" & j) & _ Sheets("Sheet1").Range("C" & j) & _ Sheets("Sheet1").Range("D" & j) On Error Resume Next gyo = Application.WorksheetFunction.Match _ (key, Columns("A"), 0) If Err.Number <> 0 Then gyo = max_gyo + 1 max_gyo = gyo Range("A" & gyo) = key Sheets("Sheet1").Range("B" & j & ":D" & j).Copy Range("B" & gyo) End If On Error GoTo 0 On Error Resume Next retu = Application.WorksheetFunction.Match _ (Sheets("Sheet1").Range("A" & j).Value, Rows(1), 0) If Err.Number <> 0 Then retu = max_retu + 1 max_retu = retu Sheets("Sheet1").Range("A" & j).Copy Cells(1, retu) End If On Error GoTo 0 Sheets("Sheet1").Range("E" & j).Copy Cells(gyo, retu) End If Next j End Sub それから、作業列の削除、空白セルにーをいれる、所属部署が変わったときに空白行を追加するは自分でやるようお願いします。
お礼
ki-aaa様 返事が遅れまして大変申し訳ありません。 私の拙い質問のためにわざわざコードを提供いただき、心より感謝申し上げます。 現在のいただいたコードをもとに格闘中です。結果はまた報告させていただきます。