
日次で届く売り上げデータを集計した後、別シートの記入用フォーマットにコピーしたいのですが、「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も見ています
-
【教えて!goo ウォッチ 人気記事】風水師直伝!住まいに幸運を呼び込む三つのポイント
記事を読む>>
-
excel vbaで日付一致の行にデータ転記
Excel(エクセル)
-
VBA 日付一致で転記
Visual Basic(VBA)
-
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
4
指定したセルと同じ日付の入ったセルを選択するVBA
その他(Microsoft Office)
-
5
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
6
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
7
(VBAにて)日付でデータを抽出するやり方
Excel(エクセル)
-
8
今日の日付が入った行のデータを取得するマクロ
Excel(エクセル)
-
9
VBA 別ブック(シート)の同一日付のデータ欄に値をコピー
Visual Basic(VBA)
-
10
エクセルで入力→日付を自動判別して、その日付用のセルに転記したい
Excel(エクセル)
-
11
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
12
【VBA】指定したセルと同じ値で、別シートにあるセルに移動するには?
Visual Basic(VBA)
-
13
Excelで日付変更ごとに、自動的にデータを転記
Excel(エクセル)
-
14
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
15
VBA 今日の行にあるセル コピー 別シートへ
Excel(エクセル)
-
16
エクセル表からある項目と同じ日付を検索しそのとなりの文字列を表示したい
Excel(エクセル)
-
17
Excelにて、ユーザーフォームで、日付けの範囲を指定し、検索しデーターを抽出し 別シートへ転記した
Excel(エクセル)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
20
複数条件が一致で別シートに転記【エクセルVBA】
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
BCPでCSV内の文字列をテーブル...
-
5
VBA 別シートの同じ日付の欄に...
-
6
指定日付を起点にして最新日付...
-
7
アクセス:既定値に土日含まず...
-
8
エクセル-過去6カ月分の合計を...
-
9
【エクセル】指定した日付に一...
-
10
Excel→Accessへの日付データの...
-
11
SQL SEREVER で選択した固定値...
-
12
アクセスで月単位の抽出
-
13
accessの時間更新方法(フォーム)
-
14
Accessの日付時刻型から日付、...
-
15
アクセスのフォームで期間検索...
-
16
【Accessで困っています...
-
17
Access クエリで、レコードの無...
-
18
エクセルで書式設定ではなく、...
-
19
accessのレポートで重複データ...
-
20
アクセス97のVBAで日付項目をヌ...
おすすめ情報
公式facebook
公式twitter
補足します。
■Sheet1の日付欄は、画像の通りC4になりますが、Sheet2の日付欄は画像とは違います。
例えば6/4(土)はED4、6/6(月)はEH4になります。
■コードは重複しません。ですが、実は「コード」と「売上」の代わりに「単価」と「個数」という表も存在していて、そちらにも応用できると嬉しいです。
■「コード」があって「売上」が空白、というパターンはないですが、ローデータの関係で「コード」があって「売上」が「0」になることはあります。
補足2
■Sheet1の表の左上はB4、Sheet2の表の左上はF4になります。
ちなみにSheet2のF4には、「4/1」と記入されています。
補足3
■「単価」と「個数」のシートですが、タイトル部分も「単価」「個数」になります。
また売上を計算したり、3列になることはありません。