• 締切済み

マクロで最終行を空欄にしたいのですが、出来なくて困ってます

VBA初心者です。 仕事で、見積書を作成する際に多い時には2~3枚にわたる時で、マクロが既に組んであるのですが、最終行は空欄のはずが、2ページ目のデータが上がってきています。 どうすれば、最終行を空欄に出来るのでしょうか? このマクロが、延々と続いています。 Dim a As Integer Dim c As Integer Dim count As Integer b = 1 c = 1 count = 1 '明細1の処理 a = 1 If Sheet2.Cells(a + 3, 2) = "" Then GoTo 20 Sheet13.Cells(b + 22, 1) = count Sheet13.Cells(b + 22, 2) = Sheet2.Cells(a + 3, 3) Sheet13.Cells(b + 22, 12) = Sheet1.Cells(c + 14, 5) Sheet13.Cells(b + 22, 13) = Sheet1.Cells(c + 14, 6) Sheet13.Cells(b + 22, 17) = Sheet1.Cells(c + 14, 10) If b = 26 Then JUMP1 If b = 74 Then JUMP1 b = b + 1 c = c + 1 count = count + 1 For a = 2 To 8 If Sheet2.Cells(a + 3, 2) = "" Then GoTo 10 Sheet13.Cells(b + 22, 2) = Sheet2.Cells(a + 3, 3) If b = 26 Then JUMP1 If b = 74 Then JUMP1 b = b + 1 Next a 10 If b = 26 Then JUMP1 If b = 74 Then JUMP1 b = b + 1 初心者の為、宜しくお願い致します。

みんなの回答

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

こんばんは。 >印刷の関係で1ページ目の最終行(A48)に明細が入らないように空欄にして、2ページ目のB53に挿入したいのです。 おっしゃる意味は分かりましたが、たとえば、マクロの最終の段階で、A48 にデータがあったら、このようなマクロを付けてみるとか、いかがでしょうか?本来は、マクロを全体的に書き換えたほうがよいのですが。 If Not IsEmpty(Range("A48").Value) Then   Rows("48:52").Insert Shift:=xlDown End If

pansy819
質問者

お礼

Wendy02さま。 ありがとうございました。 仕事のデータを家に持ち帰る事を禁止されていますので、月曜日にマクロに付け足して編集してみたいと思います。 マクロを全部書き換えるには、私の技術では時間もかなり必要と思いますのが、勉強と思い挑戦してみようとは思っています。 最初の質問の時点で内容が分かりづらいながらも回答を出して頂きまして、本当にありがとうございました。 頑張って修正してみます。

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

こんにちは。 最初に、そのようなコードですと、一般的に回答はつきませんし、専門掲示板では、批判されるだけで終わってしまいます。その「Goto」 は読めません。プログラミングは経験がおありのようですが、質問になるベースの表とご説明をいただかないと、そのコードでは、ほとんど読み取れません。 >どうすれば、最終行を空欄に出来るのでしょうか? 質問も良く分かりません。 最終行は、空白のはずだけれども、その空白行を取得できていない、ということではありませんか? それと、 Sheet2.Cells(a + 3, 2) = "" こういう書き方は、非常に取得が難しいのは、インクリメンタルの増加が、3 です。 たとえば、最終行を設定したら{例:LastRow = Range("A65536").End(xlUp).Row } If LastRow > Sheet2.Cells(a + 3, 2).Row Then  '真の処理 Else  '偽の処理 End If のようなスタイルにしないと、確実性が乏しいように思います。

pansy819
質問者

お礼

早速のご回答ありがとうございます。 初めて、投稿しましたので書き方が足りずに申し訳ございませんでした。 要約した方が良いのかなと、安易な考えでしてしまって… 詳しく書きますと、 見積書の明細を別シートで最初に作ります。 明細のシートは1~10位あって、仕事によってまちまちです。 明細シートのC4~C10までに明細の仕事名が載っていて、そのC4~C10までの内容を見積書表紙シートに飛ばすのですが、飛ばした際に内容が多いと印刷の関係で1ページ目の最終行(A48)に明細が入らないように空欄にして、2ページ目のB53に挿入したいのです。 なんとか自分で直したいとは努力してみましたが、他の人が作られたプログラムなので、自分で作り直そうにも上手くいかず ここで質問させていただきました。 宜しくお願い致します。

関連するQ&A

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • マクロで塗りつぶしセルのカウント

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • VBAで空欄にデータに表示

    エクセルVBAのIFを使って、シートaのA列に値があって、B列が空欄の場合のみ、空欄のセルにシートbの値を表示させたいです。 上手くできませんでしたので、教えてください。 Sub Do文2() Dim i As Integer i = 1 If Worksheets("a").Cells(i, 2) = "" Then Do While Worksheets("a").Cells(i, 1) <> "" Worksheets("a").Cells(i, 2) = Worksheets("b").Cells(1, 1) i = i + 1 Loop End If End Sub

  • エクセルマクロでEnd Subが見つからないとでる

    Excelのマクロ記述についての質問です.  以下のマクロはエクセルにない関数「IMMULT」をあらかじめ定義するためのものです.(技術計算のHPより入手し,コピーして貼り付けたものです)  これを実行すると「End Subがみつからない」と出てしまいます.End Subは記述しているのになぜでしょうか,どなたか解決策を教えて頂けませんか! Sub 関数定義() Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If (c1 = r2) Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Sub

  • エクセル 同じ内容行削除マクロ 2

    シート1、シート2(基準)のB列を比較して同じ内容行を削除したいのですが、「栃木県3」と「#栃木県3」を同じのもと考えて削除されてしまいます。 Sub 削除()   Dim wh1     As Worksheet   Dim wh2     As Worksheet   Dim f      As Range   Dim wR     As Integer   Dim mR     As Long   Dim wStr    As String   '   Set wh1 = Worksheets("Sheet1")   Set wh2 = Worksheets("Sheet2")   wR = 0   With wh1     mR = .Cells(Rows.Count, "A").End(xlUp).Row     For wR = mR To 1 Step -1       wStr = .Cells(wR, "B")       Set f = wh2.Range("B1:B" & wh2.Cells(Rows.Count, "B").End(xlUp).Row).Find(wStr)       If Not f Is Nothing Then         .Rows(wR).Delete       End If     Next   End With End Sub 解決策教えて下さい。

  • エクセルのマクロについて

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • マクロについて質問します。

    このようなマクロがあるのですが、内容を変更したらうまく動きません。 Sub 請求明細自動印刷() Application.ScreenUpdating = False Dim I As Integer Dim リンクシート As String For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "E").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut From:=2, To:=2 End If Next I End Sub ↑の内容の ハイパーリンクセルを"E"から Dに変更したので、 ↓のように リンク先をDに変更したのですが、同じ書類が出ています (10枚 多分 If Cells(I, "A") <> 0 Thenに該当するのが10組なので・・・) Sub 請求明細自動印刷() Application.ScreenUpdating = False Dim I As Integer Dim リンクシート As String For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "D").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut From:=2, To:=2 End If Next I End Sub よくわからないのですが、どのよな形に変更するのか教えたください。 For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row これは宣言文なのですか・・・・? すみません  急いでるので 調べるより早いと思いまして お願いします。

  • マクロで教えてください。

    sheet1のA列にある図番を参照しsheet2のA列の機種名に適合する行全体に sheet1のB列にある色を塗りたいのですが、マクロを教えていただけますでしょうか? sheet2のBのセル色を塗るマクロはわかりました。↓です。 Sub macro1() Dim c As Range, myR As Variant With Sheets("Sheet2") For Each c In .Range("a2", .Cells(Rows.Count, "a").End(xlUp)) myR = Application.Match(c.Value, Sheets("sheet1").Columns(1), 0) If Not IsError(myR) Then c.Offset(, 1).Interior.ColorIndex = Sheets("sheet1").Cells(myR, "B").Interior.ColorIndex End If Next End With End Sub 上記マクロですとBセルのみ色が塗られてしまうので行全体を塗るマクロを教えてください。 よろしくお願い致します。

  • Excel マクロ 重複チェックについて

    Excel マクロ 重複チェックについて Sheet3のA列とB列に製品番号が入っています。 A列とB列を比較して、A列と同じ番号がB列に2個以上ある場合のみ C列にフラグ「1]を入れたいです。 Sub RetsuCheck() Dim i As Long Dim ws1 As Worksheet Set ws1 = Worksheets("Sheet3") '「Sheet3」シートでA列とB列の重複をチェック。 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, "A") = ws1.Cells(i, "B") Then ws1.Cells(i, "C") = 1 End If Next i End Sub 1個の場合には上記マクロで解決するのですが、 2個以上の場合にどうようなマクロを記載すればよいのか アドバイスを頂けませんでしょうか。 よろしくお願いいたします。

  • マクロでセルをランダムに並び替えたい

    マクロ初心者です。 Sheet1のB4に1、B1003に1000 というように整数が小さい順番にセルに入力してあり、 Sheet2のB4からB1003までにそれらのセルをランダムに並べ換え、 さらにそれらのセルをSheet3のB4からB1003に大きい順(B4に1000、B1003に1といったように)に並び替えたいのですが、 どうすればいいでしょうか。 Sub 並び替え() Dim RndArr(999, 0) As Variant Dim i As Integer, c As Integer Dim rndTmp As Integer Randomize i = 0 RndArr(i, 0) = Int(1000 * Rnd) + 1 Do Re: rndTmp = Int(1000 * Rnd) + 1 For c = 0 To i If rndTmp = RndArr(c, 0) Then GoTo Re Next c i = i + 1 RndArr(i, 0) = rndTmp Loop Until i > 999 Range("b4.Sheet2", "b1003.Sheet2") = RndArr End Sub 今わかっている状況は上記の通りですが、 このマクロだと、セルを並び替えているのではなく乱数を当てはめているだけなので、 整数が重複してしまいます。 よろしくお願いします。

専門家に質問してみよう