エクセルVBA初心者のための条件満たすセルのコピー方法

このQ&Aのポイント
  • エクセルVBAの初心者が、ある条件を満たすセルの内容を他のセルにコピーする方法について教えてください。
  • 特定の列の一部(たとえばE100~200)において、ある条件を満たすセル(たとえば<30)を検索し、そのセルの行にある別の列のセル内容(たとえばA110とB110、およびA130とB130)を別のワークシートにコピーする方法を教えてください。
  • Do~Loopを利用して、エクセルVBAのマクロを作成し、特定の条件を満たすセルのコピーを自動化する方法を教えてください。
回答を見る
  • ベストアンサー

ある条件を満たすセルに対応する行のセル内容をコピーして・・

ある条件を満たすセルに対応する行のセル内容をコピーして・・  いつもお世話になっております。エクセルVBAのほぼ初心者です。 ある列の一部(たとえばE100~200)において、ある条件を満たすセル(たとえば<30)を すべて検索して(たとえばE110とE130)、そのセルの行にある別列のセル内容(たとえば A110とB110、およびA130とB130)をコピーして、別のワークシートのとある場所(たとえ ばB2)に貼り付ける。  というようなマクロを作成したいのですが、自分の力量では難しいのです。。  Do~Loopなどを利用すればよいのでしょうか?  いい方法がありましたらどうぞよろしくお願いいたします。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

Excelに元々備わっている機能を使うなら Sub Macro1()   Dim r As Range      With Sheets("sheet1") '元シート     Set r = .Range("E99:E200") '検索範囲+直上行     .AutoFilterMode = False     'AutoFilterで抽出条件設定     r.AutoFilter Field:=1, Criteria1:="1"     If r.SpecialCells(xlCellTypeVisible).Count = 1 Then       MsgBox "no data"     Else       Intersect(r.Offset(, -4), r.Offset(1, -4)).Resize(, 2).Copy _            Sheets("sheet2").Range("B2") 'コピー先     End If     .AutoFilterMode = False   End With   Set r = Nothing End Sub こんな感じもあります。 シート名やアドレス等は適宜修正してください。 コピー先に既存データがあるなら、コピー前にクリア処理も必要かと。

monsika
質問者

お礼

難しく考えすぎていました。。 そうですよね。オートフィルターを利用すれば割と簡単にマクロが作れますね。 アドバイスありがとうございました。

その他の回答 (2)

回答No.3

「ある条件(<30)を満たす値を、指定した範囲(E100~E200)から抽出し、そのセルの位置(行・列)情報を基に 特定のセル(B列とします)の値を特定のセル(1000~1000+条件を満たすセル値の個数行目のC列)に入力する。」として、回答します。 マクロを記述する前にマクロを記述し易くするための準備をします。 同一シートのセルZ100に[=IF(B100<30,"S","")]と入力し、Z101~Z200にコピーし貼り付けます。 Z列をクリックし、書式設定より非表示にします。 マクロを書きます Dim A,B,C A=Application.WorksheetFunction.CountIf("S", Range("Z100:Z200")) B=0 For C=1 To A B=B+ Application.WorksheetFunction.Match("S", Range(Cells(B + 1, 26), Cells(200,26)), 0) Cells(1000+B,3)=Cells(B,2).Value Next C "S"は目印、Z列は目印置場と考えて下さい。目印及び目印置場は使用者が勝手に決めて下さい。 また、目印を[=CountIf("E$100:E100")]として、 A=Application.WorksheetFunction.Max(Range("Z100:Z200")) B=B+ Application.WorksheetFunction.Match(B, Range(Cells(C + 1, 26), Cells(200,26)), 0) のように記述しても同じことです。 入力するシートがSheet2とすれば、 Sheets("Sheet2").Cells(1000+B,3)=Cells(B,5).Value となります。 ついでに、入力するシートが別のファイルXXXのSheet2とすれば、 Workbooks("XXX").Sheets("Sheet2").Cells(1000+B,3)=Cells(B,5).Value となります。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

コピー先をどうするのか良く分からないけど(結果をくっつけて1つのセルにいれるのか?)、こんなのでどうですか? とりあえずコピー元のセルはくっつけずにそのままコピー先のセルに入れるようにしてみました。 --------------------------------------- Sub hoge() Dim MotoRowNum As Integer 'コピー元シートの行カウンタ Dim SakiRowNum As Integer 'コピー先シートの行カウンタ 'コピー先シートの行カウンタを初期化 SakiRowNum = 1 'コピー元シートの100~200行目をチェック For MotoRowNum = 100 To 200 'コピー元ブックの1シート目のE列が30未満か判定 If ActiveWorkbook.Sheets("Sheet1").Cells(MotoRowNum, 5) < 30 Then 'コピー元シートのA列からコピー先シートのA列にコピー ActiveWorkbook.Sheets("Sheet2").Cells(SakiRowNum, 1) = _ ActiveWorkbook.Sheets("Sheet1").Cells(MotoRowNum, 1) 'コピー元シートのB列からコピー先シートのB列にコピー ActiveWorkbook.Sheets("Sheet2").Cells(SakiRowNum, 2) = _ ActiveWorkbook.Sheets("Sheet1").Cells(MotoRowNum, 2) 'コピーしたときだけコピー先シートの行カウンタをUP SakiRowNum = SakiRowNum + 1 End If Next End Sub

