プロが教えるわが家の防犯対策術!

エクセルマクロで封筒宛名印刷しています。

もともと良く分かってない上に
10年ぶりくらいにマクロを触って悪戦苦闘しているところです。

現状は3シートを作成し
「印刷」「名簿」「封筒雛型」と
名称を付けております。

印刷シートに 印刷開始番号 印刷終了番号を入力して
封筒宛名印刷しています。

ネットで調べて現状は以下の内容になっています。

Sub 印刷実行()
Dim PrintNB, EndNB, FormStyle
Application.ScreenUpdating = False
Worksheets("名簿").Select
PrintNB = Range("印刷!C10").Value
EndNB = Range("印刷!C11").Value
Worksheets("封筒雛型").Select
Do Until PrintNB > EndNB
Range("A2").Value = PrintNB
ActiveWindow.SelectedSheets.PrintOut
PrintNB = PrintNB + 1
Loop
Worksheets("名簿").Select
Application.ScreenUpdating = True
End Sub

ここからが教えてほしい内容なのですが、
封筒雛型シートと
名簿シートを増やし、
印刷シート上でドロップダウンリストから 封筒印刷雛型シートや名簿シートを選択し
封筒宛名印刷したいのです。

更に 印刷シートに 印刷開始番号 印刷終了番号入力し、印刷する方法ではなく
名簿シート上で 例えばF列に印刷実行チェックマーク(たとえば数字の1)を入力することで
印刷したいのです。(この部分は最初に挫折しました。)

理解が足りないようなので具体的に教えていただけると助かります。

確認は明日になりますが
宜しくお願い致します。

A 回答 (4件)

#3の回答者です。


その後、どのような運びになっているのでしょうか?
このままですと、ここのルールでは、後2日ほどで閉じられてしまいます。

何か問題があれば相談には乗りますが、ここをそのまま放置してしまうと、次に続かなくなってしまいます。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
夏季休暇の前の仕事に追われていて
あまり時間が取れない状態です。

技術的にかなり背伸びをしているので
時間があるときにゆっくり確認します。

その節はよろしくお願いいたします。

お礼日時:2015/08/03 10:57

こんにちは。



>前記ソースで300~500件ほどの名簿を連続印刷しています。
>名簿A列で印刷用番号を設定しているのですが

ということは、お仕事でされているわけですよね。ただ、これだけの量になると、生半可なものでは済まされないような気がしました。

話だけでは、ほとんどイメージは伝わってきませんので、こちらから、一方的にポイントだけを拾い上げて、マクロを作ってみました。お役に立てるのかは、私としてはなんとも言えません。

添付画像である程度分かるとは思いますが、
封筒宛名の郵便番号の部分の数式がややこしいです。
C4: =MID($U$4,1,1), E4:=MID($U$4,2,1), G4:=MID($U$4,3,1),I4:=MID($U$4,4,1)
K4: =MID($U$4,5,1), M4:=MID($U$4,6,1),O4: =MID($U$4,7,1)
----------------------------------------
U4: ==VLOOKUP(R4,名簿リスト1,5,0)

以下のマクロは、Escapeキーで、途中で止められるはずです。その時に、ブックの下側の左隅(ステータスバー)に、現在の印刷していた所が残ります。ピタリと納まるようには、作られておりませんので、試し刷りと調整が必要です。参考にした所は、
http://excel-magic.com/post-61/
です。

'//
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Sub 印刷トライ()
'No. 9026999
 Dim ws1 As Worksheet
 Dim cmb As Object 'ComboBox
 Dim chk As Object 'CheckBox
 Dim prtWs As Worksheet
 Dim ListName As String
 Dim ListNos() As Variant
 Dim i As Long, v As Variant
 Dim Rng As Range
 Dim c As Range, j As Long, k As Long
 Dim fml As String
 On Error GoTo ErrHandler
 Set cmb = Worksheets("印刷トライ").ComboBox1
 Set chk = Worksheets("印刷トライ").CheckBox1
 Set prtWs = Worksheets("封筒宛名")
 ListName = cmb.Value
 Application.StatusBar = ""
 If ListName = "" Then
  MsgBox "名簿が選択されていません。", vbExclamation
  Exit Sub
 Else
  If MsgBox(ListName & "を元に宛名を印刷します。", vbOKCancel) = vbCancel Then
   Exit Sub
  End If
 End If
 With Worksheets(ListName)
  For Each c In .Range("H7", .Cells(Rows.Count, "H").End(xlUp))
   ReDim Preserve ListNos(i)
   If IsNumeric(c.Value) And c.Value <> "" Then
    ListNos(i) = .Cells(c.Row, 1).Value
    i = i + 1
   End If
  Next c
 End With
 On Error Resume Next
 Set Rng = prtWs.UsedRange.SpecialCells(xlCellTypeFormulas)
 For Each c In Rng.Cells
  fml = c.FormulaLocal
  j = InStr(1, fml, "名簿リスト")
  If j > 0 Then
   k = InStr(j, fml, ",")
   c.FormulaLocal = Mid(fml, 1, j - 1) & ListName & Mid(fml, k)
  End If
 Next c
 On Error GoTo 0
 
 For Each v In ListNos
  If v <> "" Then
   prtWs.Range("R4").Value = v
   prtWs.Calculate
   DoEvents
    prtWs.PrintOut , Preview:=chk.Value
   Application.StatusBar = ListName & ": " & v & "番目"
   'この待ち時間は、適当に調整してください。1000=1秒
   Sleep 1000
  End If
 Next v
