Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6615 / 13646 ツリー ←次へ | 前へ→

【44164】チェックボックスでシートを選択し印刷する方法 Ramo 06/11/7(火) 7:00 質問[未読]
【44165】Re:チェックボックスでシートを選択し印刷... ichinose 06/11/7(火) 7:59 発言[未読]
【44166】Re:チェックボックスでシートを選択し印刷... Ramo 06/11/7(火) 8:33 回答[未読]
【44175】Re:チェックボックスでシートを選択し印刷... りん@昼休み 06/11/7(火) 12:56 回答[未読]
【44176】Re:チェックボックスでシートを選択し印刷... Ramo 06/11/7(火) 13:35 回答[未読]
【44185】Re:チェックボックスでシートを選択し印刷... りん 06/11/7(火) 14:31 発言[未読]
【44187】Re:チェックボックスでシートを選択し印刷... Ramo 06/11/7(火) 15:34 質問[未読]
【44198】Re:チェックボックスでシートを選択し印刷... りん 06/11/8(水) 12:59 回答[未読]
【44204】Re:チェックボックスでシートを選択し印刷... Ramo 06/11/9(木) 10:18 お礼[未読]

【44164】チェックボックスでシートを選択し印刷す...
質問  Ramo  - 06/11/7(火) 7:00 -

引用なし
パスワード
   複数あるシートを個別に選択し、印刷したいのですが
私が考えているのは、ユーザフォームで各シート名を付けたチェックボックスに
チェックを入れたものだけを、コマンドボタンで印刷するようにしたいのですが
どのようにすればいいでしょうか、よろしくお願いします。

【44165】Re:チェックボックスでシートを選択し印...
発言  ichinose  - 06/11/7(火) 7:59 -

引用なし
パスワード
   ▼Ramo さん:
おはようございます。

>複数あるシートを個別に選択し、印刷したいのですが
>私が考えているのは、ユーザフォームで各シート名を付けたチェックボックスに
>チェックを入れたものだけを、コマンドボタンで印刷するようにしたいのですが
>どのようにすればいいでしょうか、よろしくお願いします。
どのようにするかはもう少し仕様をまとめていかないと
決まりませんよ!!

1 この印刷対象となるブックは、不特定多数のブックを対象としているのか?
  特定のブックが対象なのか?

 印刷対象ブックが特定のブックひとつであるならば、そのブックにVBAを記述する方法も考えられますが、不特定のブックに対してなら、アドインにする事も考慮しなければなりません。


2 印刷対象ブックのシートの数やシート名は可変なのか一定なのか?

 印刷対象ブックのシート名やシートの数が固定化されていて変更することはまずありえないならば、これがプログラムとしては簡単なものになります。
がしかし、シート数やシート名が印刷時によって様々な場合が想定されるならば、
ユーザーフォームのチェックボックスの数やそれに付随するシート名を
動的に表示しなければなりません。
こうなると、コントロール(チェックボックス)の動的配置も考慮しなければなりません。

又は、リストボックスを使って、シート名を選択させる方法に仕様を変更することも考えられます。


というように仕様(入力データ)によって、コードが違ってきます。

再度、仕様を練り直してみてはいかがですか?

【44166】Re:チェックボックスでシートを選択し印...
回答  Ramo  - 06/11/7(火) 8:33 -

引用なし
パスワード
   ▼ichinose さん:
朝、早くから返信していただきありがとうございます。

仕様のほうをもう少し、補足させていただきます。
ichinose さんにご指摘いただいた、
>1 この印刷対象となるブックは、不特定多数のブックを対象としているのか?
>  特定のブックが対象なのか?
は、特定のブックが対象となります。
また、
>2 印刷対象ブックのシートの数やシート名は可変なのか一定なのか?
は、シート数、シート名ともに固定しています。

このブックは、商品を管理するために、いつ入荷されたものなのか、
また、それをどのように加工したのかを、
商品別にシートに分けてそれぞれの日付を入力し、プリントアウトして
商品に貼り付けていく、フォーマットです。

