エクセルマクロに詳しい方、教えて下さい。宜しくお願いします。


下記の構文を次の様に変えたいのですが、どこを直せばよいですか?

From が R3C6
TO   が R3C9

両方が入っている場合はその間
FROMのみが入っている場合はそれ以降
TOのみが入ってる場合はその数字まで
を印刷するように変える。


Sub 一括出力()
'一括出力 Macro

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

Set PrintSheet = Worksheets("A")
Set PrintSheet = Worksheets("B")

Application.ScreenUpdating = False
Application.DisplayAlerts = False

r = 9

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

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

PrintSheet. Calculate

PrintSheet. PrintOut
Debug.Print r, DataSheet.Cells(r, 1).Vlue
r = r + 1
Else
r = r + 1
End If

Loop

.
End Sub

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

回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント60pt

最初のシートの設定が間違っているように見えますが、

どちらかは DataSheet でしょうか。


FROM がないときは、9行目から

TOがないときは B列が空白行になるまでの例です。

Sub 一括出力()
'一括出力 Macro
    Dim PrintSheet As Worksheet
    Dim DataSheet As Worksheet
    
    Set DataSheet = Worksheets("A") '★★★ どっちかはデータシート?:とりあえずAを変更
    Set PrintSheet = Worksheets("B")
    
    Dim startRow As Long
    Dim endRow As Long
    
    If IsEmpty(DataSheet.Cells(3, 6).Value) Then
        startRow = 9
    Else
        startRow = DataSheet.Cells(3, 6).Value
    End If
    
    If IsEmpty(DataSheet.Cells(3, 9).Value) Then
        endRow = DataSheet.Range("B9").End(xlDown).Row
    Else
        endRow = DataSheet.Cells(3, 9).Value
    End If
    
    Dim r As Long
    For r = startRow To endRow
        If DataSheet.Cells(r, 2).Value <> "" Then Exit For
        
        If DtaSheet.Cells(r, 1).Value >= 1 And DataSheet.Cells(r, 1).Value <> "" Then
            PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, 1).Value
            PrintSheet.Calculate
            PrintSheet.PrintOut
            Debug.Print r, DataSheet.Cells(r, 1).Vlue
        End If
    Next
End Sub
id:mokachan

早速ありがとうございます。

2008/07/05 17:55:43
  • id:Mook
    再質問見ましたが、あの文でオブジェクトエラーになる可能性がありそうなのは、
    DataSheetですが、VBE でエラー時にカーソルを当ててみたときに Nothingに
    なってませんか?
  • id:mokachan
    再質問まで見て下さりありがとうございます。
    今、試して所 おっしゃるようなNothingにはならないようです。

    下記の部分が黄色になって、ポインタを合わせるとアプリケーション定義またはオブジェクト定義エラーになってしまうんです。

    endRow = DataSheet.Range("A9").End(xlDwon).Row


    宜しくお願いします。。
  • id:mokachan
    Mook様

    ご返信が大変おそくなって申し訳ありません。
    印刷枚数の表示について、教えて頂いた事を色々試して
    みたのですが、やっぱりうまくいきませんでした。
    原始的な方法ですが、To から from を引いて1を+して
    そのセルを呼んでくるという形にしてしまいました。
    時間をみてまた何とかやってみたいと思います。

    ご面倒をお掛けしてすみませんでした。
  • id:Mook
    どのような状況なのでしょうか。

    ご覧になっていただけなかったようですが、この後にされた質問に対策の回答をしました。
    興味があれば、御覧ください。

    マクロを詳しくご存じないようですが、お仕事で使用されるつもりであれば、徐々にでも
    よいので理解し、簡単な変更程度はご自身でできるレベルまで、修得された方が良いように
    思います。

    まずは、ステップ実行やデバッグ方法を習得されてはどうかと思います。
    http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
  • id:mokachan
    Mookさん

    アドバイスありがとうございます。
    おかげさまで最近では既存のマクロを別のブックで動かすように変えたりする事は出来るようになりました。
    基本が出来ていないので、本を何冊か買ってはみましたが、誰かが作った複雑なマクロを解読して編集するには時間がかかりそうです。
    仕事では期限が切られてしまうので、またはてなでご質問させて頂く事があるかも知れませんが、お時間あったら知識をお貸し下さい。

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

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

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

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