• 締切済み

VBAを使って検索したセルをコピーして別の場所に貼り付ける。

こんにちは。 業務でエクセルを使っていたのですが、 あまりに毎回時間がかかってしまうため、 VBAを利用して自動化したいと考えています。 まず、以下のようなシートが存在します。 A   B      C D E     F       G  H 1             2  なす          とまと   3 20 3 かぼちゃ         えんどう  4 55 4 きゅうり         りんご   2 82 5 とまと           6                7               みかん  3 10 8 にんじん         ごぼう  9  21 9 はくさい         うり   10 33 10 ねぎ 次のような作業を自動化したいのです。 1.A列に入っている野菜の名前と一致するものがF列にあるかどうか検索する。 2.もし一致するセルがあれば、そのセルとその横のセル、もう一つ横のセルをまとめてコピーしてそれぞれC、D、E列で、検索したもとの野菜と同じ行にペーストする。 3.この操作をA列にある全ての野菜について行い、 もし、F列に一致するものがなければ、CDE列は空欄にしておく。 4.A列一番下まで完了すれば作業終了。 以上です。 よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

VLOOKUP関数を利用していますか。 利用しているなら、「あまりに毎回時間がかかってしまうため」とはどんなことですか。あるいは不便がありますか。 もし使ってないなら、それでは、「「業務」でエクセルを使っている」とはいえないぐらいの、重要な関数です。使ってください。 またVBAでWorksheetFunctionでVLOOKUPを使うことができます。 For Nextで全件比較を繰り回すのは、好きじゃない。 Findというメソッドもありますが。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No2です。 先ほどのでも大丈夫とは思いますが、念のため一箇所だけ修正しました。(点が一個抜けていました) Sub 照合貼付() Dim gA As Integer 'A列最大行 Dim gF As Integer 'F列最大行 Dim i As Integer 'ループ用 Dim n As Integer 'ループ用 With ActiveSheet gA = .Range("A65536").End(xlUp).Row gF = .Range("F65536").End(xlUp).Row For i = 1 To gF For n = 1 To gA If .Cells(n, "A") <> "" Then '空白でない場合 If .Cells(n, "A") = .Cells(i, "F") Then '同一データがあったら .Cells(n, "A").Offset(0, 1).Resize(1, 3).Value = .Cells(i, "F").Resize(1, 3).Value '転記 End If End If Next Next End With End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 2.もし一致するセルがあれば、そのセルとその横のセル、もう一つ横のセルをまとめてコピー FGH列をC、D、E列にですね?野菜名が重複するようですが・・・。 一応これで動くと思います。 Sub 照合貼付() Dim gA As Integer 'A列最大行 Dim gF As Integer 'F列最大行 Dim i As Integer 'ループ用 Dim n As Integer 'ループ用 With ActiveSheet gA = .Range("A65536").End(xlUp).Row gF = .Range("F65536").End(xlUp).Row For i = 1 To gF For n = 1 To gA If .Cells(n, "A") <> "" Then '空白でない場合 If .Cells(n, "A") = Cells(i, "F") Then '同一データがあったら .Cells(n, "A").Offset(0, 1).Resize(1, 3).Value = .Cells(i, "F").Resize(1, 3).Value '転記 End If End If Next Next End With End Sub

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

>次のような作業を自動化したいのです。 ○さっぱりわからないから、教えて ○作ってみたけど、動かない 何が要望なのですか?

kozy__kozy
質問者

補足

説明不足で申し訳ありません。 書き方がさっぱり分からない、といった感じです。 ひととおりVBAに関する本には目を通してみましたが、 記録したマクロを少しいじるくらいしかやったことがなく、自分でマクロを書いたことが一回もない初心者です。