ただ、今まではシートを選択し、日付を入力、
プリントアウトをしていたのですが、ユーザフォームで日付、
どのように加工したかなどを入力できるようにはしたのですが、
肝心のプリントアウトをうまく出来ません。
各シート名のチェックボックスにチェックを入れたシートのみを
プリントアウトしたいのですが、コマンドボタン(印刷)のVBAを
どのように記入すればいいのか判りません。

何卒、ご教授のほどよろしくお願いします。

【44175】Re:チェックボックスでシートを選択し印...
回答  りん@昼休み  - 06/11/7(火) 12:56 -

引用なし
パスワード
   Ramo さん、おはようございます。

>各シート名のチェックボックスにチェックを入れたシートのみを
>プリントアウトしたいのですが、コマンドボタン(印刷)のVBAを
>どのように記入すればいいのか判りません。
日付入力とかは後で考えてもらうとして、
チェックリストで選択したシートを印刷します。

〔準備〕
ユーザーフォームにコマンドボタン(CommandButton1)とリストボックス(ListBox1)を適当に配置します。

フォームに以下のコードを記述
Private Sub CommandButton1_Click()
  Dim II As Integer, Imax As Integer, A As String
  '
  Imax = Me.ListBox1.ListCount - 1
  For II = 0 To Imax
   If Me.ListBox1.Selected(II) Then
     A = A & vbCrLf & Me.ListBox1.List(II)
   End If
  Next
  If A = "" Then
   MsgBox "未選択", vbExclamation, "終了します"
   'フォームを閉じる
   Me.Hide
  Else
   If MsgBox("以下のシートを印刷します" & A, vbInformation + vbOKCancel) = vbOK Then
     '印刷用にもう一度ループ
     For II = 0 To Imax
      If Me.ListBox1.Selected(II) Then
        Application.ActiveWorkbook. _
        Worksheets(Me.ListBox1.List(II)).PrintOut Copies:=1
      End If
     Next
     'フォームを閉じる
     Me.Hide
   End If
  End If
End Sub
'
Private Sub UserForm_Activate()
  Dim II As Integer
  'アクティブなブックが対象
  With Application.ActiveWorkbook
   ReDim Ldat(1 To .Worksheets.Count) As String
   For Each ws In .Worksheets
     II = II + 1
     Ldat(II) = ws.Name
   Next
  End With
  With Me.ListBox1
   .Clear '念のためクリア
   .ListStyle = fmListStyleOption 'オプションボタン又はチェックボックス
   .MultiSelect = fmMultiSelectMulti '複数選択可能
   'リストにデータ(シート名一覧)
   .List = Ldat()
  End With
  Erase Ldat
End Sub

実行してみてください。

【44176】Re:チェックボックスでシートを選択し印...
回答  Ramo  - 06/11/7(火) 13:35 -

引用なし
パスワード
   りん@昼休み さん、ご返信ありがとうございます。
丁寧な、コードまで書いていただき感謝します。

ただ、いろいろ考えてみて、リストボックスでのシート選択では、
作業的に面倒なことになるので、やはりチェックボックスに
チェックを入れたシートを印刷したいと考えております。

チェックボックスの横には、テキストボックスを配置し、
そこに、各シートの商品数を入力しなければならないのです。

「01」の表品が10個の場合、チェックボックス(シート01)の
商品個数欄にテキストボックス(01)個数を入力、
テキストボックスに個数を入力されたシートのみ(チェックボックスに
チェックが入ったシート)を印刷したいと考えております。

りん@昼休み さんに書いていただいたコードをうまく利用する方法が
判りません。
できれば、チェックボックスにチェックを入れたシートを印刷できるように
したいと考えております。

説明が不足しておりまして、大変ご迷惑をおかけして申し訳ありません。

【44185】Re:チェックボックスでシートを選択し印...
発言  りん E-MAIL  - 06/11/7(火) 14:31 -

引用なし
パスワード
   Ramo さん、こんにちわ。

>ただ、いろいろ考えてみて、リストボックスでのシート選択では、
>作業的に面倒なことになるので、やはりチェックボックスに
>チェックを入れたシートを印刷したいと考えております。
やり方がわからないという事で試していただけてないようですが、チェックボックスの入ったリストボックスになっています。
チェックボックスをいくつ準備したらいいか分からないので、リストボックスにチェックボックスの機能を追加したものを使う事で柔軟性を持たせています。

