
【データシート】
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行目から次ページみたいな感じで作りたいです。
ポイントは同じ品名が複数あっても一行にまとめて集計しないで全て表示したいことです。
どなたかご教授頂けないでしょうか?
宜しくお願いします。
No.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
ありがとうございます。
諦めていたのでメール確認するのが遅くなりお礼をするのが遅くなりました。
1週間前からいろいろな教材を参考にしながら試行錯誤していたのですが
なかなか思い通りにいかず困っていたので投稿させていただきました。
mike32様の記述を元にアレンジを加えながら実行した結果見事に思い描いていた通りの物を作り上げることができました。
本当にありがとうございました。
No.2
- 回答日時:
データシートの内容から、B列にある氏名毎に、氏名別の単票印刷をしたいみたいな感じですね。
何をやりたいかは理解できました。
しかし、ここでやりたいことを書いて、全部VBAを書いてもらうのは、ちょっと。。。
まずはご自分でどこまでできるかやってみてください。
つまづいたところで質問されたほうが回答しやすいです。
ご返信ありがとうございます。
どうしても転記する方法が1レコード1帳票のデータ転記しかできません。
頑張ってみましたがちょっと厳しいので諦めます。
ありがとうございました。
No.1
- 回答日時:
まず何がVBAなんですか?
田中のテンプレートなんて聞いた事もない表現だし
そこに佐藤のデータって何をしたいんでしょう?
テンプレートは例えば請求書テンプレートとか
見積書テンプレートといった様式を準備しておいて
そこに個別のデータを乗せるのが通常で
おっしゃりたいことが呑み込めないんです。
しかもテンプレートデータって何でしょう?
検索してみてください。垂れ幕のテンプレートデータというのが
ありましたが、これはテンプレートそのものをデータとして
取り扱うもので、あなたはこの言葉を
そういうつもりでお使いではないでしょう?
自分の言葉が世間に通用するのかが、質問する前の
最低準備です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
Wordの差し込み印刷で空白行が...
-
INDEXとMATCH関数で#N/Aが出る...
-
VBAでの配列について
-
Word ○(まる)で表示される空白
-
ACCESS2010を利用しています。
-
Excel計算式が入ってるセルを空...
-
ちょっと特殊な連続印刷のマク...
-
エクセルでフッターに空白を入れる
-
latexで、行の先頭に空白を入れ...
-
EXCELでタイトル行と一番下の行...
-
エクセルでセル内改行の1行目...
-
エクセル 数式の無効化
-
PowerPointの表内のカンマ
-
EXCELで縦の行全てに一括して文...
-
エクセルにペーストしたときの...
-
セル上に表示された見かけ上の...
-
結合されたセルの一部を変更す...
-
【エクセル】入力規則のプルダ...
-
空白部分に連番の数字を記入し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
Wordの差し込み印刷で空白行が...
-
Word ○(まる)で表示される空白
-
エクセルでフッターに空白を入れる
-
Excel計算式が入ってるセルを空...
-
「 - 」と「 _ 」 の違い
-
INDEXとMATCH関数で#N/Aが出る...
-
アクセスのクエリで空白を0と...
-
latexで、行の先頭に空白を入れ...
-
アクセス IDが空白の時、メッセ...
-
マクロ 空白セルまで繰り返す
-
ちょっと特殊な連続印刷のマク...
-
ACCESS2010を利用しています。
-
エクセルの数式 重複する件数...
-
EXCEL2013 VBAコードを教えて...
-
ヘッダー部入力と改行・改ペー...
-
Access2007です。クエリを作り...
-
excel2010のDATEDIF使用時、空...
-
IFとORを使ったエクセル計算式...
-
VBA ""が認識されないのはなぜ...
おすすめ情報