エクセルのフォームのリストボックス等を使用して、選んだシートのみを印刷することは出来るのでしょうか。(VBAを使用して)

現状
・シートが15枚あります(シート1,2,3,4は条件入力用でシート5~15は様式でシート5~15は非表示です)
・シート1にリストボックスを配置したいです(リストボックスの選ぶ名前はシート5~15です)

例として
・リストボックスでシート7を選んだときに、シート7を印刷したいです

その他
・リストボックスでなくても、選んだシートが印刷される方法が他にあるのであれば、他の方法でもかまいません。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

新しいものを作りました。



http://www.okweb.ne.jp/kotaeru_reply.php3?q=222287


書かれていた内容は間違っていませんでした。
上の新しいものもシート名を変更しただけで
他に変更はしていません。
これを参照して違いが無いか確認してください。


1.B1に数字はありますか
2.B1の数字はリストボックスで作られた数字ですか。
3.シートはありますか。
4.A列にシート名は入っていますか。
5.VBEでブレークポイントを設定、
ステップインで実行、変数「シート名」に
何が入るかを確認してください。



基本的には間違いないと思います。
あとは、シートとマクロの間で整合がとれていない
ためだと思います。

変更点を確認しながら落ち着いて見てみてください。

エラー内容は、シートを見つけられなかった
ということです。シートの指定、リストボックス部分
実際のシート、行・列のズレなどを確認ください。
    • good
    • 0
この回答へのお礼

いろいろ、ありがとうございました

夜遅くまで、回答いただきありがとうございます

実行時エラーが出ていた原因は、リストボックスがシート1にあり、リスト参照元が、別シートでリンクさせていたのでエラーが出ていました(もう少し、詳しく説明すれば、ご迷惑をかけることがなかったと反省しています)

お礼日時:2002/02/23 10:26

1です。

ちょっと長いですが、ラジオボタンについて補足します。

表示→ツールバー→フォームで「フォームツールバー」を表示させます。

その中の、テキストボックスの下あたりにxyzと書かれた枠のようなアイコンがあると思います。マウスでポイントすると「グループボックス」というポップヒントが表示されるはずです。それをクリックして、ワークシートの適当な場所に適当な大きさで枠を作成します。すると、グループ1とか表示された枠が描画されたと思います。
次に、先ほどのツールバーに、トリの目玉のようなアイコンがあると思います。そこをクリックして、先ほどのグループ枠の中をクリックするとオプション1等と書かれた○が表示されるので、それを3回繰り返します。

ここで、その○をそれぞれクリックしてみてください。すると、どれか一つの○をクリックすると、他の○の状態が反転するのにお気づきかと思います。これがラジオボタンです。ラジオのチューニングバンド(FM・AM・SW)切り替えみたいに、単一の動作のみを選択する場合に使うのでラジオボタンといいます。

ところで、先ほど貼り付けた○の上あたりでカーソルの形が(指に?)変わったときに右クリックすると、メニューに「コントロールの書式設定」というのがあるはずです。それをクリックして、「コントロール」というタブを開いてみてください。

その中に「リンクするセル」という項目があると思いますので、現在表示されている適当な番地を入力してダイヤログを閉じてみてください。

さて、その状態で先ほどのラジオボタンをクリックすると、さっき入力したセルに数字が表示されませんか? つまり、この数字を取得することで、動作の分岐ができるわけです。

あとは、どこかに「印刷」ボタンを配置して、それをクリックしたときに、指定したシートを印刷するようにすればいいです。

ブロックの流れとしては、
・印刷ボタンクリック
・リンクセルの数字取得
・数字に応じてワークシートを切り替え
・印刷実行
・メニューのシートに戻る
と言った感じになります。
    • good
    • 0
この回答へのお礼

この方法は便利ですね。

また一つ勉強になりました

ありがとうございます

お礼日時:2002/02/23 10:20

シート名が番号ではない時は


Select Caseで処理を分けてください。

Select Case Cells(1, 2)
Case 1
シート名 = "333"
Case 2
シート名 = "あいう"
1ならシート名333を
2ならシート名あいう、のように

下の部分とSelectを置き換えてください。
シート名 = "sheet" & Cells(1, 2) + 4



Cellsの質問は、その通りです。

この回答への補足

たびたび、すみませんが、なぜエラーが出るのかわからないのですが、よろしくお願いします。

実行時エラー9(インデックスが有効範囲にありません)


Sub 様式指定印刷()

Application.ScreenUpdating = False '画面表示の静止

Select Case Cells(1, 2)

Case 1
シート名 = "工事施工伺"
Case 2
シート名 = "当初設計書"
Case 3
シート名 = "標準工期算定表"
Case 4
シート名 = "審査事項調書"
Case 5
シート名 = "工事設計変更伺"
Case 6
シート名 = "変更設計書"
Case 7
シート名 = "変更増減表"
Case 8
シート名 = "出来高設計書"
Case 9
シート名 = "工事検査依頼書"
Case 10
シート名 = "工事検査依頼書1"
Case 11
シート名 = "工事完成検査復命書"
Case 12
シート名 = "検査写真帳"
Case 13
シート名 = "検査員任命書"
Case 14
シート名 = "検査員復命書"

End Select



Worksheets(シート名).Visible = True 'シート表示(印刷用)・・・ここでエラーが出る

Sheets(シート名).PrintPreview 'PrintOut以降をPrintPreviewに変更するとプレビュー画面・・・シート表示(印刷用)を消した場合はここでエラーが出る

Worksheets(シート名).Visible = False 'シート非表示(戻し)

Application.ScreenUpdating = True '画面表示の静止解除

End Sub

補足日時:2002/02/23 00:35
    • good
    • 0

下のマクロを使ってください。



Sub Macro1()
Application.ScreenUpdating = False
'画面表示の静止

シート名 = "sheet" & Cells(1, 2) + 4
'セルB1に入った数字をシート名に置き換え

Worksheets(シート名).Visible = True
'シート表示(印刷用)



'プレビューです。変更可能です。
Sheets(シート名).PrintPreview
'Sheets(シート名).PrintOut Copies:=1
'一応プレビューとしましたが、上のもので
'置き換えると印刷します。



Worksheets(シート名).Visible = False
'シート非表示(戻し)

Application.ScreenUpdating = True
'画面表示の静止解除

End Sub


B1に結果が表示されるように
リストボックスを作ってください。
シート5 が 1
シート6 が 2
シート15 が 11

この回答への補足

すみませんが、実行時エラーがでるのですが

・シート5から15の名称を変更すると実行時エラー9(インデックスが有効範囲にありません)とでます
例:シート5を「333」 シート7を「あいう」 シート10を「様式」
   シート名は固定です

・下記のCells(1, 2)はB1ですよね
   たとえば、C5はCells(5, 3)でいいんですか?
 シート名 = "sheet" & Cells(1, 2) + 4

よろしくお願いします。

補足日時:2002/02/22 15:14
    • good
    • 0

module1に次ぎの内容を入力する。


Sub aaa001()
a=inputbox("sheet=")
Sheets(a).PrintOut Copies:=1
End Sub
それを実行すると、sheet名を聞いてきて、sheet1や
sheet2を入力すると入力したシートの内容が印刷されました。
    • good
    • 0
この回答へのお礼

実行時エラー1004の処理に時間がかかったので、お礼が遅くなりすみません

ちょっと不便ですけれども、こういう方法もあるのだなと、わかりました

ありがとうございます

お礼日時:2002/02/23 10:17

こんばんわ。



一応、VBAは理解できるという前提で回答いたします。

・まず、リストでシート名を選択するセルですが、シート名が忠実に入力できるか、あるいは、簡単のために数字で選択できるようにして表示形式で「シート5」などと表示させるようにする。
・印刷ボタンを配置する。
・ボタンをクリックしたときに、先ほどのセルを参照し、セルの値が5ならばシート5をアクティブにし、印刷を実行する。

と言う手順で問題ないと思います。

なお、そういう使用法であれば、ラジオボタンの方が使い勝手がいいと思います。

この回答への補足

ラジオボタンはどのようにして使用するのですか

ラジオボタンは名前も聞いたことがないので、今回の場合の使いかたを詳しく教えていただけたら、嬉しいのですが。

補足日時:2002/02/22 17:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL 一つのシートのリストを変えたら他のシートのリストも自動的に変えたい。

集計表をシートで日付ごとに1日~31日まで作りたいと思います。
1日のシートを基本とし、そのシートにはリストから選ぶ行が3つあります。
1日のシート内のリストを変えた場合、他のシートの同じリストも自動的に変わるようにしたいのですが、どのように設定すればよいか、教えてください。
1日のシートを作った後にコピーをしてシートを作ろうと思っています。
お願いいたします。

Aベストアンサー

リストは別のシートに作っておいて、それぞれのリストに名前を
付けておきます。
リストの欄には =リストの名前 と入力します。
名前を付けたリストは他のシートでも使えますので、お望みの様
にできると思います。また、可変のリストにもできますので、参
考URLをよくご覧になって下さい。

参考URL:http://www2.odn.ne.jp/excel/waza/name.html#SEC18

QEXCEL マクロ リストボックスよりシート名を選択してシートを選択

こんばんは.
エクセルを使って備品の管理システムを構築したいと考えております.
マクロを使います.
VBAは初心者です.

・備品を20種類ほどに分類し,シートも同様に20作りました.
・ウィンドウを2つに分割し,上下に並べています.
・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています.
・リストボックスの側にマクロ対応のボタンを設置しております

やりたいこととしては・・・
『上ウィンドウのリストボックスで備品を選択し,ボタンをクリックすることによって,下ウィンドウでその選択した備品名のシートに移動する』
です.

私が組んでみたマクロは下記です.
----------------
Sub 備品を選択  

  Dim sheetname As String

'リストボックスからシート名を取得する
sheetname = Range("B2").Value

'下ウィンドウをアクティブにしてシートを選択する
Windows(2).Activate
Worksheets("sheetname").Select

End Sub
------------------

エラーは,『Worksheets("sheetname").Select』のところで
【実行値エラー'9' インデックスが有効範囲にありません.】

参考書やグーグルで調べてもわかりませんでした.
ご教授いただければ幸いです.
よろしくお願い致します.

こんばんは.
エクセルを使って備品の管理システムを構築したいと考えております.
マクロを使います.
VBAは初心者です.

・備品を20種類ほどに分類し,シートも同様に20作りました.
・ウィンドウを2つに分割し,上下に並べています.
・上ウィンドウの最初のシート(シート名:備品一覧)のB2セルにリストボックスを設け,そのリストで20種の備品の中から一つを選択できるようにしています.
・リストボックスの側にマクロ対応のボタンを設置しております

やりたいこととしては・・・
『上ウィン...続きを読む

Aベストアンサー

この辺の問題ではないでしょうか?

  ×Worksheets("sheetname").Select
  ○Worksheets(sheetname).Select

Q前半分の行には1,3,5,7…を、後ろ半分の行には2,4,6,8…を自動で入力する方法は

エクセル2000を使用しています。

C列に文具名が入力されている表があります。

別のシートにある約500種類の文具一覧の中から、
毎月末に、ある条件を満たした文具名だけをC列に抽出しています。
月によってC列に抽出される文具名の数は変動します。

各文具名のA列には1,2,3,4の連番を、
B列には前半分の行に1,3,5,7…を、
後ろ半分の行には2,4,6,8…を入力したいのですが、
自動で入力する方法があれば教えていただけないでしょうか。

A列  B列  C列
 1   1  えんぴつ
 2   3  消しゴム
 3   5  三角定規
 4   7  コンパス
 5   2  下敷き
 6   4  ボールペン
 7   6  ノート
 8   8 セロハンテープ

上の例では文具が8個ですので、
A列は1~8
B列は半分の4行目までは1,3,5,7
5行目からは2,4,6,8が入ります。

文具が奇数個の場合のB列は…
例えば11個の場合には、
1~6行目まで1,3,5,7,9,11
7~11行目まで2,4,6,8,10
が入ります。

C列に抽出される文具が500個近くなる月がありますが、
現在はA1,A2に1,2を入力してマウスで下にフィルコピー、
B列には、前半分の行まではB1,B2に1,3を入力し、
後ろの半分の先頭行と、その次の行に2,4を入力して
それぞれフィルコピーしています。

抽出された行数に応じて、自動でA列、B列に番号をふる方法が
ありましたら教えて下さい。
宜しくお願いします。

エクセル2000を使用しています。

C列に文具名が入力されている表があります。

別のシートにある約500種類の文具一覧の中から、
毎月末に、ある条件を満たした文具名だけをC列に抽出しています。
月によってC列に抽出される文具名の数は変動します。

各文具名のA列には1,2,3,4の連番を、
B列には前半分の行に1,3,5,7…を、
後ろ半分の行には2,4,6,8…を入力したいのですが、
自動で入力する方法があれば教えていただけないでしょうか。

A列  B列  C列
 1   1  えんぴつ
 2   3 ...続きを読む

Aベストアンサー

[回答番号:No.5] の DOUGLAS_ です。
 [ROW()] 関数を使うと、行のデータがずれるかも知れませんね。

B1:
=IF(C1="","",A1*2-IF(A1*2>MAX(A:A)+1,EVEN(MAX(A:A)),1))

でお試しください。

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

Qエクセルで印刷したいシートを選び、選んだ物に対してページ番号を自動でうつことは可能でしょうか?

複数あるシートから必要な物だけを選び印刷をしているのですが、その選んだ物に対して自動で右下の方にページ番号を打つことは可能でしょうか?

Aベストアンサー

はじめまして

印刷するシートのファイル→ページ設定でヘッダーフッターのタブをクリックして、フッターの編集をクリック
右側の空欄をクリックして、#マークのアイコンをクリック
OK→OKです。

あとは印刷したいシートを選択しておいて印刷です。

複数のシートを選択しておけば連番で全てに通しでページが打たれます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報