MicrosoftエクセルでマクロVBAを使って特定の行を抽出する方法

このQ&Aのポイント
  • MicrosoftエクセルでマクロVBAを使って特定の行を抽出する方法をご紹介します。プログラムがわからなくても大丈夫です。
  • sheet1、sheet2、sheet3の各シートから特定の条件に該当する行を抽出する方法を説明します。抽出された行はsheet4に貼り付けられます。
  • プログラムを実行するためには、モジュールmoduleにコードを貼り付けるだけで終わります。簡単に特定の行を抽出することができます。
回答を見る
  • ベストアンサー

Microsoftマイクロソフトのエクセルでマクロ

MicrosoftマイクロソフトのエクセルでマクロVBAをやりたいです。 プログラムがちょっとわかりません。 sheet1、sheet2、sheet3を参照します。各sheetの中は写真のようなデータが入ってます。 sheet1から始めます。 列Aの3行から23行までをみます。 ◯が書いてあったら、その行をsheet4に貼り付けます。 順次、23行まで繰り返します。 次のsheet2も同じ事を繰り返します。 次のsheet3も同じ事を繰り返します。 sheet4に◯が書かれた行の一覧が出来れば成功です。 可能でしょうか? 出来れば、モジュールmoduleに貼り付けるだけで終わるようにプログラム教えてもらえますか?

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.2

No1の追加です。 モジュールのコードを記載する画面の一番上に Option Base 1 を追加してください。

yahoomode
質問者

お礼

ありがとうございます。出来ました。

その他の回答 (3)

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

これこそ丸投げの質問で、まる写しを希望しているが、もう少し本なり、WEBの例題を調べて、勉強して、行き詰まった点に絞って質問すべきだ。 適した一部の人を除いて、例えスクリプトでもプログラムの独学は時間がかかり難しいと思う。そっくりのコードを書いてくれでは、進歩しないと思う。 ーー それに添付画像がぼやけて読みにくい。回答者は、テストデータで自分のコードをテストして、確認すると思うが、そのテストデータ作りを回答者にやれというのは手数がかかる。 下記のような質問の書き方を参考にしてみて。 ーー 例示するのは、シート数は複数の場合2,3シートで済むし、行数も4-5行程度あれば済むことが多い。 ーー テストデータ(セルにコピー貼り付けして、データー区切り位置でセルにバラける) Sheet1 A-D列 1a x1 x1 ○ 2a x2 x2 3a x3 x3 4a x4 x4 5a x5 x5 ○ 6a x6 x6 7a x7 x7 8a x8 x8 Sheet2 A-D列 1b xb1 xb1 ○ 2b xb2 xb2 3b xb3 xb3 4b xb4 xb4 ○ 5b xb5 xb5 6b xb6 xb6 7b xb7 xb7 ○ 8b xb8 xb8 Sheet3 A-D列 ○ 1c XC1 XC1 2c XC2 XC2 3c XC3 XC3 ○ 4c XC4 XC4 5c XC5 XC5 6c XC6 XC6 7c XC7 XC7 ○ 8c XC8 XC8 標準モジュールに Sub test01() Set sh4 = Worksheets("Sheet4") '集約シート j = 2 ’Sheet4での行番号ポインタ,初期設定 For Each sh In Worksheets If sh.Name <> sh4.Name Then '処理対象にしない ’MsgBox sh.Name For i = 3 To 23 If sh.Cells(i, "A") = "○" Then ’ MsgBox i ' sh4.Range(Cells(j, "A"), Cells(j, "C")) = sh.Range(sh.Cells(i, "B"), sh.Cells(i, "D")) '個別セル代入法      'sh4.Cells(j, "A") = sh.Cells(i, "B")     'sh4.Cells(j, "A") = sh.Cells(i, "C")     'sh4.Cells(j, "A") = sh.Cells(i, "D") ' コピー貼り付け法 'sh.Range(sh.Cells(i, "B"), sh.Cells(i, "D")).Copy sh4.Cells(j, "A") ' 一旦配列に代入法 c = sh.Range(sh.Cells(i, "B"), sh.Cells(i, "D")) sh4.Range(Cells(j, "A"), Cells(j, "C")) = c j = j + 1 End If Next i End If Next End Sub ーー 結果 Shee4 2a x2 x2 6a x6 x6 2b xb2 xb2 5b xb5 xb5 8b xb8 xb8 1c XC1 XC1 4c XC4 XC4 8c XC8 XC8 すでに配列に入れる方法が回答があるようだが FOR  EACH法もあり便利な点もある。 何が便利か勉強のこと。 ーー 該当データをSheet4に移すとき (1)Copy・貼り付け法 (2)項目(=列)の各セルを列挙法 (3)ヴァリアント配列法 などがある。この考えは今後、役に立つと思う。 ーーー 手を抜いているが、上記コードで不適当な点がある。何か考えてみて。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

