プロが教える店舗&オフィスのセキュリティ対策術

エクセルで、データの右端の列に表示されている、別のシートからVLOOKUPで返した数値の行数を、数値が表示された行をコピーしてそのすぐ下に挿入し、更に、コピーした行の指定したセルの値を【10倍してプラス1】した数値をデータの一番右の列に表示させ、挿入した行だけにその連続した値を表示させたデータを別シートに作成することは可能でしょうか?

添付しました写真の【Q】列に表示された値の行数だけ、コピーしてすぐ下に挿入(#N/Aは0とする)し、【I】列『商品コード』の数値×10+1の数値を、コピー元の行の【S】列に表示、挿入行にのみそれぞれにその数値の連続した値を表示させたデータを、シート2(補足で添付致します)に表示させたいのです。(4行目が項目、データは5行目からです。)

セットコードで入力されたデータを、セットの内訳をすべて表示させたデータにする事が目的ですが、データの量が1000件近くなるかもしれず、手作業では無理なため試行錯誤しておりますがどうしてもうまくいきません。
挿入した行へ、セット内訳の商品コード・商品名・価格等を、また別シートからVLOOKUPで返す予定です。
VBAにお詳しい方、どうかどうか宜しくお願い致します。

「エクセルで表示された値だけ行数をコピーし」の質問画像

質問者からの補足コメント

  • うーん・・・

    遅くなりましたがsheet2に表示させたいデータです。元のsheetと同じく項目が4行目に来ます。(見づらく申し訳ありません。)Q列の値の行数が自動挿入さえできれば、おかげ様であとは何とかできそうです。どうか宜しくお願い致します。

    「エクセルで表示された値だけ行数をコピーし」の補足画像1
      補足日時:2019/01/05 02:01

A 回答 (10件)

以下のマクロを標準モジュールに登録してください。


Sheet2の挿入&コピーを行います。予めSheet2に関数を埋め込むということなので、
Sheet2のT列より右側は一切マクロでは更新しません。
Sheet2の4行目以降のA列からS列はSheet1の内容がコピーされるか、マクロにより内容が設定されるため、そこに関数を埋め込んではいけません。
----------------------------------------------------------
Option Explicit
Public Sub 挿入コピー()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim i As Long
Dim val As Variant
Dim copy_count As Long
Dim rng1 As Variant
Dim rng2 As Variant
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1の最大行取得
maxrow2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row 'sheet2の最大行取得
sh2.Range("A4:R4").Value = sh1.Range("A4:R4").Value
If maxrow2 > 4 Then
sh2.Range("A5:S" & maxrow2).ClearContents
End If
row2 = 5
For row1 = 5 To maxrow1
val = sh1.Cells(row1, "Q").Value
If IsNumeric(val) = False Then
copy_count = 0
Else
copy_count = val
End If
rng1 = "A" & row1 & ":R" & row1
rng2 = "A" & row2 & ":R" & row2
sh2.Range(rng2).Value = sh1.Range(rng1).Value
row2 = row2 + 1
For i = 1 To copy_count
rng2 = "A" & row2 & ":R" & row2
sh2.Range(rng2).Value = sh1.Range(rng1).Value
sh2.Cells(row2, "S").Value = sh1.Cells(row1, "I").Value * 10 + i
row2 = row2 + 1
Next
Next
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

年末からかかりっきりで頭を悩ませておりましたが、瞬時に希望通りのデータが表示されました!!本当に助かりました!!おかげ様で明日からスムーズに作業を進められそうです。tatsu99様、本当に有難うございました!!!

お礼日時:2019/01/06 08:19
    • good
    • 1
この回答へのお礼

いろいろなわかりやすいサイトをご紹介くださり、得意ではないので大変助かります。勉強に役立てて、今年はステップアップしたと思います。ご親切に有難うございました!

お礼日時:2019/01/06 08:23

お役に 立てたなら、


幸いです。
    • good
    • 1
この回答へのお礼

有難うございました!

お礼日時:2019/01/06 07:48

補足要求です。


①コピーはSheet1のA~R列をそのままSheet2のA~R列へコピーすれば良いのですか?
(行の追加は②で行います。Q列の値がN/Aの場合でも行う1行分のコピーについてです)

②行をQ列の値の分、追加する時ですが、(例としてQ列の値が6なら)
Sheet1のA~R列をそのままSheet2のA~R列へコピーする。(6回行う)
Sheet2のS列は、Aheet1のI列×10+Nとする。
(Nは1回目のコピーの時1、2回目のコピーの時2、・・・6回目のコピーの時6とする)

上記①②の考え方であってますか。


③Sheet1のQ列の値が10以上になることはあるのですか?
質問の意図は、もし、あるなら(Q列の値=12とすると)、
I列のコードが100の時、S列へ設定する12回目の値は、1000+12=1012になる
がそれで良いのかということです。


④「挿入した行へ、セット内訳の商品コード・商品名・価格等を、また別シートからVLOOKUPで返す予定です。」とあるが、
これは、VBAでSheet2を作成したあとで、あなたが、Sheet2へVLOOKUPの関数式を埋め込むということでしょうか。
もし、そうなら、その作業は結構大変かと思いますが・・・・
    • good
    • 1
この回答へのお礼

tatsu99様、有難うございます。①、②ともおっしゃる通りです。②についてはsheet1のQ列の値が6なら、6行挿入してsheet2では同じデータの行が7行になります。
③は10以上にはなりません。(最大で7です。)
④は、sheet2に表示されたデータの右端にVLOOKUPでS列の値によってセット内訳(商品コード・商品名・価格・数量・小計)のデータが返るように関数を入れておき、sheet3に全て値貼付け、A~Oまでのデータに商品コード・商品名・価格・数量・小計の値が返った部分だけコピペするつもりでおります。(セット数は1セットに限られるかと見込まれるため、事前に受注データをフィルターで数量チェックすれば数量・小計もコピペできるかと思いました。)
7日から作業を開始しますため、私の知識ではこれ以上は時間的に準備できず、行の自動挿入ができれば大変助かるところです。。

お礼日時:2019/01/05 23:26

なら、


Excelには、
行動を 記録し、
マクロ化する、
機能が あるから、

Excel自身に、
教えて貰えば いいよ。

記録する
https://www.forguncy.com/blog/20170726_macro

此 読んでね、

参考図書
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu0 …
    • good
    • 1
この回答へのお礼

nouble1様、とてもわかりやすいサイトをお教えくださり、有難うございます!じっくり勉強して、今年はきちんと身に着けたいと思います。

お礼日時:2019/01/05 22:55

あっと!


ユニオンメソッドの 説明は、
此方ですよ、
https://docs.microsoft.com/ja-jp/office/vba/exce …
    • good
    • 1
この回答へのお礼

大変勉強になります!ご親切に有難うございます。感謝申し上げます。

お礼日時:2019/01/05 01:51

尚、


サブルーティンにて、
Find等を 持ちい、
数値を 探させ、

Union メソッドで、
見つかった セル等を、
統合指定して、

全て 一気に、
探し出させ、

一つと して、
返させ、

下方から 順に、
以下の 配下に、
挿入させていけば、

着目点には 挿入行為の、
影響が 及ばず、

効率的な 作業が、
望めるものと 思いますよ。
    • good
    • 1
この回答へのお礼

詳しくご説明くださり、有難うございます!勉強が足りずなかなかうまくいきませんが、参考にさせていただきます!

お礼日時:2019/01/05 01:50

再帰的に なりそうですね、


挿入する列にも、
値記載が あった場合、
どう扱うのですか?


S列は フィルさせれば、
十分でしょう、

VLOOKUPは もう出来るのですよね?
Evaluateか、WorksheetFunctionを、
持ちいれば、
問題無い事と 思います。


コピ等は 言及するまでも、
ないですよね?

演算も 出来ますよね?

後は、
組み立てるだけでは?
    • good
    • 1
この回答へのお礼

ご回答有難うございます。S列へは、コピーした行と挿入された行にのみ連続の値を表示させたく、その値から、セットの内訳データをコピー行と挿入行のみにVLOOKUPで返せればと思いました。ご回答くださった方法でもやってみます。感謝致します。

お礼日時:2019/01/04 18:06

失礼、


導入権限を お持ちなのですね。
    • good
    • 0
この回答へのお礼

初めての質問の投稿で慣れておらず、噛み合わず失礼いたしました!はい。宜しくお願い申し上げます。

お礼日時:2019/01/04 17:34

誰もが 答える前に、


お伺いします、

貴方は 其のシステムに、
VBAを 入れる事を、
許されますか?

尚、
許可無く 入れた場合、
解雇理由として、
必要十分な程の 重要案件なのですが。


何故なら、
悪意のあるプログラムも、

しばしば、
VBAの 形を、
取り得るからで、

其れ等は、
アンチウイルスソフトに、
掛からない事が 多く、

故に、
悪質に 見られる訳です。
    • good
    • 0
この回答へのお礼

No.1の方、質問をお読みくださり有難うございます。会社の事務作業で毎日の受注内容の取りまとめがあり、複雑な作業が発生し作業時間も限られています為、VBAの知識がなければこなせない状況で、努力しましたが時間が足りません。どのように作業するかは制限なく任されております。

お礼日時:2019/01/04 17:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています