重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

マクロは全く分かりません。
前任者からもらったエクセルシートにマクロがあるのですが、
マクロ部分以外の記載内容が違うシートを追加して、今あるシートと同じ処理をしたいのですが、
どのようにすればいいのでしょうか。
(現在”明細書”のみですが”納品書”を追加したいです。)

マクロは以下のようになっていました。

Private Sub auto_open()
Dim Y As String, M As String
Sheets("明細書").Select
Y = Year(Date)
M = Month(Date)
M = M + 1
If M = 13 Then
M = 1
Y = Y + 1
End If
Range("B5").Value = Y
Range("D5").Value = M
Range("D5").Select

End Sub
Private Sub macro1()
Dim i As Byte, x As Integer, Y As String
Dim z As String, S As Byte, E As Byte

S = Sheets("取引先名").Range("F2").Value
E = Sheets("取引先名").Range("F3").Value
Sheets("明細書 ").Select
For i = S To E
x = Sheets("取引先名").Range("B " & i).Value
Y = Sheets("取引先名").Range("C" & i).Value
z = Sheets("取引先名").Range("D " & i).Value
Range("G5").Value = x
Range("H3").Value = Y
Range("I4").Value = z
Range("D5").Select
ActiveWindow.SelectedSheets.printout copies:=1, collate:=True
Next i

End Sub

A 回答 (1件)

こんばんは、


>マクロは全く分かりません。
このまま続けても大丈夫?
まあ、そこは自己責任として、、、少し無責任かも知れませんが、質問に対しての回答をさせて頂きます。

>今あるシートと同じ処理をしたいのですが、
そこを信じるのなら、シートを変えて同じ処理を繰り返せば良い事になります。基本的なフォーマとが同じでないと正しく機能しません。(結合セルなども同様です)

丸っと示されているコードに追加したコードです
(With などで変えたかったけどそのままで)
試す場合は、コピーブックなどを作り試してください。

Private Sub auto_open()
Dim Y As String, M As String
Dim sh As Variant
For Each sh In Array("明細書", "納品書")
Sheets(sh).Select
Y = Year(Date)
M = Month(Date)
M = M + 1
If M = 13 Then
M = 1
Y = Y + 1
End If
Range("B5").Value = Y
Range("D5").Value = M
Range("D5").Select
Next sh
End Sub

Private Sub macro1()
Dim i As Byte, x As Integer, Y As String
Dim z As String, S As Byte, E As Byte
Dim sh As Variant
S = Sheets("取引先名").Range("F2").Value
E = Sheets("取引先名").Range("F3").Value
For Each sh In Array("明細書", "納品書")
Sheets(sh).Select
For i = S To E
x = Sheets("取引先名").Range("B" & i).Value
Y = Sheets("取引先名").Range("C" & i).Value
z = Sheets("取引先名").Range("D" & i).Value
Range("G5").Value = x
Range("H3").Value = Y
Range("I4").Value = z
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
Next i
Range("D5").Select
Next sh
End Sub

auto_openは、開く時に実行されるコードですが、説明はご質問の内容には無いので割愛します。
1、2点処理を読んで気になる点が
As Byte ?
S = Sheets("取引先名").Range("F2").Value
E = Sheets("取引先名").Range("F3").Value
この値がセルの行番号に使われていますので空白、及び文字、数値の0以下が入力されないようにしておくか、実行前に入力チェックをした方が良いです。(??かも知れませんが)

あと
x = Sheets("取引先名").Range("B " & i).Value
z = Sheets("取引先名").Range("D " & i).Value
BとDの後の半角スペース、、タイプミスとして修正しましたが
このままだとエラーが返るはずです。
    • good
    • 0
この回答へのお礼

やってみます

Qchan1962さん
早速回答をいただきましてありがとうございます。こんなに早く答えていただけるとは、感動です!
教えていただいた通りに入力してみます。
解決しましたらご報告いたします。

お礼日時:2021/07/12 06:08

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