Excel VBA質問箱 IV

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

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


1382 / 13646 ツリー ←次へ | 前へ→

【74784】ページごとにクラスABC…を まこと 13/9/15(日) 13:01 質問[未読]
【74785】Re:ページごとにクラスABC…を まこと 13/9/15(日) 15:53 発言[未読]
【74787】Re:ページごとにクラスABC…を γ 13/9/15(日) 16:00 発言[未読]
【74788】Re:ページごとにクラスABC…を γ 13/9/15(日) 23:32 発言[未読]
【74789】Re:ページごとにクラスABC…を まこと 13/9/16(月) 7:19 質問[未読]
【74790】Re:ページごとにクラスABC…を γ 13/9/16(月) 8:29 発言[未読]
【74791】Re:ページごとにクラスABC…を 13/9/16(月) 9:29 発言[未読]
【74792】Re:ページごとにクラスABC…を 13/9/16(月) 10:06 発言[未読]
【74794】Re:ページごとにクラスABC…を まこと 13/9/16(月) 13:23 発言[未読]
【74796】Re:ページごとにクラスABC…を 13/9/16(月) 15:13 発言[未読]
【74800】Re:ページごとにクラスABC…を γ 13/9/17(火) 22:16 発言[未読]

【74784】ページごとにクラスABC…を
質問  まこと  - 13/9/15(日) 13:01 -

引用なし
パスワード
   お世話になります。
ヘッダ設定でページごとにページ番号を1,2,3,…と入れる設定はありますが、では、ページごとに、(たとえば1ページ目のヘッダにはA組、2ページ目のヘッダにはB組、3ページ目のヘッダにはC組… G組まであります。)というように、ページごとにクラス(組)をうつようにするにはどうすれば良いのでしょうか?
関数=UPPER(CHAR(ページ番号+96))で数字をアルファベットに変換するところまでは思いつくのですが、そこから先で行き詰まってしまいます。
皆様のお知恵をお貸し下さい。よろしく御願い致します。

【74785】Re:ページごとにクラスABC…を
発言  まこと  - 13/9/15(日) 15:53 -

引用なし
パスワード
   追記:Verは2003です。よろしく御願いいたします。

【74787】Re:ページごとにクラスABC…を
発言  γ  - 13/9/15(日) 16:00 -

引用なし
パスワード
   ページ数などは特別で、それと同じように
配列を与えて各ページにそれぞれの要素を書き付ける、
といった機構は用意されていないと思います。

したがって、
・印刷を一ページ単位に行い、(From, Toの指定)
・ページ設定でその都度、ヘッダーを書き換える
しかないんじゃないでしょうか。

【74788】Re:ページごとにクラスABC…を
発言  γ  - 13/9/15(日) 23:32 -

引用なし
パスワード
   VBAではこんなふうに書きますね。
s = UCase(Chr(ページ + 96))
ヘッダーの設定方法は、マクロ記録をとればわかります。

【74789】Re:ページごとにクラスABC…を
質問  まこと  - 13/9/16(月) 7:19 -

引用なし
パスワード
   γ さん 返信ありがとうございます。
アドバイスのとおり、下記のように、マクロの記録をとってみました。
タイトルとして3行から5行までをタイトル行として、ヘッダの右側に
ページ番号が現れようになっている(.RightHeader = "" &P")ことは
理解できるのですが、お教えいただいた

s = UCase(Chr(ページ + 96))

この s をどういう風にコードに組み込んだらよいのでしょうか。
$A$6:$AQ$290の範囲が上から7等分されてクラスごと(ABCDEFG組)に改ページ
されるようになっています。

お時間があるときにお教えいただいたらありがたいです。

'ヘッダ作成

  With ActiveSheet.PageSetup
    .PrintTitleRows = "$3:$5"
    .PrintTitleColumns = ""
  End With
  ActiveSheet.PageSetup.PrintArea = "$A$6:$AQ$290"
  With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = "" &P"
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlLandscape
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .OddAndEvenPagesHeaderFooter = False
    .DifferentFirstPageHeaderFooter = False
    .ScaleWithDocHeaderFooter = True
    .AlignMarginsHeaderFooter = False
    .EvenPage.LeftHeader.Text = ""
    .EvenPage.CenterHeader.Text = ""
    .EvenPage.RightHeader.Text = ""
    .EvenPage.LeftFooter.Text = ""
    .EvenPage.CenterFooter.Text = ""
    .EvenPage.RightFooter.Text = ""
    .FirstPage.LeftHeader.Text = ""
    .FirstPage.CenterHeader.Text = ""
    .FirstPage.RightHeader.Text = ""
    .FirstPage.LeftFooter.Text = ""
    .FirstPage.CenterFooter.Text = ""
    .FirstPage.RightFooter.Text = ""

【74790】Re:ページごとにクラスABC…を
発言  γ  - 13/9/16(月) 8:29 -

引用なし
パスワード
   Sub test()
  Dim k As Long
  For k = 1 To 3
    ActiveSheet.PageSetup.RightHeader = UCase(Chr(k + 96))
   ''ActiveSheet.PrintOut From:=k, To:=k
    ActiveSheet.PrintPreview
  Next
End Sub
ということでしょうか?
上記で指定していないRightHeaderプロパティ以外は、
前のものが残るはずですから、予め一回設定しておけばいいでしょう。

【74791】Re:ページごとにクラスABC…を
発言    - 13/9/16(月) 9:29 -

引用なし
パスワード
   こんにちは。横から失礼します。

マクロの記録は、おうおうにして
自分では記録の指示を出したつもりのないコトまで記録されます。

ま、エクセル君にしてみれば「まことさんの意図までは分からない。
ダイアログボックスに OK が押された時点での内容どおりに記録する」
ということなのでしょうが、

うっとうしいので、不要な部分はばっさり消してしまいましょう。

(ほかのシートに、このマクロを当てはめることがないなら、
記録されたままでも実害はありません。
このままにしておいてもどうということはありませんが、
・あとでコードを読むとき、どこがポイントなのか分からない
・不要な項目も、処理には時間がかかる
不要な部分は消してしまうのが、得策です。)


>この s をどういう風にコードに組み込んだらよいのでしょうか。
    .RightHeader = s & "組"
なんですけど...分かりますか?

あ、ABCが本当にABCであることが前提です。
ABCというのがじつはもののたとえで、実際はうめ組 さくら組 もも組
とかだと話が違ってきます。

【74792】Re:ページごとにクラスABC…を
発言    - 13/9/16(月) 10:06 -

引用なし
パスワード
   こんにちは。
たびたび失礼します。

>    .RightHeader = "" &P"

じつはこれが不思議で。
どういう操作を記録すればこういうコードになるか想像ができず
いろいろ記録してみたのですが、どうにも分からず
思いあまって、まことさんのコードをそのままVBEにコピペしてみたら、
コンパイルエラーになりました(ーー;
こういうのは記録されたコードそのままを出していただかないと。


がんばって試行錯誤されたんだろうなと思います。
頑張ってないひとは、こんなコードになりませんからね^^

で、こういうときは、こんなコードが記録されたので、こんな風に考えて
こんなことを試したが、現在こんな状況だ、みたいな説明をしていただくと
それも踏まえて回答ができるので、解決が早くなる(はず)です。


ということで、そもそもの疑問なのですが、「&P」はなにがなさりたかったのですか?

【74794】Re:ページごとにクラスABC…を
発言  まこと  - 13/9/16(月) 13:23 -

引用なし
パスワード
   γさん、コードのご提示ありがとうございました。
ご呈示されたコードを参考に頑張って見ます。

佳さん。ご返事ありがとうございます。
申し訳ありません。

正確には
.RightHeader = " &P" です。
もともと、マクロをそのまま記録して
.RightHeader = "" & Chr(10) & "PAGE&""MS Pゴシック,標準"" &""Arial,標準""&P"

だったのですが、フォント等の情報を削除しようとするときに「"」を一つ
削除し忘れていました。
本にのっていた &P  ←ページ番号を印刷する書式コードを参考にしました。

【74796】Re:ページごとにクラスABC…を
発言    - 13/9/16(月) 15:13 -

引用なし
パスワード
   こんにちは。

ご希望を実現するためのコードの組み立ては、

まずヘッダーにAと入れて1ページ目を印刷
次にヘッダーにBと入れて2ページ目を印刷
次にヘッダーにCと入れて3ページ目を印刷
    :
    :
ということになります。


最初にページごとに違うヘッダーを入れておいて、一括で印刷
はできないのです。


いえ、なんとなく、もう一度、念を押すほうが良いような気がしまして。
>もともと、マクロをそのまま記録して
>.RightHeader = "" & Chr(10) & "PAGE&""MS Pゴシック,標準"" &""Arial,標準""&P"

【74800】Re:ページごとにクラスABC…を
発言  γ  - 13/9/17(火) 22:16 -

引用なし
パスワード
   Sub test()
  Dim k As Long
  For k = 1 To 8
    ActiveSheet.PageSetup.RightHeader = UCase(Chr(k + 96))
    ActiveSheet.PrintOut From:=k, To:=k
  Next
End Sub
これを実行したらどうなりますか?

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