• ベストアンサー

助けてください。印刷マクロを

OS:XPSP2,Excel2002で印刷マクロを教えてください。 "入力シ-ト"に顧客管理用で下のようなデ-タが入っています。      A列     B列   C列  2行目:受付番号   氏名   住所; ・・・・・・S(列) 3行目 80001   玉田                      80002   山田      80003   上田       ・       ・ 受付番号はすでに85000くらい(不確定)まで入力済みです。 氏名以下をデ-タとして日々入力していき作成し、件数がかなり溜まった(数百件くらい)ときに印刷をするといった仕事です。 マクロを使って、印刷したいデ-タをMsgで”最初の番号を入力”で受付番号を入れて次に同じようにMsgで”印刷最後の番号を入力”で受付番号を入れて、その間のデ-タをA列からS列まで印刷するものです。  

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

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

こんばんは。Wendy02です。 こちらも読みました。すぐに書き込めなくて、新たな質問を出させてしまい、どうもすみませんでした。日付の範囲をマクロで入れることさえ分かれば、すぐに出来たのでした。 No.2853780 の変形版です。 Sub TestSample3()   '----- 印刷範囲 列指定 ---------   Const SHNAME As String = "入力シ-ト" '  <----- シ-ト名指定   Const L_COL As Integer = 1 '"A" '  <------ 印刷範囲の左端列   Const R_COL As Integer = 19 '"S" '  <----- 印刷範囲の右端列   Const DATE_COL As Integer = 20 ' "T" ' <----- 印刷データ判定列(日付形式)   Const PREV_MODE As Integer = 1 '  <----- 0 = 直接印刷 /  1 = プレビュー   Const DT_FORMAT As String = "M月D日" '<-----印刷日の書式      Dim SearchWd1 As Variant   Dim SearchWd2 As Variant   Dim c1 As Range   Dim c2 As Range   Dim rw As Long   Dim LastCell As Range   Dim myPrintArea As Range   Dim myDate As Variant   Dim addmsg As String      myDate = Date '本日の日付   addmsg = Format$(myDate, DT_FORMAT) & "を" & vbCrLf   If MsgBox("印刷日は、" & Format$(myDate, DT_FORMAT) & "にしますがよろしいですか?", vbYesNo) = vbNo Then     Do       Application.SendKeys "{F2}"       Application.SendKeys "{HOME}"       myDate = Application.InputBox(addmsg & "変更してください。", "日付入力", _       Format$(myDate, DT_FORMAT), Type:=2)       If VarType(myDate) = vbBoolean Or myDate = "" Then Exit Sub       If IsDate(myDate) = False Then addmsg = "日付式が違います。" & vbCrLf     Loop While IsDate(myDate) = False          End If              With Worksheets(SHNAME)         If WorksheetFunction.CountA(.Range("A1").CurrentRegion) < 2 Then           MsgBox "データがありません。マクロを終了します", vbInformation: Exit Sub         End If                  SearchWd1 = Application.InputBox("最初の【受付番号】を入力してください。", "番号入力", Type:=2)         If VarType(SearchWd1) = vbBoolean Or SearchWd1 = "" Then MsgBox "終了します。": Exit Sub                  Set c1 = .Columns(L_COL).Find( _         What:=SearchWd1, _         LookIn:=xlValues, _         LookAt:=xlWhole, _         SearchOrder:=xlByColumns, _         MatchByte:=False)                  If c1 Is Nothing Then           MsgBox SearchWd1 & " は、受付番号列からは見当たりません。" & vbCrLf & _           "終了します。", vbInformation           Exit Sub         End If         SearchWd2 = Application.InputBox("最後の【受付番号】を入力してください。", "番号入力", Type:=2)         If VarType(SearchWd2) = vbBoolean Or SearchWd2 = "" Then MsgBox "終了します。": Exit Sub                  Set c2 = .Columns(L_COL).Find( _         What:=SearchWd2, _         LookIn:=xlValues, _         LookAt:=xlWhole, _         SearchOrder:=xlByColumns, _         MatchByte:=False)         If c2 Is Nothing Then           MsgBox SearchWd2 & " は、受付番号列からは見当たりません。" & vbCrLf & _           "終了します。", vbInformation           Exit Sub         End If                           Set myPrintArea = .Range(c1, c2.Offset(, R_COL - 1))           If MsgBox("'" & myPrintArea.Address & "' の受付簿の印刷を開始します。" & _             "印刷日( " & Format(myDate, DT_FORMAT) & " )は、印刷と同時に、" & Chr(DATE_COL + 64) _             & " 列に設定されます。", vbOKCancel) = vbCancel Then             Exit Sub          End If                           '日付を入力         myPrintArea.Columns(DATE_COL).Resize(, 1).NumberFormatLocal = DT_FORMAT         myPrintArea.Columns(DATE_COL).Resize(, 1).Value = myDate                  '"通知書”欄から"証券”欄までは印刷しない         .Range("K1:N1").EntireColumn.Hidden = True         .PageSetup.PrintArea = myPrintArea.Address         If PREV_MODE = 1 Then           .PrintOut Preview:=True         Else           UserForm2.Show vbModeless           DoEvents           .PrintOut Preview:=False                      Unload UserForm2           MsgBox myDate & " 印刷分を " & myPrintArea.Rows.Count & "件印刷しました。", , "印刷完了"         End If         .PageSetup.PrintArea = ""                  '印刷終了後"通知書”欄から"証券”欄まで再度表示         .Range("K1:N1").EntireColumn.Hidden = False              End With       Set c1 = Nothing: Set c2 = Nothing       Set myPrintArea = Nothing End Sub

