No.9ベストアンサー
- 回答日時:
最初の方法でうまくいったBookと2つ目の方法を行うBookは別にします。
別にしたほうが混乱がないはずです。
2つ目の方法を行うBookの、データの入っているシートのA列にコントロールツールボックスのチェックボックスを貼りつけます。1行に1つ貼り付けるはずです。
また、コントロールツールボックスからコマンドボタンを配置します。
2つ目の方法を行うBookのVBAのコード部分はない状態にして下さい。
チェックボックスを配置するシートのコードウインドウに、#7のコードをコピーして貼りつけます。
チェックボックスがSheet1に配置してあれば、Sheet1のコードウインドウに
貼りつけます。Sheet1のコードウインドウの出し方は、表示→プロジェクト
エクスプローラでプロジェクトエクスプローラを出して、Sheet1をダブルク
リックします。
Const Col1 = "B" '印刷する開始列
Const Col9 = "E" '印刷する最終列
Private Sub CommandButton1_Click()
:
:
End Sub
>.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")が黄色になる。
最初の方法がうまくいって、2つ目がここで止まるのは考えられませんが、最初の方法を試したBookと何か違っていませんか。
1行目がセル結合されていると起きる可能性がありますが・・・その場合は、
Const Col1 = "B" '印刷する開始列
Const Col9 = "E" '印刷する最終列
を実状にあうように修正してみてください。これは先頭行の書き込みです。(この行をX行とします)
また、
'.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
と、この行の前に『'』(Shiftキーを押しながら7のキー)を入力して実行してみて下さい。この行を実行をしないようにするわけです。
これで動けば、X行の下に次の1行を追加してみます。
.Rows("1:1").Copy Destination:=ws2.Rows("1")
とすれば、結合セルがあってもコピーします。
>シートは増えていますがチェックボックスのチェックが反映されていない??
上の行でエラーが起きていれば印刷用のシートはまだ作成されていませんので確認はできないはずですが・・・
今もExcel97に貼り付けて実行しましたが、特に問題なく実行できました。
近くに、VBAのわかる人がいらっしゃれば、解決も早いと思いますが・・・
大変お礼が遅れ申し訳ありませんでした
何回もの補足ご無理をいいました
色々といつも懇切丁寧な回答に非常に助けられます、ありがとうございました
今後ともよろしくお願いします
No.8
- 回答日時:
>最初の方法でsheet2にコピーではなく、同じシートの選択したもののみのsheetが別に作成出来ないでしょうか
別シートを作成し、印刷が終わったら削除しています。
Const Col1 = "B" '印刷(コピー)する開始列
Const Col9 = "E" '印刷(コピー)する最終列
Sub CheckRowsPrint()
Dim ws As Worksheet
Dim ws2 As Worksheet '印刷用シート2
Dim rw1 As Long, rw2 As Long '行カウンタ
Set ws = ActiveSheet
Application.ScreenUpdating = False
Worksheets.Add.Move After:=Worksheets(ws.Name)
Set ws2 = ActiveSheet
With ws
'表題のコピー
ws2.Select: ws2.Cells.Clear: rw2 = 1
.Select: ActiveCell.Activate
.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
'データ行のコピー
For rw1 = 2 To .Range("G65536").End(xlUp).Row
If .Range("G" & rw1) = True Then
rw2 = rw2 + 1 'チェックボックスがチェックされていればコピー
.Range(Col1 & rw1 & ":" & Col9 & rw1).Copy _
Destination:=ws2.Range(Col1 & rw2)
End If
Next
End With
Application.ScreenUpdating = True
'今はプレビュー
ws2.PrintPreview 'ws2.PrintOut
Application.DisplayAlerts = False
ws2.Delete
Application.DisplayAlerts = True
End Sub
>CommandButton1を押すと何も動きがありません?
>チェックボックスが□のままなので、・・・四隅に□が出るだけになります?
これはVisual Basic がデザインモードだからでしょう。
Visual Basicのツールバーの三角定規と鉛筆のようなアイコンが押された状態がデザインモードです。
再度押せば、解除され、コントロールが操作できるようになるでしょう。一旦保存して開きなおしてもデザインモードは解除されたはずです。
この回答への補足
度々の補足大変申し訳ありません
もう少し教えてください
・最初の方法は出来ました、大変ありがとうございました
・コマンドボタンの方法は、初歩的なことが分からなくてごめんなさい、動作できるようになりました
ただ、ボタンを押すとデバックで下のところが黄色になっています??
.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
それと、シートは増えていますがチェックボックスのチエックが反映されていない??
何回も申し訳ありません
よろしくお願いします
No.7
- 回答日時:
>改ページプレビューの画面で終了してしまいます?
いちいち印刷すると大変なので、意識的にプレビューにしています。
ws2.PrintPreview → ws2.PrintOut
に変更すると印刷します。今回もそうしています。印刷するときは変更して下さい。
コントロールツールボックスのチェックボックスを使った方法です。
新しいコントロールですし、フォームのコントロールより(ある意味)使いやすい事が多いです。
表示→ツールバー→Visual Basic Editor でVisual Basicのツールバーを表示します。
→この中のコントロールツールボックスをクリック。
→コントロールツールボックス内のチェックボックスをクリックしてセルA2をクリック
→表示されたチェックボックスを選択して右クリック→プロパティを選択
→BackColor を白にする
→Caption をなし(文字をみんな削除)にする
→AutoSize をTrueにする
チェックボックスは選択状態だと思いますが、四隅の四角が完全に2行目に入るようにします。
初めて登録したなら、(オブジェクト名)がCheckBox1になっているはずです。
1行はチェックボックスが入るくらいの行高が必要です。
→2行目に作ったチェックボックスをコピー
→A3に貼り付け。以下繰り返し。
CheckBoxX(Xは番号)が順番に作られていく事が重要です。
10個くらい作ったら、Shiftキーを使って複数個選んでコピー&ペーストができます。
どの位の行数を操作されるかわかりませんが、チェックボックスを無尽蔵に貼り付けはできないでしょう。
→コントロールツールボックスからコマンドボタンをクリックしてシート上に1つボタンを作る。
→作ったコマンドボタンをダブルクリック
→Private Sub CommandButton1_Click()
End Sub
が表示されるので、下のコードを貼り付ける。
→シートに戻り、Visual Basic のデザインモードを終了します。
これで動かす事ができるはずです。(Excel97で確認)
Const Col1 = "B" '印刷する開始列
Const Col9 = "E" '印刷する最終列
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim obj As OLEObject
Dim ws2 As Worksheet '印刷用シート2
Dim rw1 As Long, rw2 As Long '行カウンタ
Set ws = ActiveSheet
Application.ScreenUpdating = False
Worksheets.Add.Move After:=Worksheets(ws.Name)
Set ws2 = ActiveSheet: rw2 = 1
With ws
.Select: ActiveCell.Activate
.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
For Each obj In .OLEObjects
If obj.Name Like "CheckBox*" Then
If obj.Object.Value = True Then
rw1 = .Shapes(obj.Name).TopLeftCell.Row
rw2 = rw2 + 1 'チェックボックスがチェックされていればコピー
.Range(Col1 & rw1 & ":" & Col9 & rw1).Copy _
Destination:=ws2.Range(Col1 & rw2)
End If
End If
Next
End With
Application.ScreenUpdating = True
'今はプレビュー
ws2.PrintPreview 'ws2.PrintOut
Application.DisplayAlerts = False
ws2.Delete
Application.DisplayAlerts = True
End Sub
この回答への補足
度々の補足を書いて申し訳有りません
最初の方法は出来ました大変有り難うございます
もう少し教えてもらえないでしょうか
・最初の方法でsheet2にコピーではなく、同じシートの選択したもののみのsheetが別に作成出来ないでしょうか
・コントロールツールボックスの方ですが、丁寧な回答有り難うございます、最後まで出来たのですが、CommandButton1を押すと何も動きがありません?
チェックボックスが□のままなので、動作しないのかと思い□をクリックするとレが出ません?四隅に□が出るだけになります?
いつも、初心者の補足になって大変お手数をお掛けしますが、もう少し教えてください
よろしくお願いします
No.6
- 回答日時:
表示→ツールバー→フォーム のチェックボックスを使った例です。
質問のようにA列に配置し、リンクするセルをG列にしてあります。印刷用のSheet2にチェックした行をコピーします。どの列をコピーするかは、Col1、Col9にセットします。
フォームのコマンドボタンに、CheckRowsPrintを割り当てます。CheckRowsPrintは標準モジュールに貼り付け。
Const Col1 = "B" '印刷(コピー)する開始列
Const Col9 = "E" '印刷(コピー)する最終列
Sub CheckRowsPrint()
Dim ws2 As Worksheet '印刷用シート2
Dim rw1 As Long, rw2 As Long '行カウンタ
Set ws2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
With Worksheets("Sheet1")
'表題のコピー
ws2.Select: ws2.Cells.Clear: rw2 = 1
.Select: ActiveCell.Activate
.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
'データ行のコピー
For rw1 = 2 To .Range("G65536").End(xlUp).Row
If .Range("G" & rw1) = True Then
rw2 = rw2 + 1 'チェックボックスがチェックされていればコピー
.Range(Col1 & rw1 & ":" & Col9 & rw1).Copy _
Destination:=ws2.Range(Col1 & rw2)
End If
Next
End With
Application.ScreenUpdating = True
'今はプレビュー
ws2.PrintPreview 'ws2.PrintOut
End Sub
フォームのチェックボックスはその個数分リンクするセルを設定する必要があるでしょう。
コントロールツールボックスのチェックボックスなら、2行目から順に貼り付けていくだけで、この場合はほとんどコントロール配列のように使えます。チェックボックスのコントロールとしての性質と、図形としてのTopLeftCellで位置を自動的に特定できます。
コントロールツールボックスのコマンドボタンのイベントです。Sheet1のコードウインドウに貼り付け。
Const Col1 = "B" '印刷する開始列
Const Col9 = "E" '印刷する最終列
Private Sub CommandButton1_Click()
Dim obj As OLEObject
Dim ws2 As Worksheet '印刷用シート2
Dim rw1 As Long, rw2 As Long '行カウンタ
Set ws2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
ws2.Select: ws2.Cells.Clear: rw2 = 1
With Worksheets("Sheet1")
.Select: ActiveCell.Activate
.Range(Col1 & "1:" & Col9 & "1").Copy Destination:=ws2.Range(Col1 & "1")
For Each obj In .OLEObjects
If obj.Name Like "CheckBox*" Then
If obj.Object.Value = True Then
rw1 = .Shapes(obj.Name).TopLeftCell.Row
rw2 = rw2 + 1 'チェックボックスがチェックされていればコピー
.Range(Col1 & rw1 & ":" & Col9 & rw1).Copy _
Destination:=ws2.Range(Col1 & rw2)
End If
End If
Next
End With
Application.ScreenUpdating = True
'今はプレビュー
ws2.PrintPreview 'ws2.PrintOut
End Sub
この回答への補足
いつもお世話になっています。もう少しご教授お願いします
最初の設定ですると、印刷しなくて改ページプレビューの画面で終了してしまいます?sheet2にはコピーされていました、途中はsheet2にコピーではなく任意のsheetで最後にはそれはなくてもいいのですが、そんなことが出来ますでしょうか
また、次の説明のご指摘のようにリンクさせるのが大変です、ご説明の下記の内容がやったことがなく分かりません
コントロールツールボックスのチェックボックスなら、2行目から順に貼り付けていくだけで、この場合はほとんどコントロール配列のように使えます。チェックボックスのコントロールとしての性質と、図形としてのTopLeftCellで位置を自動的に特定できます。
コントロールツールボックスのコマンドボタンのイベントです。Sheet1のコードウインドウに貼り付け。
ご教授お願いします
No.5
- 回答日時:
私の誤解であればお許し下さい。
質問ではワークシートのA列(の位置)に、チェックボックスを行の数だけ貼りつける様にわたしは解釈しますが、既出ご解答例では、チェックボックスの値(True/False)を聞くところが出てきていません。セルの上下左右罫線をかこんで、四角を作り、1を入れる例(B方式)に変わっていませんでしょうか。
VBと違いVBAでは「コントロール配列」が使えないので、私も考えましたが、チェックボックスの数だけ判別コーディング行が必要で、スマートに出来ず、お手上げでした。
チェックボックスを使わず、上記B方式で設計するのが、
後のVBAコーディングが簡単です。
その時1行ずつ空白行を入れ、上の四角と下の四角が少し
離れてかけるようにすれば良いと思います。
すればIf Cells(i,1)="1" Then
Range(Cells(i,2),Cells(i,10))を別シートに移す
EndIf
を行数分ForNextででも繰り返し、終わったところでPrintoutすれば良い。PrintOutは毎回通る(実行する)ごとに改ページするのでRange(Cells(i,2),Cellsi,10)).PrintOutは不可。
No.4
- 回答日時:
もう1パターンです。
どちらでも結果は同じです。やりやすい方を選んでやってみてください。
解説:フラグの所に1が入っているものが印刷対象となります。
0は印刷されません。フラグ部分にスペースが入ると終わります。
動作:元となるシートをコピーで作成して、フラグが0のものを
削除した後に印刷をしています。
あくまでサンプルなのでご自分でわかりやすいように
&表にあったコーディングへと変更してください。
例題:
A B C D E
1 ○○○表
2 フラグ
3 1 あ い う え
4 1 え お あ え
5 0 い え お あ
6 1 か き く け
'********** ここから **********
Sub SelectPrint2()
Dim iCnt
'警告メッセージ非表示
Application.DisplayAlerts = False
'印刷用シートを元表よりコピー
Sheets("○○○表").Copy after:=Sheets(1)
Sheets(2).Name = "印刷"
'行カウンタ
iCnt = 3
With Sheets("印刷")
Do
'フラグチェック
Select Case .Cells(iCnt, 1).Text
Case "0"
'未印刷行を削除
.Range("" & iCnt & ":" & iCnt & "").Delete
Case "1"
'次行(印刷)
iCnt = iCnt + 1
Case Else
Exit Do
End Select
Loop
End With
'印刷
Sheets("印刷").PrintOut
'印刷用シート削除
Sheets("印刷").Delete
'警告メッセージ表示
Application.DisplayAlerts = True
End Sub
'********** ここまで **********
大変お礼が遅れ申し訳ありませんでした
何回もの補足ご無理をいいました
懇切丁寧な回答大変参考になりました
ありがとうございました
今後ともよろしくお願いします
No.3
- 回答日時:
解説:フラグの所に1が入っているものが印刷対象となります。
0は印刷されません。フラグ部分にスペースが入ると終わります。
あくまでサンプルなのでご自分でわかりやすいように
&表にあったコーディングへと変更してください。
例題:
A B C D E
1 ○○○表
2 フラグ
3 1 あ い う え
4 1 え お あ え
5 0 い え お あ
6 1 か き く け
'********** ここから **********
Sub SelectPrint()
Dim iRow, iCnt
'警告メッセージ非表示
Application.DisplayAlerts = False
'印刷用シート作成
Sheets.Add.Name = "印刷"
'タイトル&見出しコピー
For i = 1 To 2
'コピー
Sheets("○○○表").Range("" & i & ":" & i & "").Copy
'貼り付け
Sheets("印刷").Cells(i, 1).Select
Sheets("印刷").Paste
Next
'行カウンタ
iRow = 3
iCnt = 3
With Sheets("○○○表")
Do
'フラグチェック
Select Case .Cells(iRow, 1).Text
Case "0"
'何もしない
DoEvents
Case "1"
'コピー
.Range("" & iRow & ":" & iRow & "").Copy
'貼り付け
Sheets("印刷").Cells(iCnt, 1).Select
Sheets("印刷").Paste
'次行(印刷)
iCnt = iCnt + 1
Case Else
Exit Do
End Select
'次行(元データ)
iRow = iRow + 1
Loop
End With
'印刷
Sheets("印刷").PrintOut
'印刷用シート削除
Sheets("印刷").Delete
'警告メッセージ表示
Application.DisplayAlerts = True
End Sub
'********** ここまで **********
No.2
- 回答日時:
例:
○別シートへコピー
1.コピーしたいセルを選択して、コピー
Range("1:1").Select --- 1列目をコピー
Selection.Copy
2.貼り付けしたい開始位置を選択して、ペースト
Range("A5").Select --- A5へ貼り付け
ActiveSheet.Paste
○終わりまで繰り返す。
1.For~Next
For i = 0 To 9
'コピー処理
Next
2.Do~Loop
Do
'コピー処理
'終了チェック
Loop
ループの終了方法は、チェックボックスを並べるとかセルにフラグを立てる
とかあるので、それぞれによって条件判定が変わります。
この回答への補足
度々の回答有り難うございます
すいません、まだマクロのことは初心者です
お手数をお掛けしますが最初からのマクロ例をご教授お願いできないでしょうか
よろしくお願いします
No.1
- 回答日時:
例えば、チェックの入った行だけを抽出して別シートに
コピーして印刷するようなマクロではどうですか?
例:
X表・・・上の表
Y表・・・印刷用の表
マクロの流れ
1.Y表(シート)をブックへ追加する。
2.X表A列のチェックボックスにチェックが入っていればチェックの
入っている行をY表にコピーする。
3.X表A列の終わりまで繰り返す。
4.Y表を印刷する。
5.Y表(シート)を削除する。
この回答への補足
早速の回答有り難うございます
もう少し教えてもらえないでしょうか
2.X表A列のチェックボックスにチェックが入っていればチェックの
入っている行をY表にコピーする。
3.X表A列の終わりまで繰り返す。
この部分のマクロはどのようにすればよいのか教えてもらえないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでキーリストからデータを取り出して1枚1枚印刷するには? 11 2022/06/27 09:52
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) セルによって印刷するシートを変える方法 EXCEL-VBA 2 2022/08/01 20:48
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- その他(Microsoft Office) Excelのマクロについて教えてください。 1 2022/03/25 10:03
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Illustrator(イラストレーター) クリップスタジオペイントについて。 1 2022/11/15 11:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセルの一部のセルの背景色...
-
エクセルのマクロで複数シート...
-
エクセルの行タイトルを特定の...
-
エクセルで複数のシートの1枚目...
-
エクセルで行番号、列アルファ...
-
エクセル印刷時 一枚の書類に...
-
マクロで印刷→セルの値から部数...
-
エクセルでのヘッダーをページ...
-
Excel 特定のシートを印刷不可...
-
1ヶ月分の日付を一度に出す方法...
-
EXCELで複数のシートを同時に印...
-
エクセルのシート名を印刷した...
-
条件によって印刷するシートを...
-
エクセルで複数のシートを同じ...
-
祭の祝儀 掲示・集計ソフト
-
エクセルで同一シート上にA3とA...
-
エクセルの複数シートをNアップ...
-
エクセルで、ヘッダーに他のシ...
-
EXCEL マクロ 条件の合ったシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセル印刷時 一枚の書類に...
-
エクセルの一部のセルの背景色...
-
エクセルの行タイトルを特定の...
-
1ヶ月分の日付を一度に出す方法...
-
エクセルで複数のシートの1枚目...
-
Excel 特定のシートを印刷不可...
-
エクセルでのヘッダーをページ...
-
マクロで印刷→セルの値から部数...
-
エクセルのマクロで複数シート...
-
エクセルで行番号、列アルファ...
-
エクセルで複数のシートを同じ...
-
エクセルでシートの色がグレー...
-
EXCELで複数のシートを同時に印...
-
エクセルのシート名を印刷した...
-
条件によって印刷するシートを...
-
エクセルの複数シートをNアップ...
-
エクセルで、ヘッダーに他のシ...
-
カラーで一括印刷したいです
-
EXCELで宛名だけ連続変更...
おすすめ情報