• ベストアンサー

エクセルマクロ 指定した値をコピーしたい

マクロを始めたばかりなのですが、下記のようなことは出来るのでしょうか? 任意の数字が入力されている表があります。この表の中で、別のセルに入力された数字の入力されている行を削除したいのですが、式が入っているため、削除が出来ません。 削除したい次の行から下をすべてコピーして、削除したい行に値だけコピーをするような(見た目は一段繰り上がったようにしたい)マクロを組みたいのですが。 出来ますでしょうか? 全く作り方が分かりません(;_;) 削除対象 00006 対象 入金額 00001 487,075 00003 120,796 00004 598,000 00005 107,940 00006 1,234 00008 74,750 00009 0 00010 712,816 00011 211,094

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

> 列がすべて削除されてしまいます。 行を削除するマクロなので、削除されるのは列ではなく「行」です。 実際にどんな関数が入っていて、削除によってその関数がどう変わってしまうのか等を書かれた方が理解が得られやすいと思いますが、、、 百聞は一見にしかずですが、一見出来ないなら百"文"で説明しないと解りません。 以下はサンプルです。 1.D1の値をA列から検索 2.見つかったらその下から空白までを隣のセルと合わせてコピー 3.見つけたセルに値で貼り付け 4.最終行をクリア Sub Test() Dim sr, fr With ActiveSheet  Set fr = .Range("D1")  Set sr = .Columns(1).Find(What:=fr.Value, _         After:=.Range("A1"), LookAt:=xlWhole)  If sr Is Nothing Then Exit Sub  .Range(sr.Offset(1, 0), sr.End(xlDown).Offset(0, 1)).Copy  sr.PasteSpecial xlPasteValues  sr.End(xlDown).Resize(1, 2).Clear End With End Sub

miyo05
質問者

お礼

ありがとうございました。 分かりづらい説明にも親切にご対応いただいて大変感謝しております。 お恥ずかしい話、まだあまり理解できておりませんが、もっと勉強して、いろいろ出来るように頑張りたいと思います。

その他の回答 (4)

  • at121
  • ベストアンサー率41% (85/206)
回答No.4

#2 + #3 + #2への補足 + ・・ Sub 削除対象語句指定の全部のA列対象セルと右隣を削除() 削除対象語句 = Range("D1").Value Do Set 対象セル = Range("A:A").Find(What:=削除対象語句, LookAt:=xlWhole) If 対象セル Is Nothing Then Exit Sub Range(対象セル, 対象セル.Offset(0, 1)).Delete ' Shift:=xlShiftUp Loop End Sub

miyo05
質問者

補足

ご丁寧にありがとうございます。 上記マクロを試してみました。テストデータでは問題なく対象のセルとその隣が削除されました。 が、実際のデータには、削除したい表から式でデータを引っ張って違う表を作っているため、ひとつのセルが削除されてしまうと、式が全部おかしくなってしまいました。 やはり、対象のセルの次のセル(隣も)から空白セルまでをコピーして、削除したいセルに、値だけ貼り付けをさせるしか方法がないと思うのですが、いただいたヒントからも、私では対応できません。 この内容で、ご理解いただけますでしょうか? 一からご対応いただいて申し訳ございません。 実際のファイルをお送りできればすぐご理解いただけると思うのですが。。。

  • miwaki
  • ベストアンサー率36% (14/38)
回答No.3

削除したい行をlookup関数やmatch関数で見つけて、その行番号をRRとし Rows(RR & ":" & RR).Select Selection.Delete Shift:=xlUp でよろしいのでは?

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

> 式が入っているため、削除が出来ません。 通常だと関数式は行や列が削除されると自動的に範囲を修復すると思いますが、、、 何処にどんな関数が入っているのでしょう?配列関数? D1と同じ値をA列から探して、最初に見つけた物のみ削除するサンプルです。 試すならテスト用ブックで。 Sub Test() Dim sr, fr With ActiveSheet  Set fr = .Range("D1")  Set sr = .Columns(1).Find(What:=fr.Value, _         After:=.Range("A1"), LookAt:=xlWhole)  If sr Is Nothing Then Exit Sub  sr.EntireRow.Delete End With End Sub

miyo05
質問者

補足

ご回答ありがとうございます。 上記のマクロを組んでみたのですが、列がすべて削除されてしまいます。 他の列には別のデータが入っており、削除されないように、対象のセルと、その隣だけを削除させたいのですが。

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.1

単に6行目を消して、下のデータを繰り上げたいだけなら Range("A7:B11").Copy Range("A6").PasteSpecial xlPasteValues しかし、ご質問の文はやりたいことの全部を説明していないような気がします。必要なことがあれば補足してください。

miyo05
質問者

補足

ご回答ありがとうございます。説明不足で申し訳ございません。 単に6行目を消すわけではなく、任意に指定した数字が含まれている行を削除したいので、6行目もあれば、その他の行の場合もあります。

関連するQ&A