Excel2000 VBAで用紙の上半分部分のみ連続印刷する方法

このQ&Aのポイント
  • Excel2000 VBAを使用して、用紙の上半分部分のみを連続印刷する方法を教えてください。
  • 現在のコードを実行すると、シートの上半分が10枚に印刷されますが、用紙の無駄を省くために、2シートずつA4サイズに収めて5枚に印刷したいです。
  • ご教示いただけると幸いです。
回答を見る
  • ベストアンサー

再)excel2000VBAで用紙の上半分部分のみ連続印刷する

ここで教えていただいた、コードを実行したところ見事連続印刷できましたが、シートの上半分が10枚に印刷されます。10枚だと用紙がもったいないので、2シートづつA4で5枚に収めて印刷したいです。それにはどうしたらよろしいか。ご教示お願いします。 Sub TesSample() Dim mySh As Variant '請求書一括印刷 mySh = Array("AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "EEE", "FFF", "GGG") Worksheets(mySh).Select Worksheets(mySh).PrintPreview Worksheets("hyousi").Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。Wendy02です。 このマクロは、前々回からの続きのマクロを直したものです。プロテクトは、パスワードは後でつけてください。 確か、プリンタの吐き出しを制御する方法があったはずですが、今、私の所のプリンタはありませんもので、実験が出来ません。それから、これは、縮小されたものか、B4サイズの紙のようですね。そうでないと、64行までは印刷できませんから。 Sub BillsTotalPrintProc2()   '請求書一括印刷   Dim mySh As Variant   Dim i As Long   Application.ScreenUpdating = False   '請求印刷面のデータの削除   Worksheets("請求印刷 (2)").UsedRange.Clear   '開始   mySh = Array("A", "B", "C", "D", "E", "F", "G", "I", "J")   For i = LBound(mySh) To UBound(mySh)     Worksheets(mySh(i)).Unprotect 'プロテクトを外す     Worksheets(mySh(i)).Range("B2:AB32").Copy _     Worksheets("請求印刷 (2)").Cells((i + 1) + 32 * i, 1)     Worksheets(mySh(i)).Protect  'プロテクトを掛ける   Next   Application.CutCopyMode = False     Worksheets("請求印刷 (2)").PrintPreview   Application.ScreenUpdating = True   Sheets("hyousi").Select End Sub '--------------------------------- '既に設定済みの場合は、以下は入りません。行の高さ-列の幅をコピーするマクロです。 'ハングしたかと思うほど、ひじょうに時間が掛かります。すでに、セルの高さ・幅が設定されていたら、これは必要ありません。 Sub PrintPageSetting()   '印刷ページ設定   Dim myRowsData As Variant   Dim myColumnsData As Variant   Dim i As Integer   Dim j As Integer   Dim k As Integer   'コピーされたシートの数   Const SH_COUNT = 10   Application.ScreenUpdating = False   With Worksheets("A").Range("B2:AB32")    ReDim myRowsData(1 To .Rows.Count)    ReDim myColumnsData(1 To .Columns.Count)    For i = 1 To .Rows.Count      myRowsData(i) = .Cells(i, 1).RowHeight    Next    For j = 1 To .Columns.Count      myColumnsData(j) = .Cells(1, j).ColumnWidth    Next    For j = 1 To .Columns.Count      Worksheets("請求印刷 (2)").Cells(1, j).ColumnWidth _       = myColumnsData(j)    Next    For k = 1 To SH_COUNT:  For i = 1 To .Rows.Count      Worksheets("請求印刷 (2)").Cells(i + (SH_COUNT - 1) * 32, 1).RowHeight _       = myRowsData(i)      Next:  Next    End With        Application.ScreenUpdating = True End Sub

aitaine
質問者

お礼

あありがとうございました。完璧にできました。 なんとお礼をもうしていいか言葉がみつかりません。 私の質問にこんなにも労力を使っていただいて恐縮しています。ただただ感謝のきもちです。 おっしゃるとおり、自分の作ったものを見たら85%に縮小されていたので、そのように変更したらばっちりでした。これからもご指導よろしくお願いします。

関連するQ&A

  • Excel VBA サブディレクトリの取得について

    Excel VBA についての質問です。 私は、VBAの初心者です。 フォルダ選択ダイアログを開き、あるフォルダを選択させます。 選択したフォルダ配下のファイルとサブフォルダにあるファイル一覧とそのファイルのパス取得したいです。 【例】D:\TEMP\AAA フォルダを選択 D:\TEMP\AAA  D:\TEMP\AAA\BBB\CCC.txt D:\TEMP\AAA\BBB\DDD\EEE.txt D:\TEMP\AAA\BBB\DDD\FFF.txt GGG.txt が存在する。 まず、フォルダAAAまで選択されたら、 以下の結果がエクセルに出力したいです。 BBB         CCC.txt BBB\DDD        EEE.txt BBB\DDD        FFF.txt               GGG.txt うまく伝えないかもしれないですが、ご教授お願いいたします。

  • C言語による「テキストファイルの読み書き(fprintf)」について

    C言語による「テキストファイルの読み書き(fprintf)」について質問です ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。 以下のように作りました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("test.csv","r+"); fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n"); fclose(fp); return 0; } ------------------------------------------------------------ このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。) 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える) AAA,BBB,CCC,DDD,EEE 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり) 希望する動作としては コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj のようになるようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。 (使用ソフト:Borland C++ Compiler, Cpad) 参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01.html

  • EXCEL VBA 行列操作

    どなたか教えてください。 下記の様にA1からH5までの範囲に値がある行とない行があります。 空白セルを無視しA10に行列を操作し(行列入れ替え?)、さらに上詰め でコピーしたいのです(上にある行から列順に)。 よろしくお願いします。 例です  A   B   C   D   E   F  G   H 1 2                   aaa bbb 3 ccc ddd eee fff ggg 4 5 hhh ~ 10 aaa 11 bbb 12 ccc 13 ddd 14 eee 15 fff 16 ggg 17 hhh

  • VBAで特定の値がある行を連続コピーしたい

    Excel 2003 OS XP Professional SP3 VBAは自分でコードは組むことはできませんので見よう見まねでやっているレベルです。 A B C D E の列があり、行の1行目はタイトル行になっています。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111 222 333 '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444 555 '   MMM  NNN  OOO  PPP A列にカンマがある行にはB~E列に値が入力されていて、A列にカンマ以外の値が入力されている 場合にはB~Eには何も入力されていません。 A列にカンマ以外の値の時、カンマのある行のデータを次のカンマのある行までフィルハンドルをドラッグしてコピーするよう にしたいです。  A  B  C   D  E ***  ***  ***  ***  *** ’  AAA  BBB  CCC  DDD 111  AAA  BBB  CCC  DDD 222  AAA  BBB  CCC  DDD 333  AAA  BBB  CCC  DDD '   EEE  FFF  GGG  HHH '   III  JJJ  KKK  LLL 444  III  JJJ  KKK  LLL 555  III  JJJ  KKK  LLL '   MMM  NNN  OOO  PPP   sub 連続コピー() Dim r As Long Dim n As Long r = 2 n = r + 1 Do While Worksheets("sheet1").Cells(r, 1) <> "" If Worksheets("sheet1").Cells(r, 1).Value = Worksheets("sheet1").Cells(n, 1).Value Then r = n n = n + 1 Else Range(Cells(r, 2), Cells(r, 5)).Copy Range(Cells(n, 2), Cells(n, 5)) n = n + 1 End If Loop End Sub 自分なりに考えてみましたが、ぜんぜん動きません。 どなたかご教授をお願いします。

  • Perlの正規表現について

    Perlの正規表現について質問です. ■質問 aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd eee" aaa bbb ccc ddd eee "fff ggg hhh iii" というような,文字列が書かれているファイルがあるとします. ※ダブルクォーテーションが無い行もあります. ※ダブルクォーテーション内のスペースの数は,行によってそれぞれ異なります. これを,ダブルクォーテーションの中にあるスペースだけ アンダーバーに置換する場合の正規表現を教えて下さい. つまり,下記の出力にしたいです. aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd_eee" aaa bbb ccc ddd eee "fff_ggg_hhh_iii" ■条件 ※ちょっと古いPerlでも動くよう,ゼロ幅肯定/否定後読((?<),(!<))は使わないでください. ※単に実現するだけなら, # cat inputfile | print -pe 'sub f(){}(shift;s/ /_/;return $_;); s/(\".*\")/&f($1)/e;' みたいな感じで置換できそうですが,「正規表現だけで簡単に書けるかどうか」が知りたいのです(正規表現だけで実現出来る場合,そのアルゴリズムを知りたいです).そのため,関数と/eオプションは使わないでください.

    • ベストアンサー
    • Perl
  • CSVデータをツリー表示させたい

    業務で、WEBサイトにCSVデータを表示させたいと考えています。 CSVデータは、毎日更新されるもので、行数も日々変更されます。 項目の中に「レベル」という項目があり、この「レベル」の値を使って、 ツリー表示出来ないかと考えています。 希望としては、決められたフォルダに決められたファイル名で、 CSVデータを置けば、自動的にWEB上にツリー表示されるという ことです。 J-query等で、これを実現出来るプラグインが無いか探しているのですが、 なかなか希望に合うものが見つからず、困っています。 (CSVをWEB表示するものは見つかるのですが、ツリー表示出来る ものが見つかりません) 何か、良い方法があれば、ご教示頂けませんでしょうか? 例 コード  レベル 品名  規格 ・・・・    コード     レベル 品名  規格 ・・・・  1234    1   AAA   aaa       -1234       1    AAA   aaa 2345    2   BBB   bbb        ∟2345     2    BBB  bbb 3456    3   CCC   ccc          ∟3456   3    CCC  ccc 4567    3   DDD   ddd          ∟4567   3    DDD  ddd 5678    3   EEE   eee           ∟5678   3    EEE  eee 6789    4   FFF   fff             ∟6789  4    FFF   fff 7890    3   GGG  ggg           ∟7890   3    GGG  ggg

  • Excelの関数に詳しい方、お願いします。

    わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.

  • 配列の移動

    TEXTファイルに文字列を書き込んだり削除したり移動したりするプログラムを作成していますが、 aaa bbb ccc ddd eee fff ggg hhh iii このような内容を 1,aaa bbb ccc 2,ddd eee fff 3,ggg hhh iii のように上から順番に配列化して番号を指定して移動させたいのですが、 3の配列を2の上(配列1と配列2の間)や下(配列2と配列3の間)に移動するのにはどのようにしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • 抽出して並べ替えたい

    初めまして 非常に悩んでいます。 エクセルシートの列に下記のようにデータが並んでいます。(文字列) AAA bbb ccc (空白) BBB ddd eee (空白) AAA bbb ccc (空白) AAA eee ggg 並べ替え後 AAA AAA BBB bbb eee ddd ccc ggg eee 尚、列上でセル位置は任意で、空白行も任意です。(1つ以上です) できれば関数でお願いします。 VBAの場合、使用したことがないので詳しくお願いします。

専門家に質問してみよう