【エクセルマクロ】に詳しい方教えて下さい。


以下のマクロを
印刷用シートの AV1 を検索値 として
データシートの D列には関数が入っていてある条件にあったセルに正の整数が返る様になっています。
データシートの A列には1から順番に数字が入っています。


データシートのD列に数字が入っているレコードのA列の番号を印刷用シートのAV1に順番に入れて印刷してD列の全てが印刷出来るようにしたいと思っています。

このマクロのどの部分を直せばいいか教えて下さい。宜しくお願いします。


Option Explicit
Option Base 0

Sub test()

Dim PrintSheet As Worksheet
Dim DataSheet As Worksheet
Dim r As Long

Set PrintSheet = Worksheets("印刷用シート")
Set DataSheet = Worksheets("データシート")

r = 2

Do While DataSheet.Cells(r, 1).Value <> ""
If DataSheet.Cells(r, 2).Value => 1 Then

PrintSheet.Cells(1, 1).Value = DataSheet.Cells(r, 1).Value

PrintSheet.Calculate

PrintSheet.PrintOut
End If
r = r + 1
Loop

End Sub

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/06 19:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント35pt

とりあえず

If DataSheet.Cells(r, 2).Value => 1 Then

PrintSheet.Cells(1, 1).Value = DataSheet.Cells(r, 1).Value

のところはD列と、AV1ということで

If DataSheet.Cells(r, 4).Value => 1 Then

PrintSheet.Cells(1, 48).Value = DataSheet.Cells(r, 1).Value
id:mokachan

回答ありがとうございます。

実は、ご指摘の内容は実証してみたんです。

でも1枚印刷するだけで後が印刷出来ないんです。

2008/01/30 20:51:22
id:devichan No.2

回答回数56ベストアンサー獲得回数4

ポイント35pt

こんなやり方も、あるという事で、みてください。

これは、cellじゃなくRangeで指定する場合です。

(sortとか貼り付けの例としてみてください)

(随分前に作ったものを引っ張り出しているので、まちがいがあるかもしれません)

Sub test()

Dim PrintSheet As Worksheet

Dim DataSheet As Worksheet

Dim r As Long

Set PrintSheet = Worksheets("印刷用シート")

Set DataSheet = Worksheets("データシート")

r = 1
'D列で sort
  DataSheet.Select
  Range("A1").Select
  Range("a1").Activate
  Selection.End(xlToLeft).Select
  Selection.End(xlUp).Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlToRight)).Select
  Application.CutCopyMode = False
  Selection.sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("AD2" _
    ), Order2:=xlAscending, Key3:=Range("M2"), Order3:=xlAscending, Header _
     :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
    , SortMethod:=xlPinYin
  Range("A1").Select
  Range("a1").Activate
'データ量抽出 参考
'   DataSheet.Select
'   Range("A1").Select
'   Range("a1").Activate
'   Selection.End(xlToLeft).Select
'   Selection.End(xlDown).Select
'          Selection.Rows.Row ←この時の、この値が最終行
' おまじない
  PrintSheet.Select

Do While DataSheet.Range("d" & r ).Value <> ""

If DataSheet.Range("d" & r ).Value >= 1 Then

'データの値のみコピー(セル値=式としてはコピーしません)

DataSheet.Range("a" & r).Copy

PrintSheet.Range("AV1").PasteSpecial Paste:=xlPasteValues, _

Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'一応コメント
' PrintSheet.Calculate

PrintSheet.PrintOut

End If

r = r + 1

Loop

End Sub


'プリンタの選択例

' Application.ActivePrinter = "プリンターです on Ne01:"

'プリンタのセットアップ例

Sub prt_set()

With ActiveSheet.PageSetup

.LeftHeader = ""

.CenterHeader = "&18&Uヘッダータイトル等"

.RightHeader = "" & Chr(10) & " &P頁"

.LeftFooter = ""

.CenterFooter = ""

.RightFooter = ""

.LeftMargin = Application.InchesToPoints(0.68)

.RightMargin = Application.InchesToPoints(0.43)

.TopMargin = Application.InchesToPoints(1.10236220472441)

.BottomMargin = Application.InchesToPoints(0.62)

.HeaderMargin = Application.InchesToPoints(0.78740157480315)

.FooterMargin = Application.InchesToPoints(0.393700787401575)

.PrintHeadings = False

.PrintGridlines = False

.PrintComments = xlPrintNoComments

.CenterHorizontally = False

.CenterVertically = False

.Orientation = xlLandscape

.Draft = False

.PaperSize = xlPaperA4

.FirstPageNumber = xlAutomatic

.Order = xlDownThenOver

.BlackAndWhite = False

.Zoom = 92

' ↓エラーになるのでコメント

' .PrintErrors = xlPrintErrorsDisplayed

End With

ActiveWindow.SelectedSheets.PrintPreview

End Sub

id:mokachan

いろいろありがとうございました。

後でじっくり試してみたいと思います。

2008/01/31 19:16:01
  • id:arhbwastrh
    データシートのD列にはどんな風に数字が入ってるんですか?
    例えば・・1行目は3 2行目は空欄 3行目は・・みたいな。
  • id:mokachan
    早速コメントを頂きありがとうございます。

    えっと・・・・D列には

    =if(counta(P7:T7)=0,"",1+MAX($d$5:$d$6))

    と関数が入っており、 値が返ったセルに上から順番に
    1.2.3・・・と入るようです(私が作ったシートではないので良く分かりません。)

    このD列に値が返ったデータを印刷シートの検索値として使用して
    VLOOKUPを使って書類を作成したいのです。

    検索値に入れるのはデータシートのD列に数字のあるレコードの
    A列を使っているんです。



    どうぞ 宜しくお願いします。
  • id:SALINGER
    A列には順番に数字が入っているとありますが途中に空白がありませんか?
    このコードでは2行目から調べて、空白が出るまでを印刷するようになっています。
    それから、VBAでは => ではなく >= を使います。
  • id:devichan
    なんだか、やりたいことがみえているような、わかりづらいようなです。
    意図をはき違えていたらごめんなさい。

    印刷用のシートで再計算されていますが、印刷用のシート内に、その値を参照されていということですか?
    たぶん必要ないかとも思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません