- ベストアンサー
エクセルで出勤数が上がっている人のリンク先を印刷する方法について
- エクセルで勤怠表と給与明細を作成しているが、特定の条件を満たす人のリンク先を一括して印刷したい。
- 必要なデータはA列の出勤数とE列の名字のリンク先で、VLOOKUPやIFでの解決が難しい。
- マクロを使用してリンク先を印刷する方法を模索中だが、具体的な解決策が分からない。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>1ページと3ペジをプリントさせていのですが・・・ 一度のPrintOutでは飛びページは指定できないと思いますので、単純に1ページと3ページを印刷します。 Sub 印刷() Dim I As Integer Dim リンクシート As String For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "E").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut From:=1,to:=1 Sheets(リンクシート).PrintOut From:=3,to:=3 End If Next I End Sub ※1,3ページ固定ではなければ、必要なページを印刷するようなロジックを組み込まないとだめですが…
その他の回答 (4)
- jcctaira
- ベストアンサー率58% (119/204)
お疲れさまです。 > 教えていただいたマクロにどのようにして ページ指定すればよろしいでしょうか。 PrintOut のパラメタは以下の通りです。 PrintOut (From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName) ページ指定なら最初に3つを指定すれば良いかと思います。 From :印刷を開始するページの番号を指定します。 To :印刷を終了するページの番号を指定します。 Copies:印刷部数を指定します。
お礼
何度も教えていただいて恐縮です。 上手く動かないので、今いろんな、パターンを試してますが、 上手くゆきません・・・・・ スミマセン 1ページと3ペジをプリントさせていのですが・・・ あと From1TO2Copies1 For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "E").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) PrintOut(From:1,To:3,Copie2,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName) Sheets(リンクシート).PrintPreview (リンクシート, "!") - 1)のあとから書けばよいのでしょうか、 ご迷惑かけます。 今自力で色々かいてます。なんとかがんばります。 ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
>A列の出勤の上がってる方だけ この整理表にもとづいて各人のシートを印刷するのでなく、元の各人シートの出金数が>=1を印刷すれば良いのでは。それが入っているセルは各シートで一定ではないのかな。 Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Range("D10") If (sh.Range("D10")) <> "" Then 'sh.Range("a1:E15").PrintOut MsgBox sh.Name End If Next End Sub これで各人シートが同一ブックにあれば、全員のD10セルの値ををチェックして、D10が空白でなければシートを印刷することが出来る。 ーー ハイパーリンクに持ち込んだり、特にExecuteExcel4Macroを使ったりするのは、もっと十分VBAに熟達してから、良くわかってあえて使うべきのことで、コンなのに初めから道を求めるのは邪道とおもう。
お礼
回答ありがとうございます。 遅くなりスミマセン おっしゃるとうり 初めは、各シートごとに個人明細がありますので、 そこを 検索して、印刷させようと考え、他の皆さんの質問など、拝見していたのですが、 どうしても 分からなくて、 その時に他の方の質問で、ハイパーリンクを読み込んで開くと言う のを、発見したので、 ひょっとして これかなと 思い質問してみたのですが、 背伸びし過ぎでしたね! さっぱり分かりません。 ちなみに明細のあるシートには、 C12 ・・・作業時間 C47・・・・ 出勤数 が、表示されます。 たとえば印刷したいシートのページを指定した時は、どうすればよいでしょうか? よろしければ 教えてください。 ありがとうございました。
- jcctaira
- ベストアンサー率58% (119/204)
マクロは下記の通りです。 ・2行目からA列の最終行まで処理しています。 ・A列(出勤数)が0の場合、印刷していません。 ・E列(氏名)は必ずハイパーリンク(シート)が貼ってあるとしています。 ※テストの時は「PrintOut」ではなく「PrintPreview」にした方が紙の無駄がないと思います。 Sub 印刷() Dim I As Integer Dim リンクシート As String For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "E").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut End If Next I End Sub
お礼
お礼がおしくなりました。 ありがとうございます。途中たぶんこちらの問題で、 マクロが使えないブック・・・・や・・ スパイラルエラーなど 分からない所も出てきましたが、 なんとか動きました。 印刷の部分で つまずき 止まっていましたので、 驚きと感謝でいっぱいです。 背伸びしすぎだと反省してます。 以前 プリントのマクロを作ったのですが、 教えていただいたマクロにどのようにして ページ指定すればよろしいでしょうか。 よろしければ おねがいします。 ExecuteExcel4Macro "PRINT(2,1,1,1,,,,,,,,2,,,TRUE,,FALSE)" ExecuteExcel4Macro "PRINT(2,3,3,1,,,,,,,,2,,,TRUE,,FALSE)"
- sumer45
- ベストアンサー率17% (52/294)
ここで教えられるのには限界がありますね 単にA列が該当するデータかどうかという判定は Dim Endrow As Long Dim C As Range Endrow=Range("A65536").End(Xlup).Row For Each C In Rnage("A2:A" & Endrow) If Val(C.Value)>=1 Then 印刷処理 End If Next となりますが オートフィルターで抽出して手印刷ではダメなのですか?
補足
さきほどは、スミマセンでした。 回答ありがとうございます。
お礼
お礼が遅くなりました。明日会社で、 テストしてみます。 上手く行きそうです。 ありがとうございました。 この式を見本にして、他の事もやってみます。 ホームページのほうも、 勉強になるので、お気に入りに登録させていただきました。 何度も 付き合ってもらい感謝してます。 ありがとうございました。