- ベストアンサー
エクセルでの印刷ボタンの作り方について教えてください!!
現在、エクセルで文書を作っています。 原版シートに対して個人の様々な情報が他のシートからリンクして入れ替わるファイルを作りました。原版シートの横にVLOOKUPするためのセルがあり、そこに個人IDを入力すると、原版シート内の数値が変わるようになっています。 そこで質問です。その原版シートを全員分(あるいは指定した複数のIDの分だけ)一括印刷するためのボタンを作成したいのですが、どのような手順で行ったらよいのでしょうか。 教えてください。よろしくお願いします!!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お礼、有難う御座います hige_082です 回答くださった方には、一言お礼しましょう 質問者の回答者への最低限の礼儀だと私は思います お礼読みました マクロの解説をしますと A1に入力された値を一連番号(123-456の形式)か、個別番号(70,71,77の形式)かを判断して 一連番号であれば、最初の数値に1を加えながら最後の数値まで 個別番号であれば、","で区切り、記された順番で B1の値を変化させては印刷するだけです >やりたいのは、そのグループごとの一括印刷ということです。 や、欠番の処理ですが 基本的には、エラー処理、アレンジは質問者さんでして戴かないと 私には質問者さんのPCの環境やソフトのバージョン、未だにシートや表の構成も分かっていませんし こちらとしては、サンプルを提示してるに過ぎません、この辺をご理解ください Sub test() Dim a As Range, b As Range, c As Range Dim c As Variant Dim i As Long, ii As Long, iii As Long Set a = Range("a1") '印刷IDを入力用セル Set b = Range("b1") 'VLOOKUPするためのセル Set c = Range("c1") '欠番を判断するセル If InStr(a.Value, "-") > 0 Then ii = CInt(Left(a.Value, InStr(a.Value, "-") - 1)) iii = CInt(Right(a.Value, Len(a.Value) - InStr(a.Value, "-"))) For i = ii To iii If c.Value <> "" Then b.Value = i ActiveSheet.PrintOut End If Next i ElseIf InStr(a.Value, ",") > 0 Then c = Split(a.Value, ",") For i = 0 To UBound(c) b.Value = c(i) ActiveSheet.PrintOut Next i End If End Sub 欠番の対処はしてみました Set c = Range("c1") '欠番を判断するセル に、欠番時は""(空白)に、欠番以外は必ずデータの入るセルをセットしてください セルアドレスの指定があれば、このようなことをしなくて済むのですが
その他の回答 (2)
- hige_082
- ベストアンサー率50% (379/747)
さて、どうしましょう >原版シートの横にVLOOKUPするためのセルがあり シートの横にセルは無い、シートの中の間違いかな VLOOKUPするためのセルのアドレス書いて欲しかったですね 個人IDは文字が入る、入らない、それによっても処理が代わるのですが >その原版シートを全員分(あるいは指定した複数のIDの分だけ)一括印刷する 条件もある程度、絞ってもらわないと、回答者が決めるものでは、無いと思います 「禁止事項」は読みましたか、特に「丸投げ・依頼」ルールなので ここから回答です 詳細が無いので、勝手に決めました 個人IDは、数字のみとします VLOOKUPするためのセルも分からないので、B1セルとしました 全員分と言われてもわからないので A1に、開始ID-終了IDをすべて半角で入力 或いは、A1に、ID,ID,ID,ID,IDと半角で入力 例として 123-456 と入力した場合は、ID123からID456まで順に333枚印刷します 12,13,15,20,25,30,70,77 とした場合は、ID12・ID13・・・・ID70・ID77と 入力した順番に8枚印刷されます Sub test() Dim a As Range, b As Range Dim c As Variant Dim i As Long, ii As Long, iii As Long Set a = Range("a1") '印刷IDを入力用セル Set b = Range("b1") 'VLOOKUPするためのセル If InStr(a.Value, "-") > 0 Then ii = CInt(Left(a.Value, InStr(a.Value, "-") - 1)) iii = CInt(Right(a.Value, Len(a.Value) - InStr(a.Value, "-"))) For i = ii To iii b.Value = i ActiveSheet.PrintOut Next i ElseIf InStr(a, ",") > 0 Then c = Split(a.Value, ",") For i = 0 To UBound(c) b.Value = c(i) ActiveSheet.PrintOut Next i End If End Sub 標準モジュールにコピペ 注意点 Set a = Range("a1") '印刷IDを入力用セル Set b = Range("b1") 'VLOOKUPするためのセル の2行を自分の環境に合わせないと、まともに動きません ボタンの設置、ボタンへのマクロ登録、アレンジはご自分で
お礼
大変わかりやすい説明ありがとうございます。 マクロ初心者ですので、質問の仕方もへたくそでごめんなさい。 察してくださったとおり、IDは数字のみで、3ケタです。 印刷を分けたいグループは、IDが101~130までの30名、 131~155までの25名、201~230までの30名、231~255までの25名と なっており、100の位が前記のような並びで、最後ID番号最後の 方は655です。つまり100の位に30名のグループ、25名のグループ の2つが存在し、以後600番台まで計12グループが存在するということです。やりたいのは、そのグループごとの一括印刷ということです。 たとえば、IDが156~200までの方(番号だけあって情報が入っていないもの)のセルにも他のデータからの数式が入っています。 ただし、印刷したい原版シートへのリンクにおいて、IF関数を使って、""なら""(つまり空白)と設定していますので、リンク情報に 記載情報がなければ、数式は入っていますが、空欄のように見えています。 もし今の説明で、既にいただいていたhigeさんの式に変更部分がでてくるようでしたら、お手数掛けますが、教えてください。 よろしくお願いします!(@ @)/
- orangezzzz
- ベストアンサー率35% (401/1119)
こんばんは。 現実的なイメージではないような・・ IDを入力しなければ使えないわけですよね。 マクロの記録で繰り返し印刷して、そのマクロをコマンドボタンに登録するしかないのでは? 指定した複数のIDはどうするか? そもそも指定の方法とは? ・・無理でしょう。
お礼
もう少し勉強してみます。 回答ありがとうございました。
お礼
質問が不十分で申し訳ありませんでした。 もうちょっと勉強してみます。 丁寧な回答ありがとうございました。