
日次で届く売り上げデータを集計した後、別シートの記入用フォーマットにコピーしたいのですが、「Sheet1」にあるデータを、「Sheet2」の対応する日付の欄に<値を貼付け>するVBAを教えていただけないでしょうか。
※画像の参照をお願いします。
例えば「Sheet1」にある6/6のデータ(B6:C25)を、マクロで「Sheet2」の6/6の欄に
<値を貼付け>したいです。
「Sheet1」には、1日分のデータ欄のみがあります。
「Sheet2」には、あらかじめ1年分の記入欄を用意しています。
集計をしない日もあるため、記入用フォーマット(Sheet2)の左端から詰めていくという方法は使えませんでした。
集計をしない日は空欄のままにしたいです。
それと欲を張ってすみませんが、以下の場合は動作を中止して、警告を出すようにしたいです。
・記入用フォーマットに、対応する日付が無かった場合
・記入用フォーマットの対応する日付の欄に、すでに何かが記入されている場合
説明が分かりづらかったらすみません。
よろしくお願いします。

No.4ベストアンサー
- 回答日時:
例外は無いとして以下の様なものでいかがでしょうか?
-------------------------------------------------------------
Sub 集計()
Dim 日付 As Date
Dim 列番号 As Long
日付 = Sheets("Sheet1").Cells(4, 3).Value
Sheets("Sheet2").Select
For 列番号 = 6 To Cells(4, Columns.Count).End(xlToLeft).Column Step 2
If Cells(4, 列番号).Value = 日付 Then Exit For
Next
If Cells(4, 列番号).Value <> 日付 Then
MsgBox ("対象の日付が見つかりませんでした。")
Exit Sub
End If
If Cells(Rows.Count, 列番号).End(xlUp).Row <> 5 Then
Cells(Cells(Rows.Count, 列番号).End(xlUp).Row, 列番号).Select
MsgBox ("データが既に書き込まれています。")
Exit Sub
End If
Sheets("Sheet1").Select
Range(Cells(6, 2), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 3)).Copy
Sheets("Sheet2").Select
Cells(6, 列番号).Select
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False
End Sub
-------------------------------------------------------------
No.7
- 回答日時:
No.6です。
>・記入用フォーマットに、対応する日付が無かった場合
>・記入用フォーマットの対応する日付の欄に、すでに何かが記入されている場合
を見逃していました。
前回のコードは消去し↓のコードにしてみてください。
そして、画像のアップを忘れていましたので、
一緒にアップします。
Sub Sample2()
Dim c As Range, lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
Set c = wS.Rows(4).Find(what:=Format(.Range("C4"), "m/d(aaa)"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
If wS.Cells(Rows.Count, c.Column).End(xlUp).Row = 4 Then
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 5 Then
Range(.Cells(6, "B"), .Cells(lastRow, "C")).Copy
wS.Cells(Rows.Count, c.Column).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Else
MsgBox "入力済みです"
Exit Sub
End If
Else
MsgBox "該当する日付なし"
End If
End With
End Sub
※ 今回はSheet1のデータには手を付けていません。
どうも失礼しました。m(_ _)m

No.6
- 回答日時:
こんばんは!
横からお邪魔します。
Sheetのレイアウトは↓のような感じになっているとします。
Sheet1のC4セル日付は必ずSheet2の4行目にあるという前提で・・・
Sub Sample1()
Dim myCol As Long, lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
myCol = WorksheetFunction.Match(.Range("C4"), wS.Rows(4), False)
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 5 Then
Range(.Cells(6, "B"), .Cells(lastRow, "C")).Copy
wS.Cells(Rows.Count, myCol).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Range(.Cells(6, "B"), .Cells(lastRow, "C")).ClearContents '←Sheet1のデータを消去★//
End If
End With
End Sub
※ Sheet2へ「値」の貼り付けを行った後にSheet1のデータを消去するようにしています。
こんな感じではどうでしょうか?m(_ _)m
No.5
- 回答日時:
No.4 のコードはタイトル行の文字には影響されませんので、レイアウトが同じならばそのまま使えると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
excel vbaで日付一致の行にデータ転記
Excel(エクセル)
-
VBA 別ブック(シート)の同一日付のデータ欄に値をコピー
Visual Basic(VBA)
-
-
4
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
5
Excelで日付変更ごとに、自動的にデータを転記
Excel(エクセル)
-
6
今日の日付が入った行のデータを取得するマクロ
Excel(エクセル)
-
7
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
8
VBA 日付一致で転記
Visual Basic(VBA)
-
9
エクセルで入力→日付を自動判別して、その日付用のセルに転記したい
Excel(エクセル)
-
10
指定した日付の範囲内でデータを転記したい。
Excel(エクセル)
-
11
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
12
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
13
指定したセルと同じ日付の入ったセルを選択するVBA
その他(Microsoft Office)
-
14
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
15
VBA 今日の行にあるセル コピー 別シートへ
Excel(エクセル)
-
16
マクロで貼り付け位置を可変させる方法が知りたいです。
Excel(エクセル)
-
17
【Excel関数】別シートに日付順でデータを抽出する方法
Visual Basic(VBA)
-
18
エクセルのマクロで条件一致のデータを別シート(複数)に転記したい
Visual Basic(VBA)
-
19
エクセル 違う表から同じ日付のデータを検索
Excel(エクセル)
-
20
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
VBA 別シートの同じ日付の欄に...
-
Excleピボットでデータのない部...
-
Excel→Accessへの日付データの...
-
Accessで日付の比較がうまくい...
-
指定日付を起点にして最新日付...
-
ACCESSの空白をカウントする
-
エクセルのWEBクエリで取り込め...
-
BCPでCSV内の文字列をテーブル...
-
アクセス(access)で過去3回分...
-
アクセスで日付を入力すると曜...
-
アクセスのクエリー作成
-
【Accessで困っています...
-
ACCESSでの文字数カウント
-
アクセスのエラー「クエリには...
-
差込印刷での全角表示について...
-
Accessのハイパーリンクをクリ...
-
エクセルにおける「フィールド...
-
アクセスで追加した項目に全て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
アクセスで日付を入力すると曜...
-
Excel→Accessへの日付データの...
-
アクセス:既定値に土日含まず...
-
VBA 別シートの同じ日付の欄に...
-
BCPでCSV内の文字列をテーブル...
-
ACCESSの空白をカウントする
-
Accessの日付時刻型から日付、...
-
アクセスの昇順並び替えで空白...
-
クロス集計のユニオンクエリー...
-
指定日付を起点にして最新日付...
-
Accessのクエリ / 曜日の表示...
-
前のレコードの合計に現レコー...
-
ビュー定義をプログラムで動的...
-
【Accessで困っています...
-
ACCESS・重複データ入力をエラーに
-
Accessで日付の比較がうまくい...
-
【vba】日付の形式が勝手に変わ...
おすすめ情報
補足します。
■Sheet1の日付欄は、画像の通りC4になりますが、Sheet2の日付欄は画像とは違います。
例えば6/4(土)はED4、6/6(月)はEH4になります。
■コードは重複しません。ですが、実は「コード」と「売上」の代わりに「単価」と「個数」という表も存在していて、そちらにも応用できると嬉しいです。
■「コード」があって「売上」が空白、というパターンはないですが、ローデータの関係で「コード」があって「売上」が「0」になることはあります。
補足2
■Sheet1の表の左上はB4、Sheet2の表の左上はF4になります。
ちなみにSheet2のF4には、「4/1」と記入されています。
補足3
■「単価」と「個数」のシートですが、タイトル部分も「単価」「個数」になります。
また売上を計算したり、3列になることはありません。