お世話になっております。
VLOOKUP関数によって取得される値のセル番地を毎日変更したいと考えています。
左側画像はエクセルのSheet1で行に日付、列に品番が入っております。
これに右側画像のSheet2(画像添付が1枚しかできない為、
Sheet1に貼り付けたスクリーンショットですが、実際はSheet2のA:B列が参照先になります)
は前日に売れた商品(品番)と販売数がそれぞれ入っており
(Sheet2は毎日システムよりエクスポートしたデータを貼り付けます)
前日に売れた商品を翌日朝にマクロを実行して、Sheet1の1行目品番に対して参照先の
Sheet2のA:B列から一致する販売数をVLOOKUPで取得します。
VBAでは下記のようになると思います(マクロの記録で行っています)
※12日の販売数を取得するマクロです。
Sub test()
'
' test Macro
'
'
Range("B13").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R1C,Sheet2!C1:C2,2,FALSE)"
Range("B13").Select
Selection.AutoFill Destination:=Range("B13:G13"), Type:=xlFillDefault
Range("B13:G13").Select
End Sub
毎日の作業となる為、マクロを実行した際に常に前日の日付に対して
販売数の値を取得したいのですが、色々調べて見ましたが行き詰っています。
また、作業を休みの兼ね合いで毎日行わない可能性がある為、
可能であれば空白になっている任意の行に対して実行できればベストと考えています。
例:2月15日は日曜の為、16日(月)に14日・15日の集計を行う
※その際にSheer2のデータは14日・15日分をそれぞれ貼り付けてからマクロを実行します。
また、Sheet1のG列に関して#N/Aのエラーが出ていますが、これはSheet2のエクスポートデータに
該当の品番が含まれていない為(購入されていないという事になります)、#N/Aではなく
一致しない場合は0と表示させたいのですが可能でしょうか。
Excelのバージョンは2007になります。
どうぞよろしくお願い致します。
No.1ベストアンサー
- 回答日時:
前提条件
・シート2の前日売上は、A列に品名、B列に数とする
・シート2に日付が見当たらないので、作業者が考慮する
使用法
1.望みの日付の売上をシート2に用意
2.望みの日付行のB列をアクティブにしてマクロ起動する
ctrol+nとかキー設定しておけば使い易いです。
Sub Macro1()
ActiveCell.Resize(1, 6).Formula = "=SUMIF(Sheet2!$A$2:$A$7,B$1,Sheet2!$B$2:$B$7)"
End Sub
説明
ActiveCell.Resize(1, 6)はアクティブにしたセルを起点に右に6セル選択することを意味します。
Formulaは関数式の意味。
つまりアクティブセルに関数式を代入し、右方向に6セル分ぐにーっと引っ張ることを意味ましす。
式の中身はご存じだと思います。該当なしの場合にゼロ表示するようSUMIFを使いました。
ご回答ありがとうございます。
教えて頂きました方法で無事解決致しました。
こんなにシンプルな構文で実現できるとは思わず驚きました。
難しく考えすぎていましたが、なるほど!と思える簡潔な内容で大変勉強になりました。
この度はありがとうございました。
No.3
- 回答日時:
No1です。
すみません、コピー&値のみペーストを忘れてました。End Subの上に下記を追加してください。
activecell.resize(1,6).copy
activecell.PasteSpecial Paste:=xlPasteValues
これをしないと翌日の処理で値が変わってしまいます。
No.2
- 回答日時:
こんばんは。
もう少し、添付データが明確ならよいのですが……・
300%にしても、ボケてみえませんでした。
今のところ、分かる範囲内でしか回答ができませんので、的外れなら、レス不要です。
>VLOOKUP関数によって取得される値のセル番地を毎日変更したいと考えています。
ActiveCell.FormulaR1C1 = "=VLOOKUP(R1C,Sheet2!C1:C2,2,FALSE)"
(記録マクロだからでしょうけれど、R1C1方式にする必要はなく、Formula または、FormulaLocalのブロパティを使えばよいです。数式を置きに行くだけでは、マクロとしては、ほとんど意味がないような気がしますね。)しかし、おそらく、これは最後、定数化させてしまうような感じがします。
・Sheet2は、日付と販売数は、縦に使っているのですか?
・もしかして、Sheet2のデータは、A列の品番は、規則的に並んでいないのですか?
>※その際にSheet2のデータは14日・15日分をそれぞれ貼り付けてからマクロを実行します。【一部訂正】
・その日ずつに実行していくというのでしょうか?
Sheet2 に、その都度データ転記だけのために貼り付けておくとしたら、それは、うまくないなって思います。
どのぐらいのデータ量か分かりませんが、横に使えるものなら、使ったほうがよいし、日付を入れて残したほうがよいですね。ただし、順番などが統一されていないと、マクロによる貼り付けになって、本質問とはかけ離れていく話になります。
うまく並んでいれば、Sheet2自体が、データソースになるし、ピボットテーブルで表も作れるだろうし、マクロは不要になるのかもしれません。また、ピボットテーブルは、作りっぱなしではなく、データソースを書き狩れば、更新も可能です。
>#N/Aではなく一致しない場合は0と表示させたいのですが可能でしょうか。
今の時点では、数式で処理するしかないと思いますが、数式ではなく、本格的なマクロのはじめの1歩はこのような感じです。あくまでも、サンプルです。
'//
Sub TestSample1()
Dim i As Long
Dim r As Range
Dim v As Variant
With ActiveCell.EntireRow
If .Cells(1).Value >= Date Then MsgBox "Out of Date", 36: Exit Sub
For i = 2 To 6 'G列まで
Set r = Worksheets("Sheet2").Columns(1).Cells _
.Find(Cells(1, i).Value, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not r Is Nothing Then
v = r.Offset(, 1).Value
If v <> "" Then
.Cells(i).Value = v
Else
.Cells(i).Value = 0
End If
End If
Next i
End With
End Sub
'//
ご回答ありがとうございます。
添付画像が分かりづらく申し訳ありませんでした。
画像添付サイズについて今後気をつけます。
記載のテストサンプルにて実行・結果が正しく求められました。
>・Sheet2は、日付と販売数は、縦に使っているのですか?
>・もしかして、Sheet2のデータは、A列の品番は、規則的に並んでいないのですか?
Sheet2のデータは受注システムよりエクスポートしたデータとなっており、
エクスポート後の形式が縦になっております。またA列の品番は規則的に並んでおりません。
>・その日ずつに実行していくというのでしょうか?
受注システムより前日の売れた商品・個数を抽出してデータを
エクスポートしておりますので、その日ずつに実行していく形となります。
NO.1の回答者様と甲乙つけがたいのですが、先にご回答を頂きました為
NO.1様にベストアンサーを差し上げたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
Excelのマクロについて教えてく...
-
VBA レジストリの値の読み方に...
-
ExcelのVBAコードについて教え...
-
Excel マクロについての相談
-
Excel VBA 定義されたプロージ...
-
Vba SelStart、SelLen教えてく...
-
エクセルのマクロについて教え...
-
VBAに詳しい方教えてください。
-
VBAの質問になります メッセー...
-
ユーザーフォームに別シートか...
-
2つのマクロでチェックボックス...
-
VBA listBoxから
-
VBA初心者 Ctrl+での操作、ボタ...
-
VBA 複数条件の分岐処理の上手...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
左右の表のキー位置を合わせたい
-
VBAの質問になります Userform内で
-
Excelについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報