関連するQ&A

  • VBAマクロ・・同一セルの検索と検索したセルの操作

    VBAマクロ・・同一セルの検索と検索したセルの操作  VBAのほぼ初心者です。  決められたセル(たとえばE100)に入力された文字列と同一の文字列を その列内の上(E1~E99)で検索する。 そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。 なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。  というようなことをVBAのマクロで作成したいです。 FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。  いい方法があれば、是非教えていただきたいです。  どうぞよろしくお願いいたします。

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • 複数選択したセルを含む行をまとめてコピー

    VBA初心者です。EXCEL2003を使用しています。 ◆やりたい事  ユーザーにセルを指定させ、そのセルを含む行をまとめてコピーして新規のブックに貼り付けたい。 ◆条件  ・ユーザーが指定できるセルはB列だけにしたい。   (B列以外を選択したらメッセージを表示して再選択させる)  ・ユーザーが指定できるセルは(連続・不連続問わず)最大8個までにしたい。   (未選択 or 8個以上ならメッセージを表示して再選択させる)   ◆完成イメージ  ・ユーザーがセル(ex.B4,B6:B8,B20(=計5行))を選択  ・マクロ実行(コマンドボタンを押す)  ・新規ブックのsheet1.range("A1")に貼り付け(=A1:A5に 貼り付く) こんな感じなんですが、なにとぞ御教授願います。

  • セル内の2行をそれぞれ別のセルにコピーするマクロ

    A列にデータが入力されていたとします。 そのデータのうち、複数のセルで改行されて2行になっています。 改行されているセルをサーチし、1行目をB列のセルに、2行目をC列のセルに分割してコピーしたいと思います。 この様な方法は、マクロで可能でしょうか。 適切な関数があれば、ご教授いただきたいと思います。

  • VBA 条件の一致する行の特定のセルの削除について

    VBA初心者です。よろしくお願いします。 <sheet1>     A  B   C  D  E 1   1 1211 佐藤 10 100 2   2 1344  山田 25 150 3   3 1522 田中  5 80 4   4 1655  高橋 35 200 ・ ・ 100 100 3682 小林 40 300 <sheet2>    A   B 1 1344 2 この様な表があったとします。(見辛くてすみません) "sheet2"A1セルに入力した内容と同じ内容を"sheet1"のB列から検索し、その行のB~Eのセルを削除するにはどのようにしたら良いでしょうか? 例えば"sheet2で"「1344」と入力した場合、"sheet1"の「1344」のある2行目のB~Eのセルを削除するといった感じです。 削除後の空白は詰める必要はなく、マクロを記録させるボタンは"sheet2"に貼り付けます。 色々調べましたがどうにも分からない為質問させていただきます。 よろしくお願い致します。

  • 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で作るには、どのようにしたらいいでしょうか。 よろしくお願いします。

  • Excelで複数条件を満たすのは何行目?

    Excel VBAにてどういう方法があるのか考えています。 A列はHかL、B列は1,2,3のようなデータにおいて  条件1:A列はH  条件2:B列が2 を満たす行は何行目かを探して、C列のその行のセルに コピーしていたデータを貼り付けたい (この場合、2つの条件で重複する行はありません) A列 B列 C列 H  1 H  2  ■←ここへ貼り付け H  3 L  1 L  2 L  3 この場合は、2行目なので、C列の2行目のセルをselectしてpasteしたいのです。 良い方法をご存じの方、よろしくお願いいたします。

  • 色なし行のコピー

    sheet1にA1:E700の表が有り、B列からE列までセルを黄色にした行がランダムに幾つも有ります。このとき、sheet2のA1から上に詰めて色なし行だけをコピーする記述教えてください。(例えば3行目がB列からE列まで黄色のセルだったら3行目はコピーしない)、よろしくお願いします。

  • マクロの条件別分岐について

    集計表のマクロを作成しています。 その際に条件によって、使用するマクロを使い分けたいと思っていますが上手くいきません。 次のように、E列に倉庫コード・G列に数量が表示されている書式を使用しています。 (例)  (E列)(G列) 1  22B  0 2  31A  1 3  54A  0 4  456  40 5  65C  41 6  32B  60 7  33A  40 ※1行目から300行目まで文字が投入される可能性があります。 そして、次の条件によって、使用するマクロを分岐したいと思っています。 「1」.E列で文字列"B"が含まれている   かつ その行のG列の数量が1以上 の組み合わせがある 「2」.E列で文字列"B"が含まれていない かつ その行のG列の数量が1以上 の組み合わせがある 「1」「2」2つの条件に当てはまる場合は「a」の処理 「1」の条件にのみ当てはまる場合は「b」の処理 「2」の条件にのみ当てはまる場合は「c」の処理 (「1」「2」のどちらにも当てはまらない場合は無いので省略) ちなみに処理の内容は次のとおり 「a」:A・B2つのピボットテーブルを作成する 「b」:Bの1つのピボットテーブルを作成する 「c」:Aの1つのピボットテーブルを作成する 例の場合の処理は次のようになります。 ●1行目はセル(E1)は"B"が含まれているが、セル(G1)の数量が 1以上ではないので、「1」にも「2」にも当てはまらない。 ●2・4・5・7行目はE列に"B"が含まれていなくて、G列が 1以上なので「2」の条件 ●3行目はE列に"B"が含まれていないものの、G列の数量が 0なので「1」にも「2」にも当てはまらない。 ●6行目はE列に"B"が含まれていてセル(G6)の数量が1以上 なので「1」の条件 よって「1」「2」のそれぞれにあてはまる行があるので「a」の処理を行う。 セル範囲(E1:G300)の全ての行に関して上記の「1」「2」の条件に当てはまるか検索して、それぞれ当てはまった条件によって「a」「b」「c」の処理を行うようにしたいです。 (例)の場合だったら 6行目まで検索した時点で「a」の処理が決定します。 Select Case のマクロを使用したら良いと思ったが、どのようにマクロを記述したらよいのか解らないので教えていただけると助かります。 イメージとしては Select Case (1から300行目で「1」と「2」の条件に当てはまる行がある場合) 処理「a」を行う。 Select Case (1から300行目で「1」の条件に当てはまる行はあるが「2」の条件にあてはまる行はない場合) 処理「b」を行う。 Select Case (1から300行目で「2」の条件に当てはまる行はあるが「1」の条件にあてはまる行はない場合) 処理「c」を行う。 というところまではわかりますが、括弧の中の記述方法が分かりません。あるいは別の処理があれば教えていただけると助かります。

  • 複数の条件に合う行の特定のセルを返す

    ほぼ同じ質問をいくつか見かけたのですが、その式を自分の内容に置き換えても全く希望通りの結果が出ず、質問させてください。 2 1 Aさん 4 1 Bさん 5 1 Cさん 2 2 Dさん 5 2 Eさん セルのA1には「2」、B1には「1」、C1には「Aさん」と入ったシートがあり、例えばセルのD1に A列、B列ともに「2」が入力されている4行目のC列「Dさん」という値が反映して欲しいのですが、その関数が分からなく困っています。 他にもA列が「5」、B列が「1」の結果が(Cさん)が欲しい時もあり、条件にはA列の値とB列の値を使う方法で考えています。 お知恵を貸してください。

専門家に質問してみよう