hirosatonn
質問者

お礼

Wendy02さん いつもありがとうございます。そしてお礼が遅くなりすみません。自分のパソコンでは考えていたように出来ましたが、職場へのコピーがまだできていませんので、なんとも言えませんが多分大丈夫だろうと思います。おかしかったときはまたお願いいたします。

その他の回答 (5)

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.5

もう一つの可能性を考えてみました。 これは印刷したい範囲を選択して、選択した範囲を印刷する、という形に変えたものです。 これだと、printout 命令の対象が range から、選択範囲を意味する selection になるので、先のエラーが出ないかもしれません。 それから、印刷したい範囲の大きさが大体決まってる場合は、例えば 100行なら、 y2 = InputBox("最後の行番号", "印刷範囲の", y1+100) にすると、自動的に 100行分の数字が出ます。 Sub 印刷() y1 = InputBox("最初の行番号", "印刷範囲の", 1) y2 = InputBox("最後の行番号", "印刷範囲の", y1) Range(Cells(y1, 1), Cells(y2, 19)).select selection.printout End Sub

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.4

トラぶってるみたいですね。m(__)m まず、後からの inputbox に最初のデータが出てくるのは、意図的にそういう風にした為です。 y2 = InputBox("最後の行番号", "印刷範囲の", y1) の部分の y1 を空欄にすれば、出なくなります。 y2 = InputBox("最後の行番号", "印刷範囲の", ) こんな事をした理由は、シートの途中から印刷する場合、y1 より小さい数字だと範囲がエラーになるかな?と考えたからです。 表示されたデータが選択されているはずなので、そのまま数字を打ち込めばいいはずです。 それから、オブジェクト・・・の件ですが、Excel2000 ではちゃんと動きますので、マクロの書式が、Excel2002 で変わったのかもしれません。 私は 2002 を持ってないので、直接この回答が出来ませんが、 ツール→マクロ→新しいマクロの記録 で、マクロ記録モードにして、シートの適当な範囲を選択し、 ファイル→印刷 で「指定した部分を印刷」にチェックして、「OK」してみてください。 そして、マクロ記録ボックスの終了ボタンをクリックするか、もしくは ツール→マクロ→記録終了 をやります。 プリンタをオフにしておけば、紙は出てきませんので、プリンタマークをダブルクリックで印刷を中止できます。 そして、新しく記録されたマクロのモジュールを開いて見て、printout 部分がどういう風に記録されているか見て修正できるかもしれません。 おそらく range オブジェクトの前に何かつくのではないかと思います。 activeworkbook.sheets("sheet1").range("a1:c5") みたいな感じでしょうか。この通りなら、 activeworkbook.sheets("sheet1").Range(Cells(y1, 1), Cells(y2, 19)).printout で出来ると思います。 これでダメだったら・・・ちょっと私にはお手上げになります。m(__)m 2000 と 2002 でマクロまで変わってたんですね。(^^;

hirosatonn
質問者

補足

いろいろありがとうございます。 >ツール→マクロ→新しいマクロの記録 これでやったコ-ドは Sub Macro8() Sheets("入力シ-ト").Select Range("A2:S75").Select Selection.PrintOut Copies:=1, Collate:=True End Sub になりました。

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.3

あ~もう何やってんだか。m(__)m Sub 印刷() y1 = InputBox("最初の行番号", "印刷範囲の", 1) y2 = InputBox("最後の行番号", "印刷範囲の", y1) Range(Cells(y1, 1), Cells(y2, 19)).printout End Sub 最後の命令が、select の訳ないですよね。 printout に修正しました。 何度も失礼いたしました。m(__)m

hirosatonn
質問者

補足

myeyesonlyさん早々の回答ありがとうございます。 >Range(Cells(y1, 1), Cells(y2, 19)).printout 実行時エラ-’1004 アプリケ-ション定義またはオブジェクト定義エラ-になります。 後からのインプットボックス入力の際前の番号が残ったままですが?

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.2

すいません。 修正前のを書いてしまいました。m(__)m Sub 印刷() y1 = InputBox("最初の行番号", "印刷範囲の", 1) y2 = InputBox("最後の行番号", "印刷範囲の", y1) Range(Cells(y1, 1), Cells(y2, 19)).Select End Sub が正しいです。 msgbox ではなく、inputbox になります。

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.1

こんにちは。 以下のマクロでいかがでしょう。 sub 印刷() y1 = msgbox("最初の行番号","印刷範囲の",1) y2 = msgbox("最後の行番号","印刷範囲の",y1) range(cells(y1,1),cells(y2,19)).printout end sub Excel2000 にて動作を確認しました。 印刷用紙設定、書式、升目の幅などはあらかじめ調整しておく必要があります。 私はこういう時は、マクロをキーボードショートカットに登録しておきます。 エクセルワークシートのウィンドウから「ツール」→「マクロ」→「マクロ」のウィンドウで、該当するマクロを選択して「オプション」をクリックします。 もしくは、そのワークシートのどこかにクリップアートでも貼り付けて、右クリック→マクロを登録で、クリップアートにマクロを登録しておくのも便利です。

関連するQ&A

  • すみません。印刷マクロをもう一度

    以前印刷マクロを教えていただいたのですが、もう一度お助けください シートに下のようなデータベースがあります。  受付番号 氏名 〒 住所・・・・・印刷日(T列)  1001  1002  1003  1004    ・    ・    ・   印刷時に受付番号を入力することで印刷できるものです。 1回印刷したデ-タは次回は印刷範囲外で判断基準を印刷日とし印刷を実行した日に自動的に日付が印刷日に入力されるものをです。 たとえば、最初に受付1054までを印刷、次は受付1136までを印刷と印刷件数は不変であり、最初の時に1054までの印刷日に全て日付が入力、次は1136までの全ての印刷日に日付が入るようにです。 ご教授くださいませ。 

  • 印刷マクロを教えてください。

    マクロは初心者です。よろしくお願いいたします。 エクセルで、列AからHまでにデータを入力しています。 また、Aの1から、Aの3までは行タイトルとしています。 列A4から下の行にNo1~の順番号をいれていますが、 例えばNo20からN045までのデータ分だけを印刷したい時など、指定したNoの範囲のデータだけを印刷出来るようなマクロがあれば教えてください。 印刷Noの指定は、行番号でもかまいません。 これまでの質問で印刷関係をみてみましたが、多すぎてわかりませんでした。どなたかよろしくお願いいたします。

  • 教えて!エクセルでの印刷マクロ

    シート1に下のようなデータベースがあります。  受付番号 氏名 〒 住所    1    2    3 データを1から順に入力して、入力内容が日によって違いがあるのですが、入力した分だけ印刷できるマクロがわかりません。 前日、1から15まで入力して印刷、今日は16から50まで入力して、その分(16~50まで)を印刷(前日印刷した分は印刷しない)、次の日は50件入力(印刷は51~100まで)となるようなマクロです。 どなたか、ご教授くださいませ。 

  • excelでマクロを使用した連続印刷について

    A2セルから通し番号、氏名、住所等のデータが入力されている「データ」シートがあり、 VLOOKUPを使用してB3セルに「データ」シートのA列にある「通し番号」を 入力すると氏名・住所等が反映される「印刷」シートがあります。 例えば「データ」シートのC列(住所)に「東京都」という文字列が 含まれている宛名のみを連続で印刷したい場合、 どのようなマクロになりますでしょうか? (マクロ内に「東京都」と指定する方法と、 シート内の特定セルに入力した文字列で指定する方法が ありますでしょうか?) wordでの差し込み印刷や、宛名ソフト等の使用は考えておりません。 よろしくお願いいたします。

  • エクセルで差込印刷:マクロとVLOOKUP

    みなさん、こんにちは。 今回、マクロを作成する際にどうしてもうまくいかない部分がありまして とても困ってしまい、初めて会員登録し質問させていただいております。 皆様に御教授いただき真摯に勉強させていただきます。 どうぞよろしくお願いいたします。 (マクロ初心者で簡単なガイドブックやネットを参考に作成しています。) 今回エクセルのみを使った差込印刷のマクロを作成したいのですが、 まず、Sheet1に「5列×20行の表」があり、下記内容が入っています。 A列:行番号1~20 B列:会員番号 C列:所属名 D列:日付 E列:氏名 Sheet2に「手紙のフォーム」があり、 Sheet1の表の各項目を、VLOOKUPを使用し、 Sheet2の各位置へ差込むように設定をしました。 (VLOOKUPの検索値は、Sheet2の"R1"となるよう設定しています。) データを差し込んだSheet2の1ページを印刷したいです。 今回どうしてもうまくできないのが、手紙は毎回違う人へ違う人数分作成するので、 印刷時点で表に入力されている人の数だけを印刷したいため、 E列(氏名)が空白になったら停止する設定をしてみたのですが 下の自分で作ったマクロを実行すると、全ページが印刷されてしまいます。 Sub 差込印刷() 行 = 2 Dim 番号 As Integer For 番号 = 1 to 20 If Sheets("sheet1").Cells(行,5).Value = "" Then Exit for Sheets("sheet2").Range("R1").Value = 番号 Sheets("sheet2").PrintOut from:=1,To:=1 Next 番号 行 = 行 + 1 End Sub とても単純なミスをしているのだと思うのですが なにぶん初心者なためそれに気がつくことができません。 (For~Next等も見よう見まねで初めて使いました・・・) 月曜日までに分かるととても助かるのですが、 皆様どうぞよろしくお願いいたします。

  • マクロ vba 印刷 

    エクセルの印刷に関するマクロで教えて下さい。今ページ設定のシート設定で1~8行までを固定しています。B列の9~44行までが必要に応じて数字が入力されます。そして2ページ目の50~85行までが同じく必要に応じて数字が入力されます。3ページ目の91行~126行までが又同じく必要に応じて数字が入力されます。このように10ページまであります。つまり固定した1~8行までを見出しに下に表がずらーっとあります。ここで印刷をする際に、数字の入ったページまでを印刷するマクロを作りたいのです。普通に印刷すると10ページ印刷されてしまいます。例えば12行目まで入力があるならば、1ページだけを印刷。98行目まで入力があるならば、3ページ目までを印刷といった具合です。ちなみに途中数字が空白になる事はありません。詳しい方いらっしゃいましたら、お手数ですが教えて頂けませんでしょうか。宜しくお願いします。

  • 開始行と最終行を指定して差し込み印刷するマクロ

    エクセルのマクロで、最終行と最終行を指定して差し込み印刷するマクロをお教えください。 印刷したい個人番号のスタートと終了を指定して、数字を1ずつ増やしながら印刷する場合は、下記のマクロでうまくいきます。 「個人票」のシートを差し込み印刷します。「個人票」シートの個人番号をA8セルに入力すると別に作成した「成績表」シートからVLOOKUP関数を使って氏名や各科目の得点、合計得点を表示するようにしてあります。「個人票」シートのA3セルには「自」、B3セルには「至」、A8セルには「個人番号」と名前を付けてあります。 Sub 個人票印刷() Range("個人番号") = Range("自") Do While Range("個人番号") <= Range("至") Sheets("個人票").PrintOut Range("個人番号") = Range("個人番号") + 1 Loop End Sub 今回、行いたいのは「成績表」シートのA列にある個人番号が不連続であったり、欠番があったりします。そこで、「成績表」シートのA列の例えば、A4からA10までというように、開始行と最終行を指定して、差し込み印刷するようにしたいのです。 できれば上の構文を生かしたいのですが、ご教授のほどよろしくお願い申し上げます。

  • エクセルのマクロ

    教えてください。   A     B   C 1 部品番号  ○   済印 2 111111   ○   済 3 222222   ○   済 4 333333   ○ という表があるとします。 B列にマクロのボタンを作っておき、 A列に部品番号を入力したら、マクロのボタンを押して、 C列に済、という字を表示したいのです。 1部品入力するごとに、その表示をさせたいです。 2行目、3行目・・・と一つずつマクロを登録して いく方法は、(マクロについては詳しくないので、マクロの記録、マクロの停止、という方法しかわかりません)入力するデータが100件以上あるため、それもどうかな・・と悩んでいます。超初心者なのですが、何とか完成したいと思っています。 よろしくお願い致します。

  • マクロの連続印刷

    エクセルのシート1に情報が登録してあり、A列の番号をシート2のセルA1に入力すると情報が入る仕様のブイルックを組んでいます。 これを連続してA1,A2,A3と連続印刷したいのですがどのようなマクロを組めばよいのでしょうか?

  • excelの印刷用マクロ。

    excelで分からない事があり困っています。 横がA~I列、縦がB列のB-1から文字が入力されている最後の行までの範囲を選択して、印刷するマクロを作りたいのですが、どうすればよろしいでしょうか。印刷したいシートには、オートフィルタが掛かっている場合もあります。その場合は、その状態のまま印刷出来る様にしたいです。 どなたか分かる方が居ましたら回答お待ちしています。 よろしくお願いします。

専門家に質問してみよう