重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【データシート】
   A    B    C    D    E      F    G    H    I    J    K
1 氏名NO 氏名  支部  年度  調査日  品名NO  品名  7月    8月  9月  10月
2  1   田中  東京  2017  10/25  100  りんご  100   0    30   50
3  1   田中  東京  2017  10/25  101  みかん  100   0    30   50
4  1   田中  東京  2017  10/25  100  りんご  50   0    30   50
5  2   佐藤  大阪  2017  10/25  100  りんご  100   0    30   50
6  2   佐藤  大阪  2017  10/25  103   なし  100   0    30   50
7  3   山田  福岡  2017  10/25  100  りんご  100   0    30   50
8  4   鈴木  沖縄  2017  10/25  101  みかん  100   0    30   50
9  4   鈴木  沖縄  2017  10/25  102   もも  100   0    30   50 
【テンプレートシート】
   A    B    C    D    E      F    G    H    I  
1  2017     10/25 
2   
3  1   田中       東京
4 
5  品名  計   7月   8月   9月   10月  ※この行はテンプレートに固定
6  100
7  りんご 180  100   空白  30    50
6  101
7  みかん 180  100   空白  30    50
6  100
7  りんご 130   50  空白  30    50
8  空白  空白  空白  空白  空白  空白     
9  空白  空白  空白  空白  空白  空白
10  空白  空白  空白  空白  空白  空白
11  空白  空白  空白  空白  空白  空白
12  空白  空白  空白  空白  空白  空白
13  空白  空白  空白  空白  空白  空白
14  空白  空白  空白  空白  空白  空白
15  空白  空白  空白  空白  空白  空白
16  空白  空白  空白  空白  空白  空白
17  空白  空白  空白  空白  空白  空白
18  空白  空白  空白  空白  空白  空白
19  空白  空白  空白  空白  空白  空白
20  空白  空白  空白  空白  空白  空白
21  空白  空白  空白  空白  空白  空白
上記は田中のテンプレートです。
ここで次の佐藤のデータを上記の規則に沿って作成以下ループする。
テンプレートデータが22行目から次ページみたいな感じで作りたいです。
ポイントは同じ品名が複数あっても一行にまとめて集計しないで全て表示したいことです。
どなたかご教授頂けないでしょうか?
宜しくお願いします。

A 回答 (3件)

No.2です。


実際にやってみたのですね。
では、作成してみましたので、参考にしてください。
下記のsbTest()で実行できます。

Option Explicit

Dim shData As Worksheet
Dim shTemp As Worksheet
Dim dataRow As Long
Dim tempRow As Long
'一人当たりの最大行数
Const MAX_ROW = 22

Sub sbTest()
Dim sNo As String
Dim iKei As Long
Dim iCnt As Long

Set shData = Worksheets("データ")
Set shTemp = Worksheets("テンプレート")

dataRow = 2 'データシートの開始行
tempRow = 1 'テンプレートシートの開始行

'氏名NOを取得
sNo = shData.Cells(dataRow, 1)

'氏名NOがNULLになるまでループ
Do Until sNo = ""
'ヘッダーの設定
Call sbHeader
iCnt = 5

'氏名NOが変わるまでループ
Do Until shData.Cells(dataRow, 1) <> sNo
With shData
iKei = 0
'品名NO
shTemp.Cells(tempRow, 1) = .Cells(dataRow, 6)
tempRow = tempRow + 1
'品名
shTemp.Cells(tempRow, 1) = .Cells(dataRow, 7)
'7月
shTemp.Cells(tempRow, 3) = fnTsuki(.Cells(dataRow, 8), iKei)
'8月
shTemp.Cells(tempRow, 4) = fnTsuki(.Cells(dataRow, 9), iKei)
'9月
shTemp.Cells(tempRow, 5) = fnTsuki(.Cells(dataRow, 10), iKei)
'10月
shTemp.Cells(tempRow, 6) = fnTsuki(.Cells(dataRow, 11), iKei)
End With
'計
shTemp.Cells(tempRow, 2) = iKei
tempRow = tempRow + 1
iCnt = iCnt + 2
'次の行へ
dataRow = dataRow + 1
Loop

'一人当たりの最大行数まで
If iCnt < MAX_ROW Then
tempRow = tempRow + (MAX_ROW - iCnt)
End If

'氏名NOをセット
sNo = shData.Cells(dataRow, 1)
Loop

MsgBox "終了"
End Sub

Private Sub sbHeader()
'年度
shTemp.Cells(tempRow, 1) = shData.Cells(dataRow, 4)
'調査日
With shTemp.Cells(tempRow, 3)
.Value = shData.Cells(dataRow, 5)
.NumberFormatLocal = "m/d"
End With
tempRow = tempRow + 2
'氏名NO
shTemp.Cells(tempRow, 1) = shData.Cells(dataRow, 1)
'氏名
shTemp.Cells(tempRow, 2) = shData.Cells(dataRow, 2)
'支部
shTemp.Cells(tempRow, 4) = shData.Cells(dataRow, 3)
tempRow = tempRow + 2
'固定行
shTemp.Cells(tempRow, 1) = "品名"
shTemp.Cells(tempRow, 2) = "計"
shTemp.Cells(tempRow, 3) = "7月"
shTemp.Cells(tempRow, 4) = "8月"
shTemp.Cells(tempRow, 5) = "9月"
shTemp.Cells(tempRow, 6) = "10月"
tempRow = tempRow + 1
End Sub

'各月の数量がゼロのときは空欄にする
Function fnTsuki(kazu As Long, iKei As Long) As Variant
If kazu = 0 Then
fnTsuki = ""
Else
iKei = iKei + kazu
fnTsuki = kazu
End If
End Function
    • good
    • 1
この回答へのお礼

ありがとうございます。
諦めていたのでメール確認するのが遅くなりお礼をするのが遅くなりました。
1週間前からいろいろな教材を参考にしながら試行錯誤していたのですが
なかなか思い通りにいかず困っていたので投稿させていただきました。
mike32様の記述を元にアレンジを加えながら実行した結果見事に思い描いていた通りの物を作り上げることができました。
本当にありがとうございました。

お礼日時:2017/12/25 10:43

データシートの内容から、B列にある氏名毎に、氏名別の単票印刷をしたいみたいな感じですね。


何をやりたいかは理解できました。

しかし、ここでやりたいことを書いて、全部VBAを書いてもらうのは、ちょっと。。。

まずはご自分でどこまでできるかやってみてください。

つまづいたところで質問されたほうが回答しやすいです。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
どうしても転記する方法が1レコード1帳票のデータ転記しかできません。
頑張ってみましたがちょっと厳しいので諦めます。
ありがとうございました。

お礼日時:2017/12/24 15:00

まず何がVBAなんですか?



田中のテンプレートなんて聞いた事もない表現だし
そこに佐藤のデータって何をしたいんでしょう?

テンプレートは例えば請求書テンプレートとか
見積書テンプレートといった様式を準備しておいて
そこに個別のデータを乗せるのが通常で
おっしゃりたいことが呑み込めないんです。

しかもテンプレートデータって何でしょう?
検索してみてください。垂れ幕のテンプレートデータというのが
ありましたが、これはテンプレートそのものをデータとして
取り扱うもので、あなたはこの言葉を
そういうつもりでお使いではないでしょう?

自分の言葉が世間に通用するのかが、質問する前の
最低準備です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!