• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロでの質問です)

エクセルのマクロで1.3.5の条件に合うものを追加する方法

このQ&Aのポイント
  • エクセルのマクロを使って、明細シートから1.3.5の条件に合うデータを実績シートの最終行に追加する方法を教えてください。
  • 現在のマクロでは、データが最終行に上書きされてしまっています。どうすれば追加されるようになるでしょうか?
  • また、マクロ初心者なので、分かりやすい解説や参考サイトを教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

貼り付け先になる「J」行を,貼り付ける直前に「毎回調べます」。他にもいくつか間違っています。 Sub コピー() '1,3,5のものを実績にコピーする  i = 5  Sheets("明細").Select  Do While Cells(i, 8).Value <> ""   If Cells(i, 3).Value = 1 Or Cells(i, 3) = 3 Or Cells(i, 3) = 5 Then   Range(cells(i, "D"), cells(i, "H")).Copy  ’間違い修正   Sheets("実績").Select   J = Cells(Rows.Count, 4).End(xlUp).Row + 1  ’ここで調べる。   Range("C" & J).PasteSpecial Paste:=xlPasteValues   Application.CutCopyMode = False   Sheets("明細").Select       ’追加   End If  i = i + 1  Loop End Sub #参考 あんまりちょっとなんで,丸ごと書き直します。 ご質問で掲示されたマクロから,C列からH列までをC列からH列までにコピーするように変えています。 sub macro1()  dim h as range  worksheets("明細").select  for each h in range("C5:C" & range("H65536").end(xlup).row)   if h.value = 1 or h.value = 3 or h.value = 5 then    h.resize(1, 6).copy destination:=workhseets("実績").range("C65536").end(xlup).offset(1)   end if  next end sub

pppppok
質問者

お礼

ありがとうございました。 書き直していただいたものが、早いしスッキリしてます。 こんなに短いものでも、いろいろな書き方があるんですね。 勉強になります。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 Sub コピー() '1,3,5のものを実績にコピーする Set 明細 = Sheets("明細") Set 実績 = Sheets("実績") i = 5 j = 実績.Cells(Rows.Count, 4).End(xlUp).Row 明細.Range("D5", "H5").Copy Do While 明細.Cells(i, 8).Value <> "" Select Case 明細.Cells(i, 3).Value Case 1, 3, 5 j = j + 1 実績.Range("C" & j).PasteSpecial Paste:=xlPasteValues End Select i = i + 1 Loop Application.CutCopyMode = False End Sub

pppppok
質問者

お礼

ありがとうございました。 参考にさせていただきます。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

★印が変更した場所です。 Sub コピー() '1,3,5のものを実績にコピーする i = 5 J = Sheets("実績").Cells(Rows.Count, 4).End(xlUp).Row ’★ Sheets("明細").Select Do While Cells(i, 8).Value <> "" If Cells(i, 3).Value = 1 Or Cells(i, 3) = 3 Or Cells(i, 3) = 5 Then Range("D5", "H5").Copy Sheets("実績").Select Range("C" & J).Offset(1).PasteSpecial Paste:=xlPasteValues ’★ Application.CutCopyMode = False End If i = i + 1 Loop End Sub

pppppok
質問者

お礼

早々の回答ありがとうございます。 参考にさせていただきます。

関連するQ&A