[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ コード編集』(まつこ)
既に組まれているコードの編集を行っております。
下記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
とにかく、求めたい結果が導き出せました。
(まつこ) 2021/02/25(木) 17:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.