Excel VBA質問箱 IV

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

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


1501 / 13644 ツリー ←次へ | 前へ→

【73976】日付を入れ替えて印刷する方法 かず 13/3/30(土) 0:49 質問[未読]
【73978】Re:日付を入れ替えて印刷する方法 UO3 13/3/30(土) 6:35 発言[未読]
【73985】Re:日付を入れ替えて印刷する方法 かず 13/4/1(月) 9:22 質問[未読]
【73986】Re:日付を入れ替えて印刷する方法 UO3 13/4/1(月) 11:45 発言[未読]
【73987】Re:日付を入れ替えて印刷する方法 かず 13/4/1(月) 13:34 発言[未読]
【73988】Re:日付を入れ替えて印刷する方法 UO3 13/4/1(月) 14:09 発言[未読]
【73989】Re:日付を入れ替えて印刷する方法 かず 13/4/1(月) 14:48 発言[未読]
【73990】Re:日付を入れ替えて印刷する方法 UO3 13/4/1(月) 16:15 発言[未読]
【73991】Re:日付を入れ替えて印刷する方法 かず 13/4/1(月) 17:05 発言[未読]
【73993】Re:日付を入れ替えて印刷する方法 UO3 13/4/2(火) 15:01 発言[未読]
【73997】Re:日付を入れ替えて印刷する方法 かず 13/4/3(水) 2:07 お礼[未読]

【73976】日付を入れ替えて印刷する方法
質問  かず  - 13/3/30(土) 0:49 -

引用なし
パスワード
   初めまして。エクセル2010を使用しています。
VBA初心者につきご教示いただければと思います。

ある様式を一月分、日別に一枚づつ印刷します。
M列の行6から行36まで、一月の1日から31日までの日付データがあり、上から順に、G3に日付を貼り付けて、印刷していきます。
M列の日付は、あらかじめ関数で、土日祝祭日・振替休日は空白になるようにしています。従って、表示された日付だけが印刷対象の日付となります。

そこで、上記内容のモジュールを作成したところ、無反応でした。
どのように修正したらよいのかアドバイスをいただけないでしょいか。
よろしくお願いします。

なお、以下の内容はスマフォで入力していますので多少の間違いがあるかもしれません。

こんな内容でとても恥ずかしいですが、よろしくお願いします。

Dim cnt As Long

For cnt =1 to 31 Step 1
  If Cells(cnt,13).Value="" Then Exit For
  Range("G3")=Cells(cnt,13)
  ActiveWindow.SelectedSheets.PrintOut Copies:=1,Collate:=True,_IgnorePrintAreas:=False
Next cnt

【73978】Re:日付を入れ替えて印刷する方法
発言  UO3  - 13/3/30(土) 6:35 -

引用なし
パスワード
   ▼かず さん:

おはようございます

M列に日付があるシートと、G列にいれて印刷知るシートが同じシートか別のシートか
不明ですけど、コードでは、同じシートとしておられますので、その前提で。

まず、日付は M6 から始まっていますね。
M1〜M5 が、どうなっているのかわかりませんけど、アップされたコードでは(これが正しいとして)
For cnt =1 to 31 ですから cnt は 1 から始まりますね。
で、If Cells(cnt,13).Value="" Then Exit For がありますから、とえば M1〜M5に空白があれば
そこで処理が終わってしまいますね。
逆に、M1〜M5に空白ではないものがあれば、その値が G3 にセットされて印刷されてしまいますね。
それと、日付の最後は M36 ですよね。 1 To 31 ですと、M32〜M36に日付があっても無視されますね。

次に「スマホ」でアップされたということですから「本当のコードは」
For cnt =6 to 36 Step 1 になっているとします。

このコードの不具合の「元凶」は 「Exit For」 です。
空白のものがあれば、そこで、処理が終わってしまいます。
1月のデータで実行されたようですから、最初が1月1日。祝日ですから空白でしょうね。
なので、最初で Exit For 。処理が終わってしまいます。

  If Cells(cnt, 13).Value <> "" Then
    Range("G3") = Cells(cnt, 13)
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  End If

このようにすればよろしいですね。

【73985】Re:日付を入れ替えて印刷する方法
質問  かず  - 13/4/1(月) 9:22 -

引用なし
パスワード
   U03さん

おはようございます。
先週土曜日に書き込みしたはずなんですが、何かの手違いで載っていなかったみたいですね。結果的に何もコメントをアップせず申し訳ありませんでした。

ご教示いただいた内容で試してみましたが、一年分が印刷されてしまいました。

私の説明が足りませたが、M6〜M36に日付データがあります。
G3に月の初日を入力するとM6〜M36に印刷対象の日付が反映されます。
印刷するのは、あくまでも一月分だけです。

例えば、4月の場合ですと、M6が4月1日で始まり、M35の4月30日が最後となります。また、4月の6、7、13、14、20、21、27、28、29は空白となります。

色々試行錯誤しましたが、一年分印刷されてしまいます。

M1〜M5は空白です。
For cnt =6 to 36 Step 1 に修正しております。

何度も申し訳ありませんが、再度、ご教示いただけますと幸いです。
よろしくお願いします。

【73986】Re:日付を入れ替えて印刷する方法
発言  UO3  - 13/4/1(月) 11:45 -

引用なし
パスワード
   ▼かず さん:

こんにちは

1年分というのが、ちょっと ?? なんですが、
たとえば四月だとして M6が4月1日、M35が4月30日、M36 が空白になっているのか
前の月の名残で 3月31日となっているのか不明ですが、いずれにしても
For cnt = 6 To 36 ですから 領域内のセルがすべて空白ではなかったとしても最大31日分しか
印刷されませんよ?
(1回の印刷で何ページになるのか不明ですけど、最大31【回】分のみ印刷です)

1年分とおっしゃるのは、具体的にどういった現象のことを言われているのでしょうか?
365【回分】印刷されたということですか?

そちらのコードを Sub から End Sub まですべてコピペでアップいただけませんか?

【73987】Re:日付を入れ替えて印刷する方法
発言  かず  - 13/4/1(月) 13:34 -

引用なし
パスワード
   U03さん

こんにちは。
またもや説明が足りす申し訳ありませんでした。

まず、G3を4月1日にした場合、印刷されるのは、4月1日、4月2日、4月4日、4月8日、4月15日、4月23日、5月2日、5月13日、5月27日、6月11日、6月27日、7月16日、8月5日、8月26日、9月17日、10月10日、11月5日、12月2日、12月30日分で計19枚です。

M6〜M36には順番に4月1日、2、3、4、5、(空白)、(空白)、8、9、10、11、12、(空白)、(空白)、15、16、17、18、19、(空白)、(空白)、22、23、24、25、26、(空白)、(空白)、(空白)、30日、(空白)が表示されており、空白は関数で空白となっています。

次にモジュールです。

Sub test ()

Dim Cnt As Long

For Cnt =6 To 36 Step 1

If Cells(cnt, 13).Value <> "" Then  Range("G3") = Cells(cnt, 13) ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End If

Next Cnt

End Sub

以上です。

土曜日に書き込みしたはずの内容としては、パソコンが月曜日にならないと使えませんので、月曜日に書き込みさせていただきます、と書かせていただきましたので、今日の書き込みとなりました。

何度も申し訳ありませんが、よろしくお願いします。

【73988】Re:日付を入れ替えて印刷する方法
発言  UO3  - 13/4/1(月) 14:09 -

引用なし
パスワード
   ▼かず さん:

こんにちは

シートの実態は

>M6〜M36には順番に4月1日、2、3、4、5、(空白)、(空白)、8、9、10、11、12、(空白)、(空白)、15、
>16、17、18、19、(空白)、(空白)、22、23、24、25、26、(空白)、(空白)、(空白)、30日、(空白)
>が表示されており、空白は関数で空白となっています。

なんですよね?

で、実際にマクロ実行して印刷されるのが

>まず、G3を4月1日にした場合、印刷されるのは、4月1日、4月2日、4月4日、4月8日、4月15日、
>4月23日、5月2日、5月13日、5月27日、6月11日、6月27日、7月16日、8月5日、8月26日、9月17日、
>10月10日、11月5日、12月2日、12月30日分で計19枚です。

ということをいわれているんですよね?

逆に、シートのM列には 4月の日付しかないのに、5月2日 や 6月27日 や 9月17日 を、どこから
参照しているのか、そちらが不思議なんですが?

で、最初に質問したんですが、答えていただいていない点、
G3 にいれて印刷するシートと、M列に4月の日付があるシートは同じシートなんですか?
違うシートなんですか?

違うシートだとした場合、マクロ実行するタイミングで、どのシートがアクティブシートになってますか?

【73989】Re:日付を入れ替えて印刷する方法
発言  かず  - 13/4/1(月) 14:48 -

引用なし
パスワード
   ▼UO3 さん

こんにちは。

シートの実態は
>
>>M6〜M36には順番に4月1日、2、3、4、5、(空白)、(空白)、8、9、10、11、12、(空白)、(空白)、15、
>>16、17、18、19、(空白)、(空白)、22、23、24、25、26、(空白)、(空白)、(空白)、30日、(空白)
>>が表示されており、空白は関数で空白となっています。
>
>なんですよね?

→そのとおりです。印刷する様式と一緒のシートになります。

>
>で、実際にマクロ実行して印刷されるのが
>
>>まず、G3を4月1日にした場合、印刷されるのは、4月1日、4月2日、4月4日、4月8日、4月15日、
>>4月23日、5月2日、5月13日、5月27日、6月11日、6月27日、7月16日、8月5日、8月26日、9月17日、
>>10月10日、11月5日、12月2日、12月30日分で計19枚です。
>
>ということをいわれているんですよね?

→そのとおりです。

>
>逆に、シートのM列には 4月の日付しかないのに、5月2日 や 6月27日 や 9月17日 を、どこから
>参照しているのか、そちらが不思議なんですが?

→同じシートのA23〜E43に、G3に入力した年月日から、祝祭日や振替休日を計算した日付データが表示されるようになっています。
K6〜K36に表示された日付が、上記の日付データに該当する場合や土日に該当する場合は、M6〜M36にこれらの該当日付を除いた日付データを表示するようにしています。
つまり、土日祝祭日・振替休日を除いた営業日を表示させ、マクロで、この表示させた日付データを様式の日付として、順番に印刷させるものです。
最初の説明で、細かく書いておけば良かったです。申し訳ありませんでした。


>
>で、最初に質問したんですが、答えていただいていない点、
>G3 にいれて印刷するシートと、M列に4月の日付があるシートは同じシートなんですか?
>違うシートなんですか?
>違うシートだとした場合、マクロ実行するタイミングで、どのシートがアクティブシートになってますか?

→同じシートになります。
ちなみに、ブック上では、シートはこのシートしかありません。

何度も申し訳ありませんが、よろしくお願いします。

【73990】Re:日付を入れ替えて印刷する方法
発言  UO3  - 13/4/1(月) 16:15 -

引用なし
パスワード
   ▼かず さん:

ちょっと、【えぇ〜? マジ??】という感じですよ。

もういちど、白紙から今回説明のあった仕様をよく読んで考えてみます。

>G3を4月1日にした場合

ここを M6 を と思い込んでいたこともあったんですが、
印刷対象のものを、どこで判定するのかの説明が今回はじめてあったわけですから。
(今回の説明を読んでも疑問点はでてくるかもしれませんが)

>最初の説明で、細かく書いておけば良かったです。申し訳ありませんでした。

よかったですではなく、説明すべきでしたね。
そちらからアップされたコードでは M列以外、まったく相手にしていないですよね?
そこから、シートのほかの領域の様々なものをチェックするなんて、超能力者以外は
思いつかないですから。

【73991】Re:日付を入れ替えて印刷する方法
発言  かず  - 13/4/1(月) 17:05 -

引用なし
パスワード
   U03さん

何度も申し訳ありません。また、私の説明が不十分でした。申し訳ありません。

もう一度整理してみます。

一つのブック内にシートが一つあります。
そのシートに、様式があり、日付を入力する欄(G3)があります。
G3に年と月と月の初日を入力するとA23〜E43に祝祭日・振替休日が自動計算されます。

一方、K6〜K36には、G3で入力したデータをもとに、一月の年月日が順番に表示されます。

M6〜M36には、K列のデータがA23〜E43に載っていない場合(つまり祝祭日・振替休日に該当しない場合)は、K列のデータをそのまま表示させるようにしています。さらに、K列のデータが土日に該当する場合も表示させないようにしています。

今回のマクロでは、M6〜M36に表示された日付データの上から順番にG3に貼り付け→印刷、を繰り返して、一月分を印刷させたいというものです。

関数の部分は、マクロには関係ないと思いこみ、記載すると余計わかりずらいのかなと、勝手に思いこんでいました。
従って、おっしゃるとおり、最初から説明しておくべきでした。ご面倒をおかけして申し訳ありませんでした。

スマフォではなかなか限界がありますが、十分な内容で説明するよう心掛けます。

【73993】Re:日付を入れ替えて印刷する方法
発言  UO3  - 13/4/2(火) 15:01 -

引用なし
パスワード
   ▼かず さん:

一応、説明は読みました。
これは、まったく思いもつかなかったことですね。

まず、そちらのアップされたコードは
M6〜M36のセルで空白じゃないものを G3 にいれてますよね。

ところが、説明文では、そうではなく、
G3 に日付を入れる。(これが人間がいれるのか、別のマクロで入れるのかの説明がありませんが)
で、その結果、A23〜E43 に【何らかの日付が計算されてセットされる】

このあと、わからないのですが、K6〜K36 に表示された日付・・・
K6〜K36 については、まったく説明がないので、どんな日付が表示されるのか
わかりませんが、そこの日付によって、M6〜M36 に日付をセットする?

つまり、コードでは M6〜M36 から G3 にセット。
説明文では(途中経過は↑でコメントしたとおりわかりませんが)G3 から、結果的に M6〜M36 にセットされる?

全く逆ですよね?
何がどうなっているのか、正直わかりません。

A23〜E43 に、どんな式が入っているのか?
K6〜K36 にはどんな式が入っているのか?
M6〜M36には、どんな式が入っているのか?

そういったことがわかれば、少しは推測もできるかもしれませんが・・・

【73997】Re:日付を入れ替えて印刷する方法
お礼  かず  - 13/4/3(水) 2:07 -

引用なし
パスワード
   ▼UO3 さん
こんばんは。確認が遅くなりまして申し訳ありませんでした。

まず、連絡いただいた内容に対して説明させていただきます。

>まず、そちらのアップされたコードは
>M6〜M36のセルで空白じゃないものを G3 にいれてますよね。 
→そのとおりです。

>ところが、説明文では、そうではなく、
>G3 に日付を入れる。(これが人間がいれるのか、別のマクロで入れるのかの説明がありませんが)
→最初の段階で説明が足りませんでした。G3には、年月日の初日を人が入力します。「2014年4月1日」という感じになります。
そして、G3の日付をもとにK6〜K36に、その月の全ての年月日を関数で表示させています。これも上記同様「2014年4月1日」となります。

>で、その結果、A23〜E43 に【何らかの日付が計算されてセットされる】
>このあと、わからないのですが、K6〜K36 に表示された日付・・・
>K6〜K36 については、まったく説明がないので、どんな日付が表示されるのか
>わかりませんが、そこの日付によって、M6〜M36 に日付をセットする?
→上記の他、G3の年月日をもとに、A23〜E43でその年の祝祭日や振替休日を計算しています。なぜこんなことをしているかというと、K6〜K36だけで一月分の様式を印刷すると、不要な祝祭日や振替休日が印刷されてしまいますので、一旦、該当月の日付をK6〜K36に全て表示させ、A23〜E43で計算された祝祭日や振替休日のデータと比較をして、該当しない日付データをM6〜M36に再度表示させています。また、A23〜E43ではあくまでも祝祭日や振替休日だけの計算結果しかありませんので、土日も対象外にするため、M6〜M36の関数では、K6〜K36が土日の場合であって、さらに、A23〜E43に該当しない場合に、日付を表示させるようにしています。結果的に、M6〜M36には、土日、祝祭日、振替休日を除いた平日が表示されるようにしています。頭が悪い私なりに考えた構成になっていますが、他の方が見た場合、複雑かもしれませんね。

>つまり、コードでは M6〜M36 から G3 にセット。
>説明文では(途中経過は↑でコメントしたとおりわかりませんが)G3 から、結果的に M6〜M36 にセットされる?
→最初の説明のとおり、M6〜M36の上から順番にG3へ日付を貼り付けて、印刷していきます。例えば、M6の「2014年4月1日」をG3へ貼り付けて印刷。次にM7の「2014年4月2日」をG3へ貼り付けて印刷、というのをM36まで繰り返すつもりでコードを作っていました。ただ、そのつもりでも、まったく違う内容のコードになっていたかもしれません。
M6〜M36に計算されて表示された日付データだけをG3へ貼り付けることになりますので、K6〜K36やA23〜E43の内容は無関係と思ってました。ご指摘の内容を踏まえると、他の関連する数式も考慮する必要があるようですね。すみません、そこまで考えが足りませんでした。

>全く逆
ですよね?
>何がどうなっているのか、正直わかりません。
>
>A23〜E43 に、どんな式が入っているのか?
>K6〜K36 にはどんな式が入っているのか?
>M6〜M36には、どんな式が入っているのか?
>
>そういったことがわかれば、少しは推測もできるかもしれませんが・・・
→一番早いのは、私が作ったデータを見ていただいたほうがいいんでしょうが、、、それは色々ハードルが高そうです。
全ての数式となると少々お時間をいただきたいと思います。
特に祝祭日や振替休日の数式が複雑ですので、スマフォで入力するには、少々お時間をいただきたいと思います。

U03さん、ご多忙中にも関わらず、色々考えていただきありがとうごさいました。
色々と困っている方に手を差し伸べておられるようですのて、他の方を優先にしていただき、私の質問は一旦、凍結にしたいと思います。

これまでの説明では不十分であり、また、今回も、そして、関数を書き込みしたとしても、ご理解いただける説明ができる自信がありません。

最初教えていただいた内容は、初心者にとって本当に勉強になりました。これまでのU03さんのご厚意を無駄にするかたちになるかもしれませんが、今回は凍結して、十分な説明の準備ができた段階で、改めて、書き込みさせていただきます。
申し訳ありませんでした。

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