ErrHandler:
 If Err() <> 0 Then
   MsgBox "Error " & Err.Number & ": " & Err.Description
 End If
 Application.StatusBar = ""
End Sub
'///

このサンプル・ブックは、何の問題もなければ、しばらく公開します。パスワードは、このスレの7桁のLog番号です。Excel 2010 で作成されたマクロ搭載ブックです。
http://fast-uploader.com/file/6993164730740/
「エクセルマクロ 封筒宛名印刷」の回答画像3
    • good
    • 0

マニュアル本に、初級・中級・応用編が売られています。


エクセルでややこしいマクロを使うより、「筆まめ」の様な宛名書きソフトの方が多用が有ります。
乗り換え版も有りますので安く手に入ります。
メーカー製PCでは、富士ソフトの「筆ぐるめ」が良くインストールされています。
私の自慢は、エクセルは苦手です。
殆どは、ワードで処理します。
OASYSの名残です。
エクセルは、リストと表計算を作る程度です。
たまには、納品書・請求書等です。
回答にはなっていませんが、許してください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

型にはまったものになかなか合わないので
エクセルマクロでがんばることにしました。

最初はきついですが
後々の作業効率を優先 心がおれそうですが頑張ります♪

お礼日時:2015/07/23 12:52

今のところ、どうも分からない所があります。



>印刷シート上でドロップダウンリストから 封筒印刷雛型シートや名簿シートを選択し封筒宛名印刷したいのです。

これを、ドロップダウンリストを使う?
ComboBox ではありませんか?

>印刷シートに 印刷開始番号 印刷終了番号入力し、印刷する方法ではなく
>F列に印刷実行チェックマーク(たとえば数字の1)を入力することで
>印刷したいのです。(この部分は最初に挫折しました。)

よく意味が分からないです。数字の1 で、印刷を実行させるのですか?
印刷開始番号とか、印刷終了番号とか、特に必要性が見られません。宛名そのものは、それぞれが変わるはずですが、そのようなコードも見当たりません。

一体どのようにしたら良いのか、今のところ、こちらでは手が付けられません。

>ActiveWindow.SelectedSheets.PrintOut
それに、同じものを何度も印刷するのですか?もし、そうなら、これ自体は、マクロは必要ないと思いますが。どのようにしていくか、言葉で説明をしていただいたほうが分かりやすい気がします。

私も数年のブランクはありますが、最近、やっと、勘が戻りつつあるところです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
空いた時間をみていろいろ調べてチャレンジしてますが
やはりうまくいきません^^;

現在は
エクセル数式で名簿を封筒宛名に挿入し
前記ソースで300~500件ほどの名簿を連続印刷しています。
名簿A列で印刷用番号を設定しているのですが
印刷番号が連番でない場合 その都度 印刷設定をしなくてはならないので
印刷チェックマークで印刷は できたらいいな。。程度です。  

>ComboBox ではありませんか?
申し訳ないです 調べてみたのですが
ComboBoxとドロップダウンリストの違いがよくわかりません^^;
ようは あらかじめ用意した封筒ひな形名や名簿名を簡単に選択できるものです。

現状は(といてってもやり始めて間もないですが)
名簿ごと、 印刷用のひな形ごとに ファイルがあるため
1つのファイルに名簿シートを増設、封筒のひな形(はがき、封筒)を増設し、一括で管理したいとやり始めた次第です。
(一括にまとめるのがメイン)
現状では特定の名簿シート 特定の封筒ひな形 に対応するのでやっとこです。

表現がうまくいかず伝わりにくかもしれませんが
何卒よろしくお願いいたします。

お礼日時:2015/07/22 11:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!