エクセルマクロ条件付コピー!初心者でも簡単にできる方法
- エクセルのマクロを使って、特定の条件に基づいて行をコピーする方法を解説します。初心者でも簡単に実行できるので安心です。
- 指定された列にある値をもとに、行をコピーするマクロを作成しましょう。
- マクロを作成すると、特定の条件に基づいて行を自動的にコピーすることができます。処理は一連の流れになっており、40や30という値に応じてシートに行が貼り付けられます。
- ベストアンサー
エクセル マクロ 条件付コピー
マクロ超初心者です。 A列 B列 C列 ・・・・・ BB列 ・・・・ BS列 1行 項番 KEY 2行 1 40 3行 2 20 4行 3 30 5行 4 10 ・ ・ ・ (行数は場合によって変化します / 列は必ずBS列まで) 上記のような表があります。 処理としては・・・ ・もしBB列の「KEY」が「40」の時、その行全体をコピーする ⇒「Sheet2」に貼り付ける (複数貼り付けられる可能性があります) ・もしBB列の「KEY」が「30」の時、その行全体をコピーする ⇒「Sheet3」と「Sheet4」に貼り付ける (複数貼り付けられる可能性があります) ・BB列の「KEY」が「40」と「30」以外であったら、特に処理をせずに抜ける という処理のマクロを教えて頂けると助かります。 過去の投稿や他のサイトなど検索してみたのですが、 知識や応用力がないため大変困っております。 どうぞ宜しくお願いいたします。
- lucky246
- お礼率77% (7/9)
- オフィス系ソフト
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
細かいところの仕様がはっきりしていないので勝手に解釈し、マクロの自動記録をしてみました Sheet4では、Sheet1のデータ範囲を自動的に取り込むよう、少しだけ変更しました 早い話、フィルタオプションの設定を使っただけです。 Sub Macro1() Sheets("Sheet2").Select Cells.Select Selection.Delete Shift:=xlUp ActiveCell.FormulaR1C1 = "KEY" Range("A2").Select ActiveCell.FormulaR1C1 = "40" Sheets("Sheet1").Range("A1:BS5").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("C1"), Unique:=False Columns("A:B").Select Range("B1").Activate Selection.Delete Shift:=xlToLeft Sheets("Sheet3").Select Cells.Select Selection.Delete Shift:=xlUp ActiveCell.FormulaR1C1 = "KEY" Range("A2").Select ActiveCell.FormulaR1C1 = "30" Sheets("Sheet1").Range("A1:BS5").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("C1"), Unique:=False Columns("A:B").Select Range("B1").Activate Selection.Delete Shift:=xlToLeft Sheets("Sheet4").Select Cells.Select Selection.Delete Shift:=xlUp ActiveCell.FormulaR1C1 = "KEY" Range("A2").Select ActiveCell.FormulaR1C1 = "30" '少し実用的にしたA1セルを選択して[Ctrl]+[Shift]+[*]を記録しよう Sheets("Sheet1").Range("A1").CurrentRegion _ .AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("C1"), Unique:=False Columns("A:B").Select Range("B1").Activate Selection.Delete Shift:=xlToLeft End Sub
その他の回答 (3)
- mar00
- ベストアンサー率36% (158/430)
Sheet2~4の1行目はSheet1の一行目と同じ列見出しが あるものとして Sub Macro1() Sheets("Sheet1").Select Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Sheets("Sheet1").Select Range("A" & i & ":BS" & i).Copy Select Case Range("BB" & i) Case 40 Sheets("Sheet2").Select Case 30 Sheets(Array("Sheet3", "Sheet4")).Select Case Else GoTo LINE End Select Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select LINE: Application.CutCopyMode = False Next i Application.ScreenUpdating = True End Sub
お礼
回答ありがとうございました。 問題なく動作しました。 Select Caseの処理をよく理解出来ていなかったのですが、 この回答頂いたことで少し理解出来ました。 あとはおそらく基礎の部分を組み合わせているのかもしれませんが、 処理プロセスのイメージがついていなかったので、 それすら思いつきませんでした。 (言い訳ですね。すみません・・・) とても参考になりました!
- mu2011
- ベストアンサー率38% (1910/4994)
>過去の投稿や他のサイトなど検索してみたのですが、 >知識や応用力がないため大変困っております。 ⇒丸投げの質問はマナー違反です。 「繰り返し」「条件分岐」「行全体をコピー」で検索すればサンプルコードが見つかると思うので一度ご自身で組み立てみては如何でしょうか。 コードの一例です。 FOR i = 2 To 最下行数 Select Case BB列の値 case 40 行コピー case 30 行コピー End Select Next
お礼
回答ありがとうございました。 >丸投げの質問はマナー違反です。 すみません。マクロも初心者なら、このようなところで質問するのも初めてだったので、 その辺のマナーも心得ていなかったです。 すみません。 参考のURLを見てみました。 とても参考になりそうなページでしたので、 後半に頂いたヒントと合わせて、自分で組み立ててみたいと思います。 ヒントを頂いたので、組み立てる最初の道が見えたのは、とてもありがたいです。
- kuma56
- ベストアンサー率31% (1423/4528)
初心者だからって、マクロの作成を丸投げするいうな質問はアウトだろう。 >知識や応用力がないため大変困っております。 やりたい事は質問文でほぼわかったけど、"大変困っている"のは具体的にどの部分ですか? >過去の投稿や他のサイトなど検索してみたのですが・・・・・ その結果自分なりには、どこが出来てどこが判らないのかな?? >・もしBB列の「KEY」が「40」の時、・・・・ >・もしBB列の「KEY」が「30」の時、・・・・ >・BB列の「KEY」が「40」と「30」以外であったら、・・・・ これはまさに IF構文その物ではないか。 そのどこが判らないのかな? ヘルプファイルの関数リファレンスでも結構役に立つレベルではないか? あとは具体的な手法となるといろいろあるが、例えばBB列の「KEY」でソートして、「40」の部分をごっそりコピーとる(「30」も同様)方法や、BB列の「KEY」を一行ずつ見に行って、「40」ならsheet2へ、「30」ならsheet3とsheet4へコピーする・・・というのを Do Loop構文でデータが無くなるまで繰り返すとか? これでも自分で工夫もでいないし判らないようなら、マクロを基礎から学んでみては?
お礼
回答ありがとうございました。 >初心者だからって、マクロの作成を丸投げするいうな質問はアウトだろう。 確かにやりたいことのみを記して、困っていることの具体的な箇所を記していなかったですね。 すみません。 回答の後半にヒントがあったので、それを参考にして工夫してみます。 (マクロの基礎がないので、そこから勉強するしかないのかもしれませんが・・・)
関連するQ&A
- excel マクロで複数シート検索し行をコピー
excel2010 マクロで下記のようなことをしたいのですが どのようにしたら良いか教えていただけないでしょうか? (1)sheet1のA1を検索用の欄とする (2)sheet2・sheet3・sheet4にはそれぞれデータを入力しておく (A列~H列 まで使用し、行数は多くても500程度) (3)sheet1のA1に検索したい単語を入力することで、sheet2・sheet3・sheet4全てのA列を検索する (4)一致(部分一致)したら、その行をsheet1の10行目以降にコピーする なお複数ヒットすると思われるため、複数ヒットした場合には行を追加しながらコピーしたいです。 マクロでは無理なのでしょうか? どのように書いたらよいか、参考になるHPでも助かりますので、教えていただきたく よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセル:下にコピーをマクロで(条件付)
お世話になります。 エクセルでの入力で、「下にコピー」を多用する仕事があります。 以下の例をマクロでやりたいです。 例 まずC列、D列、E列のうちデータが入っている行がもっとも大きい列を判断します。 C10、D12、E13が各列のデータが入っている最大行の場合、E13の13行目が最大になります。このようにE列が最大になる場合、C列はC10の値を13行目まで下にコピー、D列はD12の値を13行目まで下にコピーします。(Ctrl+D) (ここでいう13行目までというのは最大値E13の13を意味します。) また、C12、D15、E11が各列のデータが入っている最大行の場合、D15の15行目が最大になります。D列が最大になる場合は、C列のC12の値を15行目まで下にコピーします。(E列に対してはなにもしない) さらに、C13、D10、E11が各列のデータが入っている最大行の場合、C13の13行目が最大になります。C列が最大になる場合はなにもしない。 C列、D列、E列のうちデータが入っている行がもっとも大きい列が判断できない場合(C14、D14、E12など最大行が同じ場合)の時も何もしません。 これをマクロでやる場合、どうすればよいでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ-条件付き繰り返し
マクロ初心者です。(エクセル2003使用) シート1にある表で、M列が空白以外(処理済みなどの値がある場合)である場合、その行全体をコピーし、シート2の最終行に貼り付けして、シート1からはその行を削除するマクロを作成したいと思っていますができません。 すみませんが、どなたかご教授願います。 (シート1の表) ・8行目が題目となっており、A9から表となっています。 ・表の全体サイズは、横がAからMまでで、縦はC(シー)の管理番号行分までとなっています。(Mは、空欄があったり値(処理済みなどの値)が入っていたりしています) (考えているマクロ) ・Loopの回数は、Cの管理番号が終わるまで ・IFでCに値があり、Mが空欄だった場合は、そのまま(何もしない) ・Cに値があり、Mに値があった場合は、その行全体を選択しコピーし、シート3の最終行に貼り付け、シート1のその行は削除する Sub 処理済み() Range("C9").Select Do While ActiveCell.Value = "" ActiveCell.Offset(1).Select Loop If ActiveCell.Offset(, 10).Value = "" Then そのまま Else If ActiveCell.Offset(, 10).Value = "値があったら" Then その行全体を Select.Copy Sheets("Sheet2").Select Dim 下 下 = Range("A").End(xlDown).Row ペースト 削除 End If End Sub すみませんが、どなたか教えていただけましたら助かります。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- エクセルマクロでセルの値を下へコピーするには
ご教授下さい。 毎日送られてくる項目数の多い表を、必要な項目のみ取り出して表を整理するマクロを組んで使っています。しかし、日によって行数が違う為、ある列に数式を入力して下へコピーする場合、マクロ操作が終わってからオートフィルを使って下へコピーしています。行数が違っても行数分だけ下へコピーできるマクロを教えて下さい。何卒よろしくお願い致します。 A列 B列 C列 D列 E列 1行 豆 10入 2個 100円 (数式CXD)200円 2行 飴 20入 3個 150円 (数式CXD)450円 3行 餅 10入 4個 100円 (数式CXD)400円 4行 麦 15入 2個 200円 ↓ 5行 米 20入 4個 100円 ↓ 上記のような表でE列の数式を下へコピ-するマクロです。 日によって行数に違いがある場合でも行数分だけ 下へコピー出来るマクロを教えて下さい。
- ベストアンサー
- その他MS Office製品
- Excelのセルのコピー マクロ
一つのBookに複数のワークシートが入っています。 それぞれのワークシートのセルのA1からそれぞれのワークシートの A列に値が入っています。 (ワークシートの最終行はそれぞれ違います。) それぞれのワークシートのA1の値を、ワークシート毎に最終行まで コピーしたいのですがどのようなマクロを組めばよいでしょうか? A1の値は、ワークシート毎に異なっています。
- 締切済み
- その他MS Office製品
- エクセルで変化する行数に対応してコピーするマクロ
エクセルワークブックAを検索して見つかった範囲をワークブックBのシートとセルを指定して転記するマクロ。 このようなマクロコードを教えてください。 ブックAのシート1に以下のような配置で文字と数値が入っています。 A列 B列 C列 D列 E列 あいう えお 10 aa かかか 123 20 ss ききき 456 くくく 8910 けけけ 234 こここ 5678 さささ 9123 -------------スペース-------------------------------- かきく けこ 10 aa かかか 123 20 ss ききき 456 30 dd くくく 8910 けけけ 234 こここ 5678 -------------スペース-------------------------------- さしす せそ 10 aa かかか 123 20 ss ききき 456 くくく 8910 けけけ 234 -------------スペース-------------------------------- 上記の様にスペースとスペースの間を1グループとしてコピーしたいのですが、行数が変化します。 また列によって入力されてる行数も違います。 ブックBから操作するマクロでブックAのシート1の”あいう”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート1のA1に貼り付ける。 (あいう えお~9123まで) 続いてブックAのシート1の”かきく”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート2のA1に貼り付ける。 (かきく けこ~5678まで) ブックAのシート1の”さしす”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート3のA1に貼り付ける。 (さしす せそ~234まで) *ブックAのファイル名は固定ですが、ブックBは毎回違います。 マクロの実行はブックBから行います。 この様な条件でのマクロを教えてください。 行数変化に対応している部分に但し書きを付けて頂けると応用が利きますので有難いです。
- ベストアンサー
- オフィス系ソフト
- エクセル:マクロの起動条件
お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。 (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- マクロを使用し、EXCELのデータから必要な部分を取り出し2つのsheetに貼り付けたい
条件 EXCELのデータ A列からL列まで 複数行(行数は、決まっていない) (例) 40行ほどあるデータを見て 1行目から10行目までをsheet1に 12行目から20行目までをsheet2に貼り付けたい場合。 11行目のA列(空白になっている)に手入力で「a」と入力 21行目のA列(空白になっている)に手入力で「b」と入力し、 1行目から「a」のある行までをコピーし、sheet1に貼り付ける 「a」のある行より1行下から「b」のある行までをコピーし、sheet1に貼り付ける 以上のことをマクロで実行する方法を教えて下さい。
- ベストアンサー
- オフィス系ソフト
- マクロ:他シートにデータをコピーしたい
Excelのマクロについてです。 シート1にデータが有り、その中のB列に「済」と記入されている行のみ シート2にコピーして転記したいのです。 これだけなら簡単なのですが データ内には複数行にまたがってのセル結合がされてあったり 図形描写やテキストボックス等も混ざってあります。 それらもまとめてコピーしたいのですが、マクロで何とかなるのでしょうか?
- ベストアンサー
- Excel(エクセル)
- マクロ セルの色を含むシート間のコピー貼り付け
このようなことが、できるでしようか。お教え下さいませんか。 シート1のB2~P列の最終行を取得してコピー、シート2のA2のO列の間に貼り付けたい。 但し、シート1は関数処理していて、シート2には値だけを貼り付けたい時のマクロはどのようなコードにすればよいでしょうか。 また、罫線はそののままコピーして貼り付けたい。 更に、シート1のB2からB列の最終行までは、黄色のセルになっているので、それもシート2のA2~A列の最終行まで貼り付けることってできますか。 お教え頂けますでしょうか。よろしくお願いします。
- ベストアンサー
- Visual Basic
お礼
回答ありがとうございました。 今までマクロの知識がないので、 マクロの記録を多用してきたのですが、 今回の処理も記録で出来るとは思いませんでした。 要はエクセルの知識も必要ということを痛感しました。 また、[Ctrl]+[a]は知っていましたが、 [Ctrl]+[Shift]+[*]も知らなかったので とても勉強になりました。 回答して頂いた処理方法で問題なく動作して、 とても助かりましたし、 今後、処理方法を考える上でのプラスになりました。