アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前の質問で解決できなかったので再度質問いたします。

差込印刷で、差込のフィールド数がページによって異なる場合の差込印刷はできないのでしょうか。
例えば、次のようなデータファイル(エクセル)をもとに、顧客ごとにワードで請求書を作成する場合、差込印刷を使うことはできないのでしょうか。
顧客名 商品名 数量 小計
-------------------------
A社  商品X1 10個 Y1円
A社  商品X2  5個 Y2円
B社  商品X1 12個 Y3円
B社  商品X3 22個 Y4円
B社  商品X4  8個 Y5円 

こういう使い方は結構あると思うのですが・・・
もし、差込印刷が使えなければ、他に良い方法はありますか?

エクセルのオートフィルタで表示はできますが、請求書として印刷したいのです。

他の方法としてマクロを使えばできそうですが、マクロは少し苦手です。

 WindowsXPでOffice2000を使用しています。

A 回答 (5件)

Word2000はわかりませんが、2002ではWordでもフィルターをかけられます


[差し込み印刷]ツールバー上にある[差し込み印刷の宛先]コマンドボタンをクリック
▼顧客 で「A社」を選択します。
ちなみに、(詳細)で並び替えも可能です。
手作業以外はわかりませんでした。m(_ _)m
「受注リストから請求書を印刷する方法につい」の回答画像5
    • good
    • 0

>エクセルのオートフィルタで表示はできますが、請求書として印刷したいのです。


エクセルにはフィルターオプションという機能がありますので試してみてください。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filte …
こういった感じ、顧客名が一致したデータをほかのシートに引っ張ってこれます。

ちなみに、添付のようにシートを準備して
請求書のシートの名前のタブを右クリック、コードの表示 で
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$3" Then
Sheets("売上データ").Columns("A:D").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A2:A3"), CopyToRange:=Range("B6:D6"), Unique:=False
End If
End Sub

を貼り付けて顧客名を変更してみてください

もし、罫線の処理を加えると以下の感じになります。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$3" Then
Range("B7:D" & Range("B65536").End(xlUp).Row).Select
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets("売上データ").Columns("A:D").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A2:A3"), CopyToRange:=Range("B6:D6"), Unique:=False

Range("B7:D" & Range("B65536").End(xlUp).Row).Select

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End If

End Sub
「受注リストから請求書を印刷する方法につい」の回答画像4
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。マクロを理解するために勉強してみます。

お礼日時:2011/09/25 10:09

下記はエクセルの応用として書いてます。

ワードの差込印刷は関係ない
方法です。
私なら始から終わりまでエクセルVBAで考える。しかし
VBAを出来ない人に、避けられない最小限のVBAの使用でやってみる。
記述に微妙な所があるので、頭のクリアなときにじっくり
読んで、このやり方で、そうする理由などを理解してください。
下記は、私の考え方であって、WEBや解説書では類似の記述は無いと思います。
多にも色々なやり方があるが、VBAの使用を最小限にという事で下記が
出てきました。
まず基本は指定会社のデータの抜き出しです。これを自称imogasi方式という方式で
1社分を別シートに抜き出します。このシートは納品書シートになります。
それを1社分ずつVBAで印刷します。
ーー
(1)抜き出し準備過程
例データ Sheet1 A1:D9
社名商品個数価格作業列社名
A社商品X110個100円A社
A社商品X25個150円B社
A社商品X36個60円C社
B社商品X112個360円
B社商品X322個440円
B社商品X48個240円
C社商品X512個120円1
C社商品X67個35円2
F列の社名は、データーフィルターフィルタオプションの設定で
抽出先をF1:F9に指定し、「重複するレコードは無視する」に
チェックを入れて、手操作する。
社名について、F列に、ダブリが無く漏れが無い社名が作れる。
E列の作業列は、Sheet2のB3に指定した社名と同じ行の
データに上から連番を振る。
式は F2に =IF(A2=Sheet2!$B$3,MAX($E$1:E1)+1,"")
ト入れて下方向に式を複写する。
Sheet2のB3セルがC社の場合上のようになる。
ーーー
(2)抜き出し過程
Sheet2で
納品書<--不動文字

A社御中  <--A社はプログラムでセット

社名商品個数価格 <--不動文字
A社商品X110100円
A社商品X25150円  <--関数でSheet1よりセット
A社商品X3660円







計310円  <--関数計算 計は不動文字
不動文字のところは手操作で入れておきます。
罫線、フォント種類、サイズ、表示形式などは人手の操作で設定しておく。
B6の式は =IF(ROW()-5>MAX(Sheet1!$E$1:$E$100),"",INDEX(Sheet1!$A$1:$D$100,MATCH(ROW()-5,Sheet1!$E$1:$E$100,0),COLUMN()-1))
この式を右方向にE列まで式複写。
B6:E6の式を10行分下方向に式を複写する(以上がimogasi方式)
ーーー
(3)印刷過程
標準モジュールに
Sub test01()
d = Worksheets("Sheet1").Range("F1000").End(xlUp).Row 'F列の最終行を取得
For i = 2 To d 'gai2行目からF列最終行まで毎行で繰り返し
'--Sheet1のF列からSheet2のB3セルに社名を順次1づつセット
Worksheets("Sheet2").Cells(3, "B") = Worksheets("Sheet1").Cells(i, "F")
'--Sheet2のA1:F18を印刷
Worksheets("Sheet2").Range("A1:F18").PrintOut
'--変わるセル範囲をクリア
Worksheets("Sheet2").Range("B61:E15").ClearContents
Next i
End Sub
実行すると、A社、B社、C社が1枚ずつ3枚に印刷された(確認済み)。
ーー
問題点は10社(Sheet2での想定行数)以上の明細がある場合ですが、複雑になるので
考慮してません。
--
エクセルを仕事に利用しようとすると、VBAに熟達している必要があるというのが、私の持論です。
何度質問しようと、VBAが出来ないと旨く行かない(旨い回答は出ない)と思う。勉強するしかない。
ーー
imogasi方式は、関心があれば、Googleででも「imogasi方式」で照会してください。どういう背景で出てきたものか判ります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。マクロを理解するために勉強してみます。

お礼日時:2011/09/25 10:08

回答No1です。


顧客名で絞り込むということは当然行数が変わってもよいことになりますね。
一度試験されているのでしょうか?
    • good
    • 0

差し込み印刷を設定する操作で宛先の選択ではエクセルのシートを選択するわけですがそこでは「顧客名」の項目で「A社」などと絞り込みができますので、その機能を使うことで対応することができるでしょう。

この回答への補足

ご回答ありがとうございます。顧客により、データの行数が異なるので差込では対応が難しいのでしょうか?

補足日時:2011/09/22 17:47
    • good
    • 0

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