自分用メモ
はい、エクセルのVBAを使って各シートを指定した枚数で印刷することができます。以下は、そのためのサンプルコードです。
```vba
Sub PrintSheets()
Dim ws As Worksheet
Dim copies As Integer
' 各シートをループ
For Each ws In ThisWorkbook.Worksheets
' シート名に応じて印刷枚数を指定
Select Case ws.Name
Case "Sheet1"
copies = 2 ' Sheet1を2部印刷
Case "Sheet2"
copies = 3 ' Sheet2を3部印刷
' 他のシートの場合はここに追加
Case Else
copies = 1 ' デフォルトで1部印刷
End Select
' 印刷設定
ws.PrintOut Copies:=copies
Next ws
End Sub
```
このコードは、各シートをループし、シート名に基づいて印刷する枚数を決定します。その後、指定された枚数だけ印刷します。他のシートについても同様に追加することができます。
はい、シートの指定方法はシート名以外にもいくつかあります。以下は、シートを指定するいくつかの方法です。
### 1. シートのインデックス番号で指定
シートのインデックス番号は、シートがブック内に表示される順序に基づきます。例えば、1番目のシート、2番目のシートというように指定します。
```vba
Sub PrintSheetsByIndex()
Dim i As Integer
Dim copies As Integer
' シートのインデックス番号で指定
For i = 1 To ThisWorkbook.Sheets.Count
Select Case i
Case 1
copies = 2 ' 1番目のシートを2部印刷
Case 2
copies = 3 ' 2番目のシートを3部印刷
' 他のシートの場合はここに追加
Case Else
copies = 1 ' デフォルトで1部印刷
End Select
' 印刷設定
ThisWorkbook.Sheets(i).PrintOut Copies:=copies
Next i
End Sub
```
### 2. シートのコード名で指定
コード名はVBAエディタのプロジェクトエクスプローラで設定されている名前です。これはシートの名前が変更されても変わりません。
```vba
Sub PrintSheetsByCodeName()
Dim copies As Integer
' コード名で指定
With Sheet1
copies = 2
.PrintOut Copies:=copies
End With
With Sheet2
copies = 3
.PrintOut Copies:=copies
End With
' 他のシートの場合はここに追加
With Sheet3
copies = 1
.PrintOut Copies:=copies
End With
End Sub
```
### 3. シートのオブジェクト変数で指定
シートを変数にセットして、その変数を使って指定します。
```vba
Sub PrintSheetsByVariable()
Dim ws As Worksheet
Dim copies As Integer
' シートのオブジェクト変数で指定
Set ws = ThisWorkbook.Sheets("Sheet1")
copies = 2
ws.PrintOut Copies:=copies
Set ws = ThisWorkbook.Sheets("Sheet2")
copies = 3
ws.PrintOut Copies:=copies
' 他のシートの場合はここに追加
Set ws = ThisWorkbook.Sheets("Sheet3")
copies = 1
ws.PrintOut Copies:=copies
End Sub
```
これらの方法を使用して、シートを柔軟に指定し、印刷することができます。
はい、シートをインデックス番号を使って4シート目から最後まで指定して印刷することができます。以下は、そのためのサンプルコードです。
```vba
Sub PrintSheetsFromFourthToLast()
Dim i As Integer
Dim copies As Integer
' 4シート目から最後のシートまでをループ
For i = 4 To ThisWorkbook.Sheets.Count
' シート名に応じて印刷枚数を指定
Select Case ThisWorkbook.Sheets(i).Name
Case "Sheet4"
copies = 2 ' Sheet4を2部印刷
Case "Sheet5"
copies = 3 ' Sheet5を3部印刷
' 他のシートの場合はここに追加
Case Else
copies = 1 ' デフォルトで1部印刷
End Select
' 印刷設定
ThisWorkbook.Sheets(i).PrintOut Copies:=copies
Next i
End Sub
```
このコードは、4シート目から最後のシートまでをループし、それぞれのシートの印刷枚数を指定して印刷します。他のシートについても同様に追加できます。例えば、シート名に応じて印刷枚数を変更する部分を調整することができます。
シートに印刷部数を記載しておき、その値をVBAで取得して印刷することができます。以下のサンプルコードでは、各シートのセル"A1"に印刷部数が記載されていると仮定しています。
```vba
Sub PrintSheetsFromFourthToLast()
Dim i As Integer
Dim copies As Integer
' 4シート目から最後のシートまでをループ
For i = 4 To ThisWorkbook.Sheets.Count
' シートのセル"A1"から印刷部数を取得
copies = ThisWorkbook.Sheets(i).Range("A1").Value
' 印刷設定
ThisWorkbook.Sheets(i).PrintOut Copies:=copies
Next i
End Sub
```
このコードでは、4シート目から最後のシートまでをループし、それぞれのシートのセル"A1"に記載されている印刷部数を取得して印刷します。シートに印刷部数が記載されていれば、適切に印刷されます。
### シートの構成例
- **Sheet1** (このシートは印刷しない)
- **Sheet2** (このシートは印刷しない)
- **Sheet3** (このシートは印刷しない)
- **Sheet4** (セルA1に「2」を記載)
- **Sheet5** (セルA1に「3」を記載)
- **Sheet6** (セルA1に「1」を記載)
このようにしておくと、Sheet4は2部、Sheet5は3部、Sheet6は1部印刷されます。他のシートも同様に対応できます。
はい、セルA1に何も入っていない場合、そのシートは印刷されません。ただし、これを明確にするためには、以下のような条件を追加して、セルA1が空の場合はそのシートをスキップするようにすることができます。
```vba
Sub PrintSheetsFromFourthToLast()
Dim i As Integer
Dim copies As Variant
' 4シート目から最後のシートまでをループ
For i = 4 To ThisWorkbook.Sheets.Count
' シートのセル"A1"から印刷部数を取得
copies = ThisWorkbook.Sheets(i).Range("A1").Value
' セルA1が空または0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 印刷設定
ThisWorkbook.Sheets(i).PrintOut Copies:=copies
End If
Next i
End Sub
```
このコードでは、セルA1の値が数値であり、かつ0より大きい場合にのみ、そのシートを印刷します。セルA1が空の場合や0以下の場合は、そのシートの印刷をスキップします。これにより、セルA1に何も入力されていないシートは印刷されません。
### 補足
- `IsNumeric`関数を使って、セルA1の値が数値であるかを確認しています。
- 印刷部数が0以下の場合も印刷しないようにしています。
この条件を追加することで、セルA1が空のシートや0部と指定されたシートを印刷から除外できます。
はい、別のシートに印刷部数を入力し、それに基づいて他のシートを印刷することも可能です。例えば、「PrintSettings」というシートに印刷部数を入力し、それを参照して各シートを印刷するコードを以下に示します。
### 設定例
- **PrintSettings** シートのセル A1:A10 に各シートの印刷部数を入力
- A1: Sheet1 の印刷部数
- A2: Sheet2 の印刷部数
- 以降、対応するシートの印刷部数
### サンプルコード
```vba
Sub PrintSheetsFromSettings()
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
' 設定シートの参照
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
' 1シート目から10シート目までをループ
For i = 1 To 10
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("A" & i).Value
' セルが空または0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 印刷設定
ThisWorkbook.Sheets(i).PrintOut Copies:=copies
End If
Next i
End Sub
```
このコードでは、「PrintSettings」シートのA1:A10に入力された印刷部数を参照し、それに基づいて対応するシートを印刷します。具体的には、PrintSettingsシートのA1セルに入力された数値が1番目のシートの印刷部数となり、A2セルの数値が2番目のシートの印刷部数となります。
### 手順
1. **PrintSettings** シートを作成し、A1:A10にそれぞれのシートの印刷部数を入力します。
2. 上記のVBAコードをVBAエディタに貼り付けます。
3. `PrintSheetsFromSettings` マクロを実行します。
これにより、PrintSettingsシートのA1:A10に入力された数値に基づいて、各シートを指定された枚数で印刷することができます。
はい、印刷部数のセル範囲を `C4` から始まり、空のセルに達するまで指定することができます。以下のコードでは、 `PrintSettings` シートの `C4` から始まり、空のセルに達するまでの印刷部数を参照して印刷します。
```vba
Sub PrintSheetsFromSettings()
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
Dim cell As Range
Dim sheetIndex As Integer
' 設定シートの参照
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
' C4から空セルまでの範囲をループ
i = 4 ' C4は4行目に位置する
sheetIndex = 1 ' 対応するシートのインデックス
Do While True
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("C" & i).Value
' セルが空の場合はループを終了
If IsEmpty(copies) Then Exit Do
' 印刷部数が0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 対応するシートが存在するか確認
If sheetIndex <= ThisWorkbook.Sheets.Count Then
' 印刷設定
ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies
End If
End If
' 次の行に移動
i = i + 1
sheetIndex = sheetIndex + 1
Loop
End Sub
```
このコードは、 `PrintSettings` シートの `C4` から始まり、空のセルに達するまで各セルの値を取得して対応するシートを印刷します。
### 補足
- `Do While True` ループを使い、 `IsEmpty` 関数でセルが空かどうかを確認しています。
- シートのインデックスがブックのシート数を超えないように確認しています。
- `C4` のセルから開始し、順次下のセルに移動していきます。
### 手順
1. **PrintSettings** シートを作成し、C4から下に印刷部数を入力します。
2. 上記のVBAコードをVBAエディタに貼り付けます。
3. `PrintSheetsFromSettings` マクロを実行します。
これにより、 `PrintSettings` シートの `C4` から空のセルに達するまでの範囲に入力された印刷部数に基づいて、各シートを指定された枚数で印刷することができます。
以下のVBAコードの中で `C4` を指定している部分を説明します。
### コード全体
```vba
Sub PrintSheetsFromSettings()
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
Dim cell As Range
Dim sheetIndex As Integer
' 設定シートの参照
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
' C4から空セルまでの範囲をループ
i = 4 ' C4は4行目に位置する
sheetIndex = 1 ' 対応するシートのインデックス
Do While True
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("C" & i).Value
' セルが空の場合はループを終了
If IsEmpty(copies) Then Exit Do
' 印刷部数が0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 対応するシートが存在するか確認
If sheetIndex <= ThisWorkbook.Sheets.Count Then
' 印刷設定
ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies
End If
End If
' 次の行に移動
i = i + 1
sheetIndex = sheetIndex + 1
Loop
End Sub
```
### `C4` を指定している部分
1. `i = 4` という行
- これは、 `C4` のセルの行番号が `4` であるため、 `i` を `4` に設定しています。
```vba
i = 4 ' C4は4行目に位置する
```
2. `copies = settingsSheet.Range("C" & i).Value` という行
- ここで `Range("C" & i)` は `C` 列の `i` 行目、つまり最初は `C4` セルを指しています。 `i` がインクリメントされるたびに、次の行 (`C5`、`C6` など) に移動します。
```vba
copies = settingsSheet.Range("C" & i).Value
```
この部分で、 `C4` セルから開始し、次のセル `C5`、`C6` というように順にセルを参照していることがわかります。
### まとめ
- `i = 4` で初期行を `4` に設定し、 `C4` を開始点にしています。
- `Range("C" & i).Value` で `C` 列の `i` 行目を参照しています。
これにより、 `C4` から空のセルに達するまでの範囲を指定して処理しています。
C4から下のセルに入力された部数を基に、4シート目から最後までのシートを印刷するようにすることができます。以下のコードは、この2つの条件を組み合わせたものです。
```vba
Sub PrintSheetsFromFourthToLastUsingSettings()
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
Dim cell As Range
Dim sheetIndex As Integer
Dim totalSheets As Integer
' 設定シートの参照
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
' シート数を取得
totalSheets = ThisWorkbook.Sheets.Count
' C4から空セルまでの範囲をループ
i = 4 ' C4は4行目に位置する
sheetIndex = 4 ' 4シート目から開始
Do While True
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("C" & i).Value
' セルが空の場合はループを終了
If IsEmpty(copies) Then Exit Do
' 印刷部数が0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 対応するシートが存在するか確認
If sheetIndex <= totalSheets Then
' 印刷設定
ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies
End If
End If
' 次の行に移動
i = i + 1
sheetIndex = sheetIndex + 1
Loop
End Sub
```
### コードの説明
1. `settingsSheet` を `PrintSettings` シートに設定。
2. `totalSheets` 変数にシートの総数を格納。
3. ループ開始:
- `i = 4` と `sheetIndex = 4` で `C4` および4シート目から開始。
- `copies = settingsSheet.Range("C" & i).Value` で `C4` セルの値を取得。
- `IsEmpty(copies)` でセルが空の場合にループを終了。
- `IsNumeric(copies) And copies > 0` で印刷部数が0より大きいか確認。
- `If sheetIndex <= totalSheets` でシートの範囲を超えないか確認。
- `ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies` で印刷実行。
- `i` と `sheetIndex` をインクリメントし、次のセルとシートに移動。
### 手順
1. **PrintSettings** シートを作成し、C4から下に印刷部数を入力します。
2. 上記のVBAコードをVBAエディタに貼り付けます。
3. `PrintSheetsFromFourthToLastUsingSettings` マクロを実行します。
これにより、 `PrintSettings` シートの `C4` から始まるセルの印刷部数に基づき、4シート目から最後のシートまでを指定された部数で印刷することができます。
以下にコード全体を示し、それぞれのセクションにコメントを付けて詳しく説明します。
### コード全体
```vba
Sub PrintSheetsFromFourthToLastUsingSettings()
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
Dim cell As Range
Dim sheetIndex As Integer
Dim totalSheets As Integer
' 設定シートの参照
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
' シート数を取得
totalSheets = ThisWorkbook.Sheets.Count
' C4から空セルまでの範囲をループ
i = 4 ' C4は4行目に位置する
sheetIndex = 4 ' 4シート目から開始
Do While True
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("C" & i).Value
' セルが空の場合はループを終了
If IsEmpty(copies) Then Exit Do
' 印刷部数が0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 対応するシートが存在するか確認
If sheetIndex <= totalSheets Then
' 印刷設定
ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies
End If
End If
' 次の行に移動
i = i + 1
sheetIndex = sheetIndex + 1
Loop
End Sub
```
### コードの解説
#### 変数の宣言
```vba
Dim i As Integer
Dim copies As Variant
Dim settingsSheet As Worksheet
Dim cell As Range
Dim sheetIndex As Integer
Dim totalSheets As Integer
```
- `i`: 設定シートの行番号を追跡するための変数。
- `copies`: 各シートの印刷部数を格納する変数。
- `settingsSheet`: 印刷部数の設定が記載されたシートを参照するための変数。
- `cell`: 各セルの値を取得するための変数。
- `sheetIndex`: 印刷するシートのインデックスを追跡するための変数。
- `totalSheets`: ブック内の総シート数を格納する変数。
#### 設定シートの参照
```vba
Set settingsSheet = ThisWorkbook.Sheets("PrintSettings")
```
- `PrintSettings` シートを参照し、それを `settingsSheet` にセット。
#### 総シート数の取得
```vba
totalSheets = ThisWorkbook.Sheets.Count
```
- ブック内のシートの総数を `totalSheets` に格納。
#### ループの初期化
```vba
i = 4 ' C4は4行目に位置する
sheetIndex = 4 ' 4シート目から開始
```
- `i` を4に設定して `C4` セルから開始。
- `sheetIndex` を4に設定して4シート目から開始。
#### メインループ
```vba
Do While True
' 設定シートのセルから印刷部数を取得
copies = settingsSheet.Range("C" & i).Value
' セルが空の場合はループを終了
If IsEmpty(copies) Then Exit Do
' 印刷部数が0以下の場合はスキップ
If IsNumeric(copies) And copies > 0 Then
' 対応するシートが存在するか確認
If sheetIndex <= totalSheets Then
' 印刷設定
ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies
End If
End If
' 次の行に移動
i = i + 1
sheetIndex = sheetIndex + 1
Loop
```
- `Do While True` ループで無限ループを開始。
- `settingsSheet.Range("C" & i).Value` で `C4` セルの値を取得し、次の行は `C5`、`C6` などに移動。
- `If IsEmpty(copies) Then Exit Do` でセルが空の場合ループを終了。
- `If IsNumeric(copies) And copies > 0` で印刷部数が数値で0より大きい場合のみ印刷。
- `If sheetIndex <= totalSheets` でシートの範囲を超えないように確認。
- `ThisWorkbook.Sheets(sheetIndex).PrintOut Copies:=copies` で印刷を実行。
- `i` と `sheetIndex` をインクリメントし、次のセルとシートに移動。
### まとめ
- `PrintSettings` シートの `C4` から空のセルに達するまでの範囲の印刷部数を取得。
- 4シート目から最後までのシートを指定された部数で印刷。
- 空のセルが見つかるか、シートの範囲を超えるまでループを継続。
頂いたサポートは鶏のささみを買って猫と半分こします!