>りん@昼休み さんに書いていただいたコードをうまく利用する方法が
>判りません。
前回書いたとおりです。
フォームの作り方はご存知だと思ってたので省きましたが改めて説明すると、

VBEditor(Alt + F11)を表示し、フォームを追加するブックに、挿入→ユーザーフォームでUserForm1を追加。
そのフォームに、コマンドボタン(CommandButton1)とリストボックス(ListBox1)を一つずつ追加。
UserFormのコードに前回のコードを全部記述。

標準モジュールに以下を記述
Sub TEST()
  UserForm1.Show
End Sub

TESTを実行すると、アクティブなブックにあるシートのリスト(チェックボックスの機能付)がフォームに表示されます。

【44187】Re:チェックボックスでシートを選択し印...
質問  Ramo  - 06/11/7(火) 15:34 -

引用なし
パスワード
   りん さん、こんにちわ。
ご返信ありがとうございます。
りんさんのご指摘通り、自分で考えていた仕様と違う、
という理由からさほど検討もせずに答えをだしていました。

早速、新規のブックで試してみました。
すばらしい、出来にびっくりしております。
ここまで、親切にコードまで教えていただきありがとうございます。

図々しいお願いとは存じますが、もう一つこのコードについて
教えていただけませんでしょうか。

>リストボックスにチェックボックスの機能を追加したものを使う事で
>柔軟性を持たせています。

このリストボックスに入るシートを指定して出すことは出来るのでしょうか。
Sheet1〜10まで表示されているシートをSheet1〜6までを表示
出来ないでしょうか。

用途によって複数のユーザフォームを使い分け、ユーザフォームごとに
シートを選択したいのです。
可能ならば、コードのどの部分を変更すれば出来るのか
たびたびもうしわけありませんが、ご教授ねが得ますでしょうか。
よろしくお願いします。

【44198】Re:チェックボックスでシートを選択し印...
回答  りん E-MAIL  - 06/11/8(水) 12:59 -

引用なし
パスワード
   Ramo さん、こんにちわ。

>このリストボックスに入るシートを指定して出すことは出来るのでしょうか。
>Sheet1〜10まで表示されているシートをSheet1〜6までを表示
>出来ないでしょうか。
判定の条件がわからないので、チェックボックスリストに表示するシートをリストに持っておいて分岐しています。

Private Sub UserForm_Activate()
  Dim II As Integer, shtl As Variant, JJ As Integer
  'シートのリスト
  shtl = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6")
  'アクティブなブックが対象
  With Application.ActiveWorkbook
   ReDim Ldat(1 To .Worksheets.Count) As String
   For Each ws In .Worksheets
     For JJ = LBound(shtl) To UBound(shtl)
      '一致した名前のシートのみリストに追加
      If ws.Name = shtl(JJ) Then
        II = II + 1: Ldat(II) = ws.Name
        Exit For
      End If
     Next
   Next
   '
   If II > 0 And II < .Worksheets.Count Then
     ReDim Preserve Ldat(1 To II) As String
   End If
  End With
  '
  With Me.ListBox1
   .Clear '念のためクリア
   .ListStyle = fmListStyleOption 'オプションボタン又はチェックボックス
   .MultiSelect = fmMultiSelectMulti '複数選択可能
   If II = 0 Then
     MsgBox "リストを確認", vbExclamation, "該当シートなし"
   Else
     'リストにデータ(シート名一覧)
     .List = Ldat()
   End If
  End With
  Erase Ldat
End Sub

【44204】Re:チェックボックスでシートを選択し印...
お礼  Ramo  - 06/11/9(木) 10:18 -

引用なし
パスワード
   りん さん、こんにちわ。

幾度も、ご回答ありがとうございます。
返事が遅くなり、申し訳ありませんでした。
りんさんに教えていただいたコードを使わせていただき
私一人で考えていたものより、すばらしいものが出来ました。
心から感謝します。

ただ、まだりんさんに教えていただいたコードを全て理解したわけでは、
ないのでこれからも少しずつではありますが、
勉強していきたいと考えております。


このたびは、本当にありがとうございました。

6615 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free