前提・実現したいこと
VBA初心者です。よろしくお願い致します。
2つ行いたいことがあります。
(1)図1の表をしたから見ていき、K列が【今週】M~AO列をコピーして
その一つ上の【先週】のM~AO列に値で貼り付け
(2)図1の表を下から見ていき、K列が【今週】のM~AO列と、
グラフ範囲内のH列に下記VLOOKUPで参照した値を入力
=IFERROR(VLOOKUP($G行数,原価予実一覧!$A$3:$AO$10000,各列の2行目,0),"")
※図1のグラフの量は毎回変化します。
説明不足の点がありましたら申し訳ございません。
ご教示お願い致します。
やったこと
やったこと致しましては、まったくの初心者の為インターネットで似たような案件を検索し、
実際に使えないかと探しましたが、K列の基準を指定してから何かを行うというところに
躓いてしまっている次第です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 02:00
回答4件
0
ベストアンサー
VBA
1Sub test() 2 Dim rngKey As Range 3 Dim rngFind As Range 4 Dim c As Range 5 Dim rngFrom As Range 6 Dim rngTo As Range 7 Dim ixRow As Long 8 9 With Worksheets("データ") 10 Set rngKey = .Range(.Range("H4"), .Cells(.Rows.Count, "H").End(xlUp)) 11 End With 12 With Worksheets("原価予実一覧") 13 Set rngFind = .Range(.Range("A3"), .Cells(Rows.Count, "G").End(xlUp)) 14 End With 15 16 For Each c In rngKey 17 If c.Address = c.MergeArea(1).Address Then 18 Set rngTo = c.MergeArea.Offset(, 5).Resize(, 28) 19 rngTo.Rows(3).Copy rngTo.Rows(2) 20 ixRow = WorksheetFunction.Match(c.Offset(, -1), rngFind, 0) 21 Set rngTo = rngFind(ixRow, 1).Resize(3) 22 23 rngTo(1, 1).Value = rngFrom(1, 7).Value '見込み売価 24 rngTo(1, 2).Value = rngFrom(1, 8).Value '見込み原価 25 rngTo(3, 1).Value = rngFrom(3, 7).Value '今週売価 26 rngTo(3, 2).Value = rngFrom(3, 8).Value '今週原価 27 rngTo(1, 3).Resize(, 26).Value = rngFrom(1, 10).Resize(, 26).Value 28 rngTo(3, 3).Resize(, 26).Value = rngFrom(3, 10).Resize(, 26).Value 29 End If 30 Next 31End Sub
こんな感じでいいと思います。
が、セルの位置が微妙に違うかも知れません。
そちらで意図を汲み取って直していただけますか?
もしわからない部分があれば、また聞いて下さい。
処理速度とかは全然気にしてないので、
我慢できない速度ならそれも行ってください。
しかし、とりあえず動いてから、高速化は考えましょう。
投稿2018/06/11 04:56
編集2018/06/11 05:00総合スコア2136
0
>製品NO.は異なるが型式は同じという場合もございます。
>その場合でもMatch関数は使用できるのでしょうか?
どうせ非表示の作業列を使っておられるようなので、
文字列を繋ぎ合わせたものを入れる列を追加して、そこで検索するか、
Match関数も遅いかも知れないので、
あっさり自作で検索の仕組みを作ってもいいかもしれません。
とりあえず、処理速度は一切無視して、見えてる部分だけで、
転記元&転記先のセル位置を特定する方向でなにか考えてみます。
>最終的にJ列で昇順で並び替えをして、
とりあえず、並び替えは特に意味はないということで理解しておきます。
>データは必ず3行1組ですが、国別ではありません。
>情報漏洩防止のため、産地・果物で表しましたが、実際には
>果物→製品のNO.
>産地→製品の型式
>が入ります。
>製品NO.は異なるが型式は同じという場合もございます。
ということは、製品No.の順番は変更がないか無意味として解釈していいのかなぁ。。。
無意味はたぶん言い過ぎかな?例をみると固定でもう決まっている?
Vlooupの式を見ると
G列の1データの3行目で検索してるからそれで考えたらよさそうですかね?
投稿2018/06/11 03:30
総合スコア2136
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 03:54
0
>現時点では、このデータをVLOOKUPですべて飛ばしています。
シート上に数式をセットしているということですか?
シート上で数式を入れていても、
マクロでVLookupを使っていてもいいですが、数式をどのようにしているか、
例をお願いします。
あと、書きかけているコードもあれば提示をお願いします。
今一つやりたいことと、やっていることが、こちらでつかめてません。
>ですが、値ですべて貼り付けてしまうと次回の作成ができないため
???です。
原価予実一覧シートを参照することが解っていれば、値であろうと数式であろうと
問題ないように思いますが?
しかも、数式だと先週に転記する前に原価予実一覧シートを更新してしまえば、
おかしなことになりますよね?
その辺はどうお考えですか?
あと、
グラフ→×
表→○
ですよね?
折れ線グラフとか棒グラフとかの話ではないですよね?
投稿2018/06/11 02:03
総合スコア2136
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 02:33
2018/06/11 02:56
2018/06/11 03:13
0
ども^^
やりたいことは、
1)「データ」シートのK列が、「今週」の行を、K列の先週の行に転記し、
2)「原価予実一覧」シートの「実績」の行を、「データ」シートの対応する国(産地)の「今週」の行へ
転記したいということですか?
セルに数式をセットすると、自動で更新されるとわけわかんない状態になるので、
VBAを使って転記する作業を自動化したいという事でしょうか?
ちなみに「見込み」も両方のシートにあるようですが、転記して、値を更新しなくてもよいのですか?
投稿2018/06/11 01:29
総合スコア2136
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 01:51
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。