それ、メッセージ花火でわざわざ伝えること?

エクセルのマクロについて質問です。
頑張ってマクロのコードを書いてますが、どうしてもうまくいかないので、得意な方に質問させてください。 稼働管理シートから作業報告書シートへと転記を行うマクロを作成しようと考えています。
転記を行う際に、日付とプロジェクト(指定のプロジェクト一つ)で該当の行を絞って抽出を行いたいです。
また、同じ日付のものが複数行ある場合においても、作業報告書の一つのセルに内容を複数行分入れたいです。
作業報告書に転記する内容としましては、
作業報告書のc.d列には稼働管理シートの該当業におけるn列の最も早い時間を。
作業報告書のe.f列には稼働管理シートの該当業におけるo列の最も遅い時間を。
作業報告書のi.j列には稼働管理シートの該当業におけるk列の合計時間を。
作業報告書のk〜o列には稼働管理シートの該当業におけるg列の内容記載のすべて足したものになります。

要求事項が多く、大変にはなるかと思いますが、ご教授いただけますと幸いです。

よろしくお願いいたします。

「【至急】エクセルのマクロコードについて」の質問画像
  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (1件)

ChatGPT(無料版)は試されましたか?



私自身は別の言語でよく使うのですが、手順を追いって書いたり、サブルーチンを書けば素人が作るくらいのコードならほぼ手直し無しで動くものができました。

私自身はVBAやマクロは1行も書けませんがこんな感じで回答が来ました。
要求を満たしているかどうか不明ですが、参考までに。


以下は、指定された要件を満たすエクセルのマクロコードの例です。このマクロは、日付とプロジェクトを指定して該当する行を抽出し、作業報告書シートに転記します。

```vba
Sub 転記作業報告書()
Dim 稼働管理シート As Worksheet
Dim 作業報告書シート As Worksheet
Dim 日付 As Date
Dim プロジェクト As String
Dim 最終行 As Long
Dim i As Long
Dim 転記先行 As Long
Dim 最早時間 As Date
Dim 最遅時間 As Date
Dim 合計時間 As Double
Dim 内容 As String

' シートの設定
Set 稼働管理シート = ThisWorkbook.Sheets("稼働管理シート")
Set 作業報告書シート = ThisWorkbook.Sheets("作業報告書シート")

' 日付とプロジェクトの設定
日付 = 作業報告書シート.Range("A1").Value ' 例: A1セルに日付が入力されていると仮定
プロジェクト = 作業報告書シート.Range("B1").Value ' 例: B1セルにプロジェクトが入力されていると仮定

' 最終行の取得
最終行 = 稼働管理シート.Cells(Rows.Count, 1).End(xlUp).Row

' 転記先の行の設定
転記先行 = 作業報告書シート.Cells(Rows.Count, 1).End(xlUp).Row + 1

' 初期化
最早時間 = Date + 1
最遅時間 = Date - 1
合計時間 = 0
内容 = ""

' 該当する行を探して転記
For i = 2 To 最終行
If 稼働管理シート.Cells(i, 1).Value = 日付 And 稼働管理シート.Cells(i, 2).Value = プロジェクト Then
' 最早時間
If 稼働管理シート.Cells(i, 14).Value < 最早時間 Then
最早時間 = 稼働管理シート.Cells(i, 14).Value
End If

' 最遅時間
If 稼働管理シート.Cells(i, 15).Value > 最遅時間 Then
最遅時間 = 稼働管理シート.Cells(i, 15).Value
End If

' 合計時間
合計時間 = 合計時間 + 稼働管理シート.Cells(i, 11).Value

' 内容の結合
If 内容 = "" Then
内容 = 稼働管理シート.Cells(i, 7).Value
Else
内容 = 内容 & vbCrLf & 稼働管理シート.Cells(i, 7).Value
End If
End If
Next i

' 作業報告書シートに転記
作業報告書シート.Cells(転記先行, 3).Value = 最早時間 ' C列
作業報告書シート.Cells(転記先行, 4).Value = 最早時間 ' D列
作業報告書シート.Cells(転記先行, 5).Value = 最遅時間 ' E列
作業報告書シート.Cells(転記先行, 6).Value = 最遅時間 ' F列
作業報告書シート.Cells(転記先行, 9).Value = 合計時間 ' I列
作業報告書シート.Cells(転記先行, 10).Value = 合計時間 ' J列
作業報告書シート.Cells(転記先行, 11).Value = 内容 ' K列
作業報告書シート.Cells(転記先行, 12).Value = 内容 ' L列
作業報告書シート.Cells(転記先行, 13).Value = 内容 ' M列
作業報告書シート.Cells(転記先行, 14).Value = 内容 ' N列
作業報告書シート.Cells(転記先行, 15).Value = 内容 ' O列
End Sub
```

### 説明:
1. **日付とプロジェクトの指定**: 日付とプロジェクトは `作業報告書シート` のA1セルとB1セルから取得します。必要に応じて変更してください。
2. **データの抽出と転記**:
- `N列` の最も早い時間を `C列` と `D列` に転記します。
- `O列` の最も遅い時間を `E列` と `F列` に転記します。
- `K列` の合計時間を `I列` と `J列` に転記します。
- `G列` の内容を結合して `K〜O列` に転記します。

このコードを元に、ご自身のシート構成に合わせてカスタマイズしてください。
    • good
    • 0

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