Option Explicit Sub Test() Dim s, t As Sheets Dim i, j, k, l As Integer l = 0 For i = 1 To 3 Set s = ThisWorkbook.Worksheets(i) For j = 3 To 23 If s.Cells(j, 1).Value = "○" Then l = l + 1 For k = 4 To 6 ThisWorkbook.Worksheets(4).Cells(l, k).Value = s.Cells(j, k).Value Next k End If Next j Set s = Nothing Next i End Sub 3つのシートを調べるので「For i = 1 to 3」としています。 調べるシートを「Set」しています(このとき、シートの名前は何でも構いません。左端から、順番に1、2、3となります)。 それぞれのシートの3行目から23行目まで調べます。 「A」列に「○」があれば、「D」列から「F」列を4番目のシートにコピーします。 以上です。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

こちらを貼り付けて実行 シート名Sheet1などは実際のシート名に変更してください。 Sub Example() Dim sh(4) As Worksheet Dim i As Long, j As Long, k As Long Set sh(1) = Worksheets("Sheet1") Set sh(2) = Worksheets("Sheet2") Set sh(3) = Worksheets("Sheet3") Set sh(4) = Worksheets("Sheet4") k = sh(4).Cells(Rows.Count, "A").End(xlUp).Row + 1 If k < 3 Then k = 3 End If For i = 1 To 3 For j = 3 To 23 If sh(i).Cells(j, "A") = "◯" Then ' sh(i).Cells(j, "A").Resize(1, 6).Copy sh(4).Cells(k, "A").Resize(1, 6) ' 書式の設定も移したい場合には↑左端の'を消し↓の左端に'を入れる sh(4).Cells(k, "A").Resize(1, 6).Value = sh(i).Cells(j, "A").Resize(1, 6).Value ' データだけで移す↑ k = k + 1 End If Next j Next i For i = 1 To 4 Set sh(i) = Nothing Next i End Sub

関連するQ&A

  • エクセル マクロ一覧

    開いているブックにあるマクロの一覧を作れないものでしょうか? モジュール、シート、ユーザーフォーム内にあるマクロすべてです。 VBAのチェックシートとして使いたいのですが エクセルバージョンは2003です

  • EXCELのマクロについて

    EXCELのマクロについて質問させてください。 一覧シートから、職種別の各シートへ集計(貼り付け)が出来るような プログラムを作成したいのでやってみたところ、私の知識では上手く出来ませんでした。 お力をお借り出来ると幸いです。 具体的には、一覧シートへ入力後(毎月入力) 『A』 『B』 『E』と分かれた職種別の各シートへ職種別かつ氏名の昇順でソートが掛かった状態で 貼り付け?集計?が出来るようにしたいです。 一覧シートのB列には「A・B・E」のどれかの職種が入力されており 氏名はD列E列へ記載しています。(漢字、カナ表示) A~AD列までデータを記入していますので、全て各シートへ集計出来ると嬉しいのですが・・・ 行は8行目から記載してます。 上記のようにプログラムを組む事は可能でしょうか。 具体的なプログラムも載せて頂けると嬉しいです。 宜しくお願い致します。

  • Excelマクロを削除したのに…

    こんにちは。 いまExcel2003を使用しています。 あるブックファイルにマクロプログラム(VBA)を作成しました。 VBAProjectエクスプローラには標準モジュール「Module1」 ができています。 そこでこのマクロ自体を削除することになり, VBAProjectエクスプローラから標準モジュール「Module1」 を開放しました。 ところが当該ブックファイルを一旦閉じて, 改めて開くと,[セキュリティ警告]ダイアログが表示されて, マクロを有効にするか無効にするかを聞いてきます。 マクロを消したら, マクロセキュリティレベルを変えないままで, 上記のダイアログが出ないようにしたいのですが, どうすれば良いでしょうか? 教えてください。 よろしくお願いします。

  • Excelのマクロで別のシートに追加する方法

    入力するためのシート1からデータをためるためのシート2に入力するものをマクロのボタンでできるようにしたいのですがどのようにマクロのVBA打てばいいのか分からないので教えて下さい。 したいことは、データ4列でシート1の1行目は項目の行にして、 2行目にデータを入力する。 入力したデータを切り取って、シート2の2行目に張り付けて 次のデータをシート1の2行目に入力して 同じように切り取って次は3行目、4行目…というマクロ作りたいんです。 どなたかお願いします

  • マイクロソフト・エクセル97(マクロ)

    マイクロソフト・エクセル97 sheet1上で作った『ユーザー入力フォーム(VB)』を sheet2からマクロの実行をしても、ユーザー入力フォームのデータがsheet2のものになっています。 sheet2からマクロを実行しても、きちんとsheet1のデータを反映させた(データ表示)いのですが、方法がわかりません。   sheets(sheet1).Select の記述をしてはみたのですが…。 とりあえず上の記述でうまくいくのですが、この方法でセーブし終了すると、『不正な処理をしたために…プログラムを強制的に終了します』が出てしまします。

  • エクセルのマクロがどこに格納されているのか分かりません

    Excel2003です。エクセルを開く際にマクロの有効・無効を問うセキュリティ警告が出ます。ですのでこのファイルにマクロが含まれているのは間違いないと思います。 ゴールシークを実行するごく簡単なマクロなのですが、マクロのモジュールがどこに格納されているか分かりません。おそらく基本が分かっていないのだと思いますが、ご教示くださいませ。 ツール-マクロ-VBEを立ち上げると、プロジェクトエクスプローラに表示されるのは次のとおりで、モジュールが表示されません。 funcres (FUNCRES.XLA) VBAProject (ファイル名.xls) └Microsoft Excel Objects  └Sheet1 (Sheet1)  └ThisWorkbook このファイルは2枚のシートで構成されており、計算式などが記述されているSheet1と下記3行の記述があるMacro1です。 ツール-マクロ-マクロ-編集を実行すると、Macro1シートのセルに飛びます。そのシートには1列3行の記述があり、次のとおりです。マクロの実行で飛ぶのは一番上の行です。 Record1 =GOAL.SEEK("R4C5",0,"R4C8") =RETURN() ちなみに"R4C5"に記入されているのが式、"R4C8"に記入されているのが変数、式の値の収束目標値はゼロです。 Record1が記入されているセルは名前が定義されています。名前はRecord1です。 何となくVBEのモジュールに記載されるはずのものがMacro1シートに記述されているような気がしますが、よく分かりません。参考書などを引いたのですが、分かりませんでした。等号があるので関数かと思いましたが、GOAL.SEEKやRETURNという関数はありませんでした。 要領の悪い質問で申し訳ありませんが、ご教示よろしくお願いいたします。

  • エクセルのマクロについて教えて下さい。

    皆様よろしくお願いします。シート1に5桁の管理番号が不規則に並んでいます。およそ230個の管理番号があります。シート2には管理番号とデータが一覧表になっています。シート1の管理番号の下2行にシート2を参照する式(=sheet2!H3および=sheet2!W3)を手打ちで入れています。エクセルのマクロを使ってシート1の管理番号の下に値を入れるのではなく式を入れることはできますか。なお、シート1は横のセルが80、縦のセル150の中に管理番号が不規則に並んでいます。シート2にはB列に管理番号H・W列にデータが並んでいます。このようなファイルが80位ありますので手打ちではなくマクロで自動化を図りたいと思います。officeXPを使用しています。よろしくお願いします。

  • マクロで教えてください。

    つい先ほど、色を塗るというマクロは教えていただきました。 http://okwave.jp/qa/q7829474.html 次に、sheet1のA列にある図番を参照しsheet2のA列の機種名に適合しない行全体を 削除したいのですが、可能でしょうか?

  • Excel97のマクロについて

    Excel97で動くマクロプログラムがあります。 Ctrl+aでマクロが起動するようになっており、いろいろ動くのですが、Excel2000で起動しないため、起動するように直してほしい、と依頼を受け、Excel2000で開き、Moduleの中身を見てみたのですが、中身が空っぽです。もちろん各シートやThisWorkbookの中も一つ一つ開いて確認しましたが記述が何もありません。(ツール→マクロ→マクロで見てもありません) ただ、シート上に”マクロプログラム”という記述があり、 \A {GOTO}A40~{GOTO}C45~  /WTB {IF CK27=1}/RVCG14..CV14~CG31~ ・・・ といった記述があり、どうもこれがプログラムのようなのですが、どういう仕組みでこのExcelが動いているのかまったくわかりません。 ちなみにExcel97でModuleを見ても中身は空っぽでした。 このマクロプログラムについて何か情報をお持ちの方、教えてください。よろしくお願いいたします。

  • エクセル マクロのいれ方

    エクセルを使って表を作っています。 自分のしたい事をするには、マクロを組まなくてはならないことが分かりました。 私はマクロは使ったことがないので、本来ならちゃんと勉強すべきなんですが、締め切りが迫ってるので、マクロのVBAを調べました。 したいのは、『ロックされているセル以外のデータをクリアにする』ということなんですが、その為には下記のVBA?を入れればいいらしいのです。 Sub UnlockCellClear() Dim Rng As Range For Each Rng In UsedRange   If Rng.Locked = False Then     Rng.Clear     Rng.Locked = False   End If Next End Sub ツール→マクロ→VBA→標準モジュール→Module1を開き、上記のVBAを入れてみましたが出来ませんでした。 そんな簡単なことじゃないんですかね? ど 質問の説明が下手でしたら申し訳ありません。

専門家に質問してみよう