関連するQ&A

  • VBAを使って検索したセルを別のシートにコピーする

    こんにちは。 業務でエクセルを使用して差し込み文書を印刷しています。 量が多いのでVBAを使って簡単に作業したいです。 まず、以下のようなシートがあります。 <Sheet1>差込文書 <Sheet2> (A)  (B)    (C)     (D) (E)  (F) 番号|会社名|支店名|役職名|氏名|会社、支店名、役職名、氏名 次のような作業をさせたいです。 1.<sheet2>のA列と同じ番号が<sheet1>の(L1)にあるかどうか検索する。 2.もし、一致するセルがあれば、<sheet2>の該当番号の行のF列を<sheet1>の(B5)にすべて(書式ごと)コピーする。 以上です。 VLOOKUP関数でしましたが、すべてをコピーする事ができなかったので、VBAでコピーしたいです。 F列は、個人名だけの方、支店がない会社などがあるため、バランス良く配置しているセルです。 よろしくお願いします。

  • エクセルVBAで、複数セルのデータをひとつのセルに改行してまとめたいのですか・・・

    データの内容をひとつのセルに改行して入れていくという 作業を自動化できないでしょうか? 「データ」シート メモ 地点 from ~ to 線種 A1,B1,C1,D1,E1,F1に上の項目があり、 メモ、地点には文字、from ~ toには時刻(00:00)が入り、線種には =====というような記号が入ります。("~"の列には00:00形式の時刻が入る他"~"という記号が入るときもあります) それぞれの項目の下にデータを入力してあります。 これを「まとめ」シートに ・A~E列までをひとつのセルに改行してまとめる ・F列はその右隣にそのまま表記する と自動でできないかと考えています。例えば、「データ」2行目に A2 観劇 B2 日本大劇場 C2 10:00 D2 ~ E2 12:00 F2 ====== とある場合、「まとめ」シート A2セルは 観劇 日本大劇場 10:00~12:00 と改行して入り、B2に「データ」F2の======が入るように「データ」シートのデータがなくなるまで右にずらっとつなげていくようにしたいと思っています。今手作業でやっているのですが時間がかかって・・・。 よろしくお願いします。

  • VBA 今日の行にあるセル コピー 別シートへ

    (1)sheet1にボタン button1 があり、そのボタンを押すと、マクロが起動する。 (2)データは sheet2 貼り付け先は sheet3 sheet2 F列に日付が入っています。   F列は、日付(過去~本日まで ※未来の日付はありません)か、空白の場合があります。 F列の日付が本日のとき、 sheet2 A列のセルの値を sheet3 B列へ。  A列には連番。 sheet2 D列のセルの値を sheet3 C列へ。 sheet2 G列のセルの値を sheet3 D列へ。 sheet2 F列のセルの値を sheet3 E列へ。 それぞれ、Sheet3の各行の一番下に貼り付ける形をとりたいのです。 こちらでマクロはどうしたらよいのでしょうか。

  • 複数のセルをコピーし、別シートの任意のセルへペーストをするためのマクロ

    ブック(1)のシート(1)にある複数の離れたセル(A1,B2,C3,D4:F4)をコピーし、別ブックのシート(1)のセル(E1,F2,G3,B4:F4)へリンク貼り付けを実行するためのマクロを教えてください。 なお、ブック(1)とブック(2)は同一階層に置いてあります。 このブック(1)とブック(2)の表のフォーマットが違っており、ブック(1)のセルA1をコピーして ブック(2)のセルE1へ貼り付けし、 また同様にブック(1)のセルB2をコピーして ブック(2)のセルF2へ貼り付けをしていきます。 (A1→E1、B2→F2、C3→G3、D4:F4→B4:F4 へ貼り付ける) この作業をマクロを使って自動実行させたいと思っています。 御手数お掛け致しますが、何卒よろしくお願いいたします。

  • エクセルVBAで不一致に空白セルを挿入

    エクセル2010です。 A、B列ともソートされています。 ごく少数ですが同一列内に重複するデータもあります。 そして A列に、1行目からA、B、C、E、F、F、H B列に、1行目からA、B、D、E、F、G、I (カンマは実際にはありません。) というような文字列データがある場合 別シートに A列に、1行目からA、B、C、空、E、F、F、空、H、空、 B列に、1行目からA、B、空、D、E、F、空、G、空、I、 (空は空白セルの意味です。) というように、お互いが一致しない場合は空白で飛ばし、一致するものは同じ行にするにはどのような方法がよろしいでしょうか? 例のように少ないデータなら目で見て手作業でできますが、実際は千件以上のデータです。 VBAでも関数でも結構です。よろしくお願いします。

  • excel2000 で条件に一致するセル検索

    二つの条件に一致するセルを検索する方法について、ご指導お願いします。 C列 NO D列 作業日 E列 作業NO とあります。 D2セル と E2セルに検索したい、作業日と、作業NOを入力して、G2セルに 該当するNOを、写真のように表示させたいです。 検索条件といたしまして、作業NOは完全一致ですが、作業日は検索条件日から6日以内にあるかどうかです。また、作業日と作業NOの並び昇順、降順ではなくランダムです。 G2セルにどういった関数を入れればいいか、アドバイスを頂ければ幸いです。 よろしくお願いいたします。

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • VBA 他シートを参照しているセルのコピー

    お世話になります。 以下のシートがあります。 [sheet a]    A     B        C      D     E 1 2004 2005 2006 2007 2008 2 =b!A2 =b!C2 =b!E2 =b!G2 =b!I2 3 10 15 16 4 11 4 12 30 20 9 2 5 =SUM(A3:A4) =SUM(B3:B4) =SUM(C3:C4) =SUM(D3:D4) =SUM(E3:E4) [sheet b] A B C D E  F G H I J 2004 2005 2006 2007 2008 1 あ1 い1 う1 え1 お1 か1 き1 く1 け1 こ1 2 あ2 い2 う2 え2 お2 か2 き2 く2 け2 こ2 ・・・・・・・・・ [sheet a]F列以降に入れるデータは、VBA(マクロ)を使って、別のブックから取り出しています。 (例) F1…=E1+1(E1の数式をコピー) F3,F4…任意の値(別のブックからコピー) F5…=SUM(F3:F4)(E5の数式をコピー) 1行目,5行目の場合は左のセルをコピーして数式を貼り付けると、列が自動的に列が変わりますが、2行目の場合は元のシートを1行おきに参照しているので、単純にコピーしただけでは正しい数式が入りません。 2行目の参照をVBAで作るには、どのようにしたらいいでしょうか。 よろしくお願いします。

  • 異なる結合セルのコピー

    A.B.C列の結合セルに文字が入力されています。 その文字を違う表のD.Eの結合セルにコピーをしたいのですが、 「コピー領域と貼り付け領域が違う為コピーできません。」 というメッセージがでます。 A B C  ああ D E  ああ F列を作らないで出来る方法があれば、教えて下さい!! 宜しくお願い致します。

  • 可視セルへのコピー マクロ

    次のように、可視セルから可視セルへコピーしたいです。 (元の状態) A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150 dさん 済    100 eさん 未    120 fさん 済    250 gさん 未    300 hさん 未    210 この状態をB列で支払が済んでるかどうかでフィルターをかけて ABC列をコピーし、DEF列に可視セルのみコピーして A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 cさん 未    150  cさん 未    150 eさん 未    120  eさん 未    120 gさん 未    300  gさん 未    300 hさん 未    210  hさん 未    210 フィルターをはずすと A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150   cさん 未    150 dさん 済    100 eさん 未    120   eさん 未    120 fさん 済    250 gさん 未    300   gさん 未    300 hさん 未    210   hさん 未    210 と、未払いの人だけ、D列以降にもコピーされてる状態にしたいのです。 可視セルへのコピーはマクロを組む必要があると聞いて見てるのですが、 私が実現させたい可視セルへのコピーとまた違うプログラムでした。 どなたかよろしくお願いします。

専門家に質問してみよう