ここから本文です

VBA初心者です。教えて頂けると助かります。 「元データ」シートにA列からC列に...

アバター

ID非公開さん

2018/9/2700:03:48

VBA初心者です。教えて頂けると助かります。

「元データ」シートにA列からC列にデータが入っています。1行目は見出しです。「コード一覧」シートにはA列にデータが入っています。

こちらも1行目は見出しになっています。
「元データ」のA列のコードを、「コード一覧」にあるコードに書き換えて、A列からC列のデータ部分をコピーして「コピー後」シートに貼り付けます。「コピー後」の1行目も見出しですので、最初は2行目に貼り付けます。次のコードに「元データ」を書き換えて、「コピー後」の先のデータの後ろに貼り付けます。これを「コード一覧」にあるデータの分だけ繰り返します。

多い時には100回以上繰り返すこともあるので、自動化できないかと見よう見まねでVBAに挑戦してみましたが、うまく動きませんでした。

Sub Test()

Dim i As Long
Dim LastRow As Long
Dim MaxRow As Long
Dim NextRow As Long

LastRow = Worksheets("コード一覧").Cells(Rows.Count, 1).End(xlUp).Row
MaxRow = Worksheets("元データ").Cells(Rows.Count, 1).End(xlUp).Row
NextRow = Worksheets("コピー後").Cells(Rows.Count, 1).End(xlUp).Row 1

Application.ScreenUpdating = False

If Worksheets("コード一覧").Range("A2").Value = "" Then
MsgBox "コード一覧が入力されていません"
Exit Sub
End If

For i = 2 To LastRow

If MaxRow >= 2 Then

Worksheets("コード一覧").Cells(i, 1).Copy Worksheets("元データ").Range(Cells(2, 1), Cells(MaxRow, 1))

Worksheets("元データ").Range(Cells(2, 1), Cells(MaxRow, 3)).Copy Worksheets("コピー後").Cells(NextRow, 1)
End If

Next i

Application.ScreenUpdating = True

End Sub

このコードを実行すると、「コピー後」シートには「コード一覧」にある最後のコードに書き換えたデータしが残っていませんでした。「コピー後」シートにあるデータの最終行の後ろに追加することができず、2行目で上書きしてしまいます。ただし、「コピー後」シートに元々データが入っている状態で実行すると、そのデータの後ろに追加はされました。最後のコードに書き換えたデータのみであることは変わりません。

どう修正していけば良いのか分からず、立ち往生となっています。
お手数ですが、教えて頂けると助かります。

Rows.Count,Copy Worksheets,xlUp,2 To LastRow,Dim i As Long,MaxRow,Cells

閲覧数:
51
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2018/9/2701:02:23

なにをなさりたいのか、説明を読んでも、コードを解読しても伝わらないです。

という状態ですが、ひとつだけアドバイス。

>「コピー後」シートには「コード一覧」にある
> 最後のコードに書き換えたデータしが残っていません
当然ですね。
元データからコピー後へコピーしているところ

Worksheets("元データ").Range(Cells(2, 1), Cells(MaxRow, 3)).Copy Worksheets("コピー後").Cells(NextRow, 1)

のNextRowは、最初に与えられた初期値
>NextRow = Worksheets("コピー後").Cells(Rows.Count, 1).End(xlUp).Row 1
のまま増加するでもなく減少するでもなく一定値になってます。
なので、元データのセル値は変化しても、すべて上書きになって、結果最後にコピーされたものが残るということになります。

次の3カ所を変更すれば、あなたのやりたい事に近づくのかもしれません。

1)
Dim NextRow As Long



削除

2)
NextRow = Worksheets("コピー後").Cells(Rows.Count, 1).End(xlUp).Row 1



削除

3)
Worksheets("元データ").Range(Cells(2, 1), Cells(MaxRow, 3)).Copy Worksheets("コピー後").Cells(NextRow, 1)



Worksheets("元データ").Range(Cells(2, 1), Cells(MaxRow, 3)).Copy Worksheets("コピー後").Cells(Rows.Count, 1).End(xlUp).Offset(1)

  • アバター

    質問者

    ID非公開さん

    2018/9/2711:21:56

    すみません、記載に入力ミスがありました。

    NextRow = Worksheets("コピー後").Cells(Rows.Count, 1).End(xlUp).Row 1 +1

    最後の「+1」が消えていました。コピー後シートのA列の最終行の、次の行を指定するつもりでした。

    単純に元データの内容と同じ内容のデータをA列のコードだけ変更して、縦にデータをつなげていきたいと考えていました。
    添付した画像も小さすぎて見づらくて、すみません。
    元データのA2~A7には最初9999というコードが入っていますが、コード一覧のA2の1000というコードに全部書き換えて、A2~C7の内容をコピー後へ貼り付け、次にコード一覧のA3の2000というコードに書き換えて、コピー後の先に貼り付けたデータの下に追加する、というのを繰り返すつもりでしたが、実行したところコード一覧の最後のコード分のデータしかコピー後に残っていませんでした。

    教えていただいたコードで試したところ、うまく動きそうです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

hig********さん

2018/9/2705:31:12

補足要望
コピー後A列はどうなっていて欲しいのですか?コード一覧の丸写しですか?
・元データB列C列を、コピー後B列C列へ
・コード一覧A列を、コピー後A列へ
に読めてしまいます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる