[[20210225153644]] 『マクロ コード編集』(まつこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ コード編集』(まつこ)

既に組まれているコードの編集を行っております。
下記2点がどうしても分からず質問させていただきました。

棚卸元データから雛形へ転記するものなのですが、
以前使っていたコードは品目を表示するセルに品番と品名を表示するよう
指示されているコードで、雛形が変更になったので、品番だけでよくなりました。

【質問?@】
旧雛形=1行置きに品番表示されていた
新雛形=連続して表示したい

【質問?A】
転記する雛形
旧雛形=A4セルから表示
新雛形=A6セルから表示

これらの事が解決せず困っています

使っているコードは下記の通りです。

 '----------------------------------------------------------------
 Sub データ印刷()
 '----------------------------------------------------------------
    '--- 実際のシート名にしてください。
    '---------------------------------
    '--- (1)印刷データシート名
    '---------------------------------
    Const DataSheet = "棚卸元データ"

    '---------------------------------
    '--- (2)印刷フォームシート名
    '---------------------------------
    Const PrintSheet = "(06)棚卸資産の内訳書"

    '---------------------------------
    '--- (3)印刷モード(True / False )
    '    True ・・・ 印刷
    '    False ・・・ 印刷プレビュー
    '---------------------------------
    Const doesPrint = True
    '---------------------------------

    '---------------------------------
    '--- (4)ファイル作成モード(True / False )
    '    True ・・・ 各ページのシートファイル作成をする
    '    False ・・・ 作成しない
    '---------------------------------
    Const doesMakeFile = True '// ★モード用の変数を追加
    '---------------------------------

    Dim dWS As Worksheet
    Set dWS = Worksheets(DataSheet)

    Dim pWS As Worksheet
    Set pWS = Worksheets(PrintSheet)

    Dim lastRow As Long
    lastRow = dWS.Range("A" & Rows.Count).End(xlUp).Row

    Application.Calculation = xlCalculationManual

    Dim dstWB As Workbook '//  ★ 処理用の変数を追加

    Dim pNum As Long '// 印刷ページ
    Dim pRow As Long '// 印刷元の行
    Dim dRow As Long '// 印刷先の行
    For pNum = 1 To Int((lastRow + 22) / 24)   '// データシートの印刷範囲 // データが 2行目から始まるため 23 でなく 22
        dRow = (pNum - 1) * 24 + 2 '// 2行目からデータ開始
        For pRow = 1 To 24
            pWS.Cells(pRow * 2 + 2, "A").Value = dWS.Cells(dRow, "G").Value '// 科目
            pWS.Cells(pRow * 2 + 2, "B").Value = dWS.Cells(dRow, "C").Value '// 品目
            pWS.Cells(pRow * 2 + 2, "D").Value = dWS.Cells(dRow, "F").Value '// 数量
            pWS.Cells(pRow * 2 + 2, "C").Value = dWS.Cells(dRow, "E").Value '// 単価
            If dWS.Cells(dRow, "E").Value = "" Or dWS.Cells(dRow, "F").Value = "" Then '// 期末現在高
                pWS.Cells(pRow * 2 + 2, "E").Value = ""
            Else
                pWS.Cells(pRow * 2 + 2, "E").Value = dWS.Cells(dRow, "E").Value * dWS.Cells(dRow, "F").Value
            End If
            pWS.Cells(pRow * 2 + 2, "G").Value = dWS.Cells(dRow, "A").Value '// 適用
            dRow = dRow + 1
        Next
        pWS.Range("C65").Value = pNum & "/" & Int((lastRow + 22) / 24)
        pWS.Calculate

        If doesMakeFile = True Then '// ★ファイル作成用の処理を追加
            If pNum = 1 Then '// ★ 最初のページだけシートを別ファイルにコピー
                pWS.Copy
                Set dstWB = ActiveWorkbook
                dstWB.Worksheets(1).Name = "ページ1"
                ThisWorkbook.Activate
            Else '// ★ 次ページ目からはシートを追記コピー
                dstWB.Worksheets.Add After:=dstWB.Worksheets(dstWB.Worksheets.Count)
                pWS.Cells.Copy Destination:=dstWB.Worksheets(dstWB.Worksheets.Count).Cells
                dstWB.Worksheets(dstWB.Worksheets.Count).Name = "ページ" & pNum
            End If
        Else
            If doesPrint = True Then
                pWS.PrintOut
            Else
                pWS.PrintPreview
            End If
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
 End Sub
 '----------------------------------------------------------------

何卒ご教授願います。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 コードをじぃっーと眺めたら、どの辺いじればいいか、
 なんとなくわかりませんかね。

 トライしてみればいいんじゃないでしょうか。

 分かり易いようにかなり頑張ってくれてると思いますが。
(´・ω・`) 2021/02/25(木) 16:34

 '----------------------------------------------------------------
 Sub データ印刷()
 '----------------------------------------------------------------
    '--- 実際のシート名にしてください。
    '---------------------------------
    '--- (1)印刷データシート名
    '---------------------------------
    Const DataSheet = "棚卸元データ"

    '---------------------------------
    '--- (2)印刷フォームシート名
    '---------------------------------
    Const PrintSheet = "(06)棚卸資産の内訳書"

    '---------------------------------
    '--- (3)印刷モード(True / False )
    '    True ・・・ 印刷
    '    False ・・・ 印刷プレビュー
    '---------------------------------
    Const doesPrint = True
    '---------------------------------

    '---------------------------------
    '--- (4)ファイル作成モード(True / False )
    '    True ・・・ 各ページのシートファイル作成をする
    '    False ・・・ 作成しない
    '---------------------------------
    Const doesMakeFile = True '// ★モード用の変数を追加
    '---------------------------------

    Dim dWS As Worksheet
    Set dWS = Worksheets(DataSheet)

    Dim pWS As Worksheet
    Set pWS = Worksheets(PrintSheet)

    Dim lastRow As Long
    lastRow = dWS.Range("A" & Rows.Count).End(xlUp).Row

    Application.Calculation = xlCalculationManual

    Dim dstWB As Workbook '//  ★ 処理用の変数を追加

    Dim pNum As Long '// 印刷ページ
    Dim pRow As Long '// 印刷元の行
    Dim dRow As Long '// 印刷先の行
    For pNum = 1 To Int((lastRow + 24) / 26)   '// データシートの印刷範囲 // データが 2行目から始まるため 23 でなく 22
        dRow = (pNum - 1) * 26 + 2 '// 2行目からデータ開始
        For pRow = 1 To 26
            pWS.Cells(pRow, "A").Value = dWS.Cells(dRow, "G").Value '// 科目
            pWS.Cells(pRow, "B").Value = dWS.Cells(dRow, "C").Value '// 品目
            pWS.Cells(pRow, "D").Value = dWS.Cells(dRow, "F").Value '// 数量
            pWS.Cells(pRow, "C").Value = dWS.Cells(dRow, "E").Value '// 単価
            If dWS.Cells(dRow, "E").Value = "" Or dWS.Cells(dRow, "F").Value = "" Then '// 期末現在高
                pWS.Cells(pRow, "F").Value = ""
            Else
                pWS.Cells(pRow, "E").Value = dWS.Cells(dRow, "E").Value * dWS.Cells(dRow, "F").Value
            End If
            pWS.Cells(pRow, "G").Value = dWS.Cells(dRow, "A").Value '// 適用
            dRow = dRow + 1
        Next
        pWS.Range("C65").Value = pNum & "/" & Int((lastRow + 24) / 26)
        pWS.Calculate

        If doesMakeFile = True Then '// ★ファイル作成用の処理を追加
            If pNum = 1 Then '// ★ 最初のページだけシートを別ファイルにコピー
                pWS.Copy
                Set dstWB = ActiveWorkbook
                dstWB.Worksheets(1).Name = "ページ1"
                ThisWorkbook.Activate
            Else '// ★ 次ページ目からはシートを追記コピー
                dstWB.Worksheets.Add After:=dstWB.Worksheets(dstWB.Worksheets.Count)
                pWS.Cells.Copy Destination:=dstWB.Worksheets(dstWB.Worksheets.Count).Cells
                dstWB.Worksheets(dstWB.Worksheets.Count).Name = "ページ" & pNum
            End If
        Else
            If doesPrint = True Then
                pWS.PrintOut
            Else
                pWS.PrintPreview
            End If
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
 End Sub
 '----------------------------------------------------------------

もちろんいろいろ試して眺めていますよ。
上記のように変更してみましたが、今度はA1セルから表示されるようになってしまいました。
分からないので質問しているのですが…。
ぐちゃぐちゃになる前に、的確なアドバイスが頂ければありがたいです。
(まつこ) 2021/02/25(木) 16:57


 Sub pRowの働きを学ぼう()
    Dim pRow As Long
    For pRow = 1 To 24
        MsgBox "(24回ループ)" & vbCrLf & _
               vbCrLf & _
               "pRow             は " & pRow & " です" & vbCrLf & _
               "pRow * 2 + 2 は " & pRow * 2 + 2 & " です"
    Next
    MsgBox "おしまい"
 End Sub

(めざめるパワー) 2021/02/25(木) 17:01


 かぶったけど

 元のコードが pRow * 2 + 2 
 のところを   pRow 
 に修正していますね。

 変数 pRow が 1,2,3 〜 24 と変化したとき、
 pRow * 2 + 2  は、 4,6,8 〜 50 と変化します。

 これを、pRowの増加に従って、6から始まって、6,7,8,9 〜 と変化させようとしたら、
 どのような式にすればいいとおもいますか?

 ファイナルアンサーだけが欲しいですか?
(´・ω・`) 2021/02/25(木) 17:04

pRow + 5
で6行目からスタート出来ました。
残念なのは、いろいろ試した結果出来たのですが、
具体的に理解できない状態です。
想像でしかないというか…。

とにかく、求めたい結果が導き出せました。
(まつこ) 2021/02/25(木) 17:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.