[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『連続印刷について』(らいんぢあ)
いつもお世話になっております。 今回もまったく知識がないため、「こんなことが出来る」「これはできない」 と言うこともわからないので、色々と質問させてください。
下記のような届出表があります。
'07年7月 勤務実績届出表 所属 印 社員コード 氏名 本人確認 日付 曜日 直 休務 不就労時間 時間外勤務 不就労並びに時間 深夜 所属長 遅刻 早退 外出 組合要務 予定 実績 外の区分及び理由 増減 確認印 21 木 21 22 22 金 23 土 23 24 24 日 25 月 25 26 26 火 27 水 27 28 28 木 29 金 29 30 30 土 1 日 2 月 1 2 3 火 4 水 3 4 5 木 6 金 5 6 7 土 8 日 7 8 9 月 10 火 9 10 11 水 12 木 11 12 13 金 14 土 13 14 15 日 16 月 15 16 17 火 18 水 17 18 19 木 20 金 19 20 計 集計表 *印の項目につき各課で記入してください。 (0の場合は未記入) 1 出勤日数 10 * 残業振替 19 * 代休日数 30 その他 2 * 年休日数 11 * 早出時間 20 * 休日休暇 31 特休定額 3 パート時間 12 * 休出時間 21 生休日数 32 休業手当 4 * 休出日数 13 * 休出振替 22 * 届出欠勤 33 他控除現 5 * 遅早外時 14 * 特休時間 23 * 無届欠勤 34 他控除伝 6 当時間外 15 * 特休振替 24 業傷日数 7 * 時間外時 16 前月時間 25 宿日直数 35 給食代 8 交代深夜 17 時間外減 9 * 深夜 増 18 * 深夜 減
丸ごとコピーして載せたので長いですね・・・ここに色々と数式やら条件付書式を設定してあります。 具体的に上げますと・・・
まず、この表は http://camaro.ddo.jp/books/myPrint.xls のシート2に、元々のブックからコピペしました。(H1〜BJ49にかけて貼り付けてあります) ↑何故かと言いますと、このVBAを利用して連続印刷できるかな?と思ったのが発端だからです。 シート3を新規に追加、そこに日付と曜日の転載元になるリストをA1=21〜A11=31、A12=1〜A31=20 と入力。 シート3のB1からその月の各日に対応する曜日を手で入力。↑の日付にそろえて。 その際に、無い日付(例に上げた 07年7月分なら対象日は6月21日〜7月20日なので31日)の曜日は無記入。 土日のセルに色付けするため、シート2の届出表の横(BL2〜BL4)に「土」「日」「 」(空白)を設置。
・「07年7月」は=TODAY()+30 ・曜日の「29・30・31」日の欄には =IF(Sheet3!B9="","",Sheet3!B9)のような式を設置。 ・日付の「29・30・31」日の欄には =IF(J14="","",Sheet3!A9)を設置。 ・各日付に対応するセル(21日ならH6〜BB6、BC6〜BF7)に条件付書式で、 (1)=J6=$BL2 なら40%灰色。 (2)=J6=$BL3 なら60%灰色。 (3)=J6=$BL4 なら80%灰色。 で、色付け。
と言う仕様になっています。この表に「所属」と「社員コード」と「氏名」を入れ替えながら連続印刷したいのですが。
1)自力で解決しました。
2)「所属」の部分に入れるデータを、その人の所属する部署の一番細かい分類にしたい。 例:製造部長 → 「製造部」と記載。 :製造部 製造課長 → 「製造課」と記載。 :製造部 製造課 管理グループの人 → 「管理グループ」と記載。 その為に、所属1・所属2・所属3まで、別の列に分けてシート1に記入してあります。 具体的にはA列=部、B列=課、C列=グループ、D列=社員コード、E列=氏名の順で入力してあります。 部長はA列だけ、課長ならAとB列・・・のように入力してあります。 「入力のある列の最終列」とかで判断させればいいのでしょうか?教えてください。
3)これも自力で解決しました。
すみません、当方本当にエクセルの事を解っていないので、何をどう弄ると何が変わるのか、も解りません。怖くて手が付けられない、と言うのが本音です。 皆様にとっては、大変当たり前の事や「書いてあるじゃん」みたいな事を質問しているかも知れませんが、よろしくご教授のほどお願いします。
(らいんぢあ)です。 すみません、この質問が「一覧(最新更新順)」のページに掲載されていなかったのは何故ですか? 「過去ログ」にはありました。
長すぎましたか?
6/28 09:11 色々弄っていて解っって来たので、質問を削除させていただきました。
表の整形は試みましたが・・・。 差し込み印刷のコードは出来ているのですよね? 元データの「所属」の部分に関数を使って、シート1から 差し込みたい物を表示させておくのでは駄目なのですかね?
また、私としては 「解決したから 無かったことにします」 ではなく、貴方がどの様に解決したのか その苦労の末を書いておいていただけるのが 宜しいと思います。
(HANA)
>「解決したから 無かったことにします」 >ではなく、貴方がどの様に解決したのか >その苦労の末を書いておいていただけるのが >宜しいと思います。
すみません、当方、本当に何も解っていないのでよく連続印刷のお手本として引用されている、 myPrintのコードをそのまま使おうとしています。
1)は自分の編集した画面を保存しないでも連続してプリントする時に反映されるのか? 3)は連番を振っておかないと連続印刷されないのか? と言う質問でした。
1)と3)の質問は、それぞれ、マイプリントのしーともじゅーる?(すでにここから怪しい初心者です…) の中にある、「連続プリント」と「一括プリント」を以下のように弄って解決しました。
For i = 16 To .Range("A65536").End(xlUp).Row Worksheets("Sheet2").Range("AN1").Value = .Cells(i, 2).Value Worksheets("Sheet2").Range("AN2").Value = .Cells(i, 4).Value Worksheets("Sheet2").Range("AN3").Value = .Cells(i, 5).Value
とりあえず、決死の覚悟で変えてボタンを押したら、両方すんなり行ってしまってこれはもう、 当たり前の事を、自分で試しもせずに聞いた事に気付き、慌ててしまって質問を消してしまいました。 申し訳ありませんでした。
>表の整形は試みましたが・・・。
やはり、そのまま貼り付けるとどんな表か判らなくなっていますよね…。 元々の表も、セルの結合などが大量にしてあってなおかつ列幅が13ピクセルとか細かい刻みになっているんで、 多分復元は無理かも、と思いつつも丸ごと乗せてみました。上手く説明できませんが、こんな感じの配置です。
所属 ○年○月 勤務実績表 社員コード 印 (←オートシェイプで○囲み) 氏名 本人確認 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−ーーーーーーー 日付 曜日 直 休務 不就労時間 時間外勤務 不就労並びに時間外 深夜 所属長 遅刻 早退 外出 組合要務 予定 実績 外の区分及び理由 増減 確認印 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−ー 21 木 | 21| 22 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | 22 金 | | −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−ー 23 土 | 23| 24 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−| | 24 日 | | −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
集計表 *印の〜 から後は、とりあえず関係ないので割愛します。
こんな感じの表です。
>差し込み印刷のコードは出来ているのですよね? >元データの「所属」の部分に関数を使って、シート1から >差し込みたい物を表示させておくのでは駄目なのですかね?
すみません、言われている事が良く判らないのですが、この「元データ」と言うのはこの表の事ですか? それとも、連続印刷に使用する時のデータの部分の事ですか? (らいんぢあ)
>連続印刷に使用する時のデータの部分の事 です。
(HANA)
>>連続印刷に使用する時のデータの部分の事
と言うことは、今あるデータ列ではなく、 そこからさらに連続印刷用にデータ列を作成する と言うことですか?
それとも関数で、表に連続して次々と所属を持ってこれる物があるのでしょうか?
その関数が難しいからのVBAではなかったですか? (@o@)グルグル
すみません、本当に質問の訳が解っておりませんです。(らいんぢあ)
差し込み用のデータは一覧で無いのですか? 現在御提示の表は、差し込まれる側の表 ですよね? 所属・社員コード・氏名一覧表があって、 そのデータを御提示の表の御提示の箇所に 次々と差し込みながら、印刷をする ・・・と言う事ではないのですかね?
そして、そのVBAは既に出来ているが >「所属」の部分に入れるデータを、その人の所属する部署の一番細かい分類にしたい。 と言うご質問かと思っておりましたが・・・。
そもそも私がご質問の意味を取り違えているかもしれません。 意味を取り違えていないのであれば とりあえず、差し込み用のデータ一覧と 別表として、シート1につくられた 「所属」の一覧 それぞれのサンプルを 載せてみてもらえますか?
<追記> > For i = 16 To .Range("A65536").End(xlUp).Row > Worksheets("Sheet2").Range("AN1").Value = .Cells(i, 2).Value > Worksheets("Sheet2").Range("AN2").Value = .Cells(i, 4).Value > Worksheets("Sheet2").Range("AN3").Value = .Cells(i, 5).Value この部分は、 B列に所属、D列に社員コード、E列に氏名 が16行目から 入った表があって、16行目から順番に、AN1,AN2,AN3のセルに 差し込みながら印刷 と言う事なのですよね? そうであれば、空いた列(F列等)に実際に差し込みたい部署の分類 を表示させて、B列ではなくF列を差し込みデータとして使う のはどうですか? と言う提案です。
(HANA)
すみません、私の説明不足で、私が意味を把握していない、と言う訳のわからん状態になっていました。 HANA様は、私の拙い説明から、私の質問の意図を正確に把握していて下さったと言うのにっ!!
えーとですね、私の説明不足だった所はですね・・・
A B C D E 1 所属1 所属2 所属3 社員コード 氏名 2 製造部 24430 山田太郎 3 製造課 25095 川田次郎 4 製造課 管理G 18450 海田三郎 5 総務部 22895 湖田花子 6 総務課 営業G 23257 谷田五郎 7 総務課 14860 陸田華子
のような、表がシート1にあって、ここから各所属の一番細かい所を・・・ と言っていたので、
>とりあえず、差し込み用のデータ一覧と >別表として、シート1につくられた >「所属」の一覧
と言う風に、分かれていなかったのです。 で、何をお聞きされて居るのか、判らなかった、と・・・お恥ずかしい限りでございます。
それで、自分で色々試した時に、とりあえず連続で変わることだけ確認したくて、 データが一番塊になっていて、かつ所属部署が変わっていた16行目辺りからの「所属2」をとりあえず指定しておいたのです。 その説明をしていなかった事に、今更気が付きました。
>そうであれば、空いた列(F列等)に実際に差し込みたい部署の分類 >を表示させて、B列ではなくF列を差し込みデータとして使う >のはどうですか? >と言う提案です。
はい、私もそれが一番簡単な気がします。 こういう検索の時は・・・過去ログにありましたよね。 (らいんぢあ)
すみません、上記の関数ってどうやればいいでしょうか? 確かIFで始まっていたような気がして、それで探していたんですが・・・。 (らいんぢあ)
エラー処理を入れると、大抵IF関数で始まりますからねぇ・・・。 所属が3つしか無い様ですので、単純にネストさせてしまえば良い様な気がします。 =IF(C2<>"",C2,IF(B2<>"",B2,IF(A2<>"",A2))) C2→B2→A2の順番に探し、空欄でないセルがあった時点で そのセルの内容を表示します。
ちなみに、Sheet3は日付の表示のためだけに存在しますか? 色々個別に対応なさって居られるようですので・・・・ >・「07年7月」は=TODAY()+30 当月の21日からの日付は =DATE(YEAR(TODAY()),MONTH(TODAY()),20+ROW(A1)) こんな式で求まります。 ただし、31日等無い場合 続けて次の月が始まりますので 月が変わった場合は「""」を表示させます =IF(MONTH(DATE(YEAR(TODAY()),MONTH(TODAY()),20+ROW(A1)))=MONTH(TODAY()), DATE(YEAR(TODAY()),MONTH(TODAY()),20+ROW(A1)),"") 次の月は、特に処理無しで =DATE(YEAR(TODAY()),MONTH(TODAY())+1,ROW(A1)) として、20日までコピーすれば良いと思います。
また、曜日は(例えば日付がA6から始まっている場合) =IF(A6="","",TEXT(A6,"aaa")) としておけば、当月の21日からのカレンダーが自動的に表示されます。
>土日のセルに色付けするため、シート2の届出表の横(BL2〜BL4)に >「土」「日」「 」(空白)を設置。 この部分がよく分かりませんが、 (6行目に関して列方向[BL2,BM2,BN2]ではなく行方向[BL2,BL3,BL4]なのか?) (1)土曜日 なら40%灰色。 (2)日曜日 なら60%灰色。 (3)平日 なら80%灰色。 (4)日付無しなら色無し。 を設定なさりたいので有れば 条件付き書式(6行目に関して)の 数式が =$B6="土" [ 40%灰色 ] 数式が =$B6="日" [ 60%灰色 ] 数式が =$B6="" [ 色無し ] で、該当セルを事前に 80%灰色で塗りつぶしておきます。 「土・日・日付無し」の行以外は「80%灰色」で塗りつぶされます。
・・・まるっきり外してますかね? まぁ、後半部分(大半部分?)余談ですので(笑) とりあえずご質問の主題である「上記の関数」ご確認下さい。
(HANA)
いただいた関数のお蔭で、ばっちりです。どうもありがとうございました。
>・・・まるっきり外してますかね?
いえいえ、とんでもない。これも私の説明不足です。
このデータは、元々別の方が作ったもので、その方からデータを「簡単に印刷できるように」と渡されました。 元の担当者の方も使う為、あまり大幅な改編は出来ないので、回りくどいやり方のままと言う事に・・・。 私も、エクセルに詳しいとは口が裂けても言えませんので、何故このやり方なのか判らず、 HANA様ご提示の方法、エクセルを使うなら、こうやって色々エクセルに任せるべきだよねぇ……とは思いますが、 「触らぬ神に崇り無し」と言う事で、現状のまま行こうと思っております。 ですが、色々とご教授下さり、ありがとうございました。
最後に、もう少しだけお聞きしたい事があります。
このmyPrintのVBAを、別のブック(元々出勤簿などが入っているブック)にコピーしたいのですが、 ・「連続プリント」と「一括プリント」の部分だけ抜き出してコピーできますか? ・その場合、シート1にあるようなボタンはどうすれば作れますか? ・そもそも、これ、どこにどうやって貼り付ければいいんでしょうか? シートのタグを右クリックして出てくる所、でいいんでしょうか? しかしなにやらシートの種類やら何やら入れないと駄目っぽいのですが……(--;)。 (らいんぢあ)
VBAのことは詳しくないので・・・ と、先に予防線を張っておきますが
>「連続プリント」と「一括プリント」の部分だけ抜き出してコピーできますか? これは、該当部分だけ抜き出してコピーすれば良いと思います。 但し、一番先頭にある「Option Explicit」この一文も 一緒にコピーしておくのが良いかもしれません。
>シート1にあるようなボタンはどうすれば作れますか? 上の4つのボタンに関しては 「コントロールツールボックス」のボタンです。 メニュー・表示(V)→ツールバー(T) ■コントロールツールボックス にチェックを入れて、ツールバーを表示させた後コマンドボタンを作成して下さい。 「チェックボックス[レ]」「テキストボックス[ab|]」「コマンドボタン[ ]」 の順に並んでいると思います。
>・そもそも、これ、どこにどうやって貼り付ければいいんでしょうか? > シートのタグを右クリックして出てくる所、でいいんでしょうか? ボタンを配置したシートのタグを右クリックして出てくる所 に貼り付けて下さい。 データは「Sheet1」に、差込先は「Sheet2」に配置して下さい。 シート名を変更したい場合は、コード内の該当個所を変更して下さい。 また、オブジェクト名は コードの最初に出てくる名前と一致させて於く必要があります。 配置したコマンドボタン上で、右クリック→プロパティ(I)の[項目別]タグの □その他 (オブジェクト名) で変更可能です。
>シートの種類やら何やら入れないと駄目っぽいのですが……(--;)。 この部分は、よく分かりません・・・。 どんな事態になりましたかね? データと差込先のシート名を変更しましたか?
(HANA)
Option Explicit
Private Sub CommandButton1_Click() '連続プリント
Dim 勤務実績表_改U As Long
Dim i As Long
With Worksheets("印刷用名簿")
For i = 2 To .Range("A65536").End(xlUp).Row Worksheets("勤務実績表").Range("AN1").Value = .Cells(i, 6).Value Worksheets("勤務実績表").Range("AN2").Value = .Cells(i, 4).Value Worksheets("勤務実績表").Range("AN3").Value = .Cells(i, 5).Value
Worksheets("勤務実績表").Select
PrtMsg:
PrintMenu = MsgBox("印刷を実行してもいいですか?。" & Chr(13) & _ " [は い] : 印刷実行" & Chr(13) & _ " [いいえ] : 印刷プレビュー" & Chr(13) & _ " [キャンセル] : 次を読込", 3, "連続印刷")
If PrintMenu = 6 Then 'はい(印刷実行) MsgBox "印刷します。" Worksheets("勤務実績表").PrintOut
ElseIf PrintMenu = 7 Then 'いいえ(印刷プレビュー) Worksheets("勤務実績表").PrintPreview GoTo PrtMsg 'プレビューを閉じた後、確認メッセージに戻る。
ElseIf PrintMenu = 2 Then 'キャンセル(何もしない)
End If
Next i
End With
End Sub
Private Sub CommandButton2_Click() '一括プリント
Dim i As Long
If vbNo = MsgBox("印刷を実行してもいいですか?。", 4, "一括印刷") Then Exit Sub
With Worksheets("印刷用名簿")
Worksheets("勤務実績表").Select
For i = 2 To .Range("A65536").End(xlUp).Row Worksheets("勤務実績表").Range("AN1").Value = .Cells(i, 6).Value Worksheets("勤務実績表").Range("AN2").Value = .Cells(i, 4).Value Worksheets("勤務実績表").Range("AN3").Value = .Cells(i, 5).Value
Worksheets("勤務実績表").PrintOut Next i
End With
End Sub
となっております。
コマンドボタンを印刷用名簿の部分にふたつ作製して、それぞれボタンの所をクリックして「コマンドボタン1」を「連続プリント」、「2」を「一括プリント」と名前を変更してみました。 で、「いざ!」と勇んで「連続プリント」ボタンを押そうとカーソルを合わせると・・・・・・ ↑ カーソルが、← → の形になって、ボタンが押せないのですが・・・・・・ ↓ これは、まだコマンドボタンの設定が終わっていないと言う事ですよね? しかし、何をしていないのかが判らない・・・・・・。又は、何をしてしまったのかが・・・。 これが、「オブジェクト名を一致させておかないと・・・」と言う事なのでしょうか? オブジェクト名を「連続プリント」にしてもまだ駄目なのですが・・・? あと、ボタンをそのまま選択すると =EMBED("Forms.CommandButton.1","") 見たいな式が表示されますが、これも良いんでしょうか?
あっ!! 「その式は正しくない」と言われ続けます。一旦終了させようとしたら、数分固まりました・・・。 とりあえず今までの変更を保存しないで、終了させたのですが・・・・・・私は一体何を仕出かしたのでしょう・・・。 一杯一杯でアップアップの(らいんぢあ)
コードを新しいブックに移動させるのではなく コードの設定してあるブックにデータを張り付けて 要らないボタン等 消すのはどうですか?
(HANA)
>コードを新しいブックに移動させるのではなく >コードの設定してあるブックにデータを張り付けて >要らないボタン等 消すのはどうですか?
私も一案として考えていました。その方が楽かなぁ、と。 とりあえず、myPurintのシート1にあるいらないボタンさえ消してしまえば、 間違えて選択印刷・・・なんてことにはならないと思うのですが・・・・・・ 要らない部分のコードは無理して消さない方が、無難ですよね・・・? 手違いで何か消したりするのが怖いので・・・・・・(--;)
チョット、やって来てみます。 (らいんぢあ)
速攻で申し訳ありません・・・・・・。
ボタンを右クリックすると、ボタンの中に点線で四角枠が表示されますが、 それから何のアクションも起こりません・・・? 何でだろ〜何でだろ〜・・・と古い歌が頭の中で踊っております。(らいんぢあ)
> あと、ボタンをそのまま選択すると >=EMBED("Forms.CommandButton.1","") >見たいな式が表示されますが、これも良いんでしょうか?
もしかしたら「コントロールツールボックス」の デザインモードが押されたままになっていませんか? デザインモード中は=EMBED("Forms.CommandButton.1","")と表示されるので。 もしそうであればもう一度押して解除してみてください。
(ヒロシ)
ごめんなさい、昼間は時間が無かった物で・・・。 上手く行かないみたいですね。 すでに遅いのですが、午前中のお話から続けさせてもらいます。 もしよろしければ、ご確認ください。 なお、現在の状態へのレスは、一番最後のみになります。
> ↑ >カーソルが、← → の形になって、ボタンが押せないのですが・・・・・・ > ↓ 表示させたツールバーの先頭に 三角定規と定規と鉛筆 マークのボタンがあると思います。 それが押された状態でしたら、もう一度押してください。 ボタンが押せるようになります。
>オブジェクト名を「連続プリント」にしてもまだ駄目なのですが・・・? オブジェクト名と、ボタンに表示されている文字 とは別物です。 ボタンが押せない状態で、そのボタンをダブルクリックしてみてください。 VBEが開いて Private Sub CommandButton1_Click()
End Sub と言うのが表示されると思います。 この2行の間に、実行させたいコードを貼り付けても良いのですが・・・。
ちなみに、オブジェクト名を「連続プリント」にしてダブルクリックすると Private Sub 連続プリント_Click()
End Sub この2行が表示されると思います。
>要らない部分のコードは無理して消さない方が、無難ですよね・・・? 必要な部分を消してしまったら、動かなくなると思いますので そんなに心配なさらなくても良いと思いますが、 その辺はご自由になさるのが宜しいかと思います。
>ボタンを右クリックすると、ボタンの中に点線で四角枠が表示されますが、 コントロールツールボックスのツールバーを表示させ 最初のボタン(三角定規と定規と鉛筆)を押してください。 ボタンが押せなくなりますので、左クリックで選択して Deleteキーで削除できます。 (午前中にお困りだった状態にする必要があります。)
(HANA)
私、同じ操作の切換に由来する所で、設定が変えられないと止まっていたんですね・・・。 システムを理解していないのが、もろバレです・・・・・・。
お蔭様で、無事にデータの移植と、ボタンの消去が出来ました。 担当者の方にも、二重マルをいただきました。
どうもありがとうございました。(らいんぢあ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.