• ベストアンサー

EXCELのマクロを教えてください

minato_airの回答

回答No.6

#1 さんの回答に補足+機能追加として Sub 抽出() Application.ScreenUpdating = False Dim i As Long Dim S As Integer S = InputBox("性別はどちらですか?" & Chr(10) & "男 = (1) 女 = (2) 両方 = (3)") Dim N As Integer N = InputBox("年齢は幾つ以上(以下)ですか?") Dim F As Integer F = InputBox("抽出条件は以上ですか?以下ですか?" & Chr(10) & "不等号( より大きい = (1) 、より小さい = (2)、" & Chr(10) & " 以上 = (3)、 以下 = (4)、だけ = (5) " & Chr(10) & "数値でお答え下さい") Sheets("sheet2").Range("A2:D" & Sheets("sheet2").Range("D65536") _ .End(xlUp).Row).ClearContents With Sheets("sheet1") For i = 2 To .Range("A65536").End(xlUp).Row Select Case S Case 1 Sex = "男" Select Case F Case 1 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value > N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 2 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value < N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 3 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value >= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 4 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value <= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 5 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value = N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case Else MsgBox "数値で入力下さい。" End Select Case 2 Sex = "女" Select Case F Case 1 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value > N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 2 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value < N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 3 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value >= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 4 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value <= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 5 If .Cells(i, 2).Value = Sex And .Cells(i, 3).Value = N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case Else MsgBox "数値で入力下さい。" End Select Case 3 Sex = "男" Sex2 = "女" Select Case F Case 1 If .Cells(i, 3).Value > N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 2 If .Cells(i, 3).Value < N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 3 If .Cells(i, 3).Value >= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 4 If .Cells(i, 3).Value <= N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case 5 If .Cells(i, 2).Value = Sex And Sex2 And .Cells(i, 3).Value = N Then .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:= _ Sheets("sheet2").Range("A65536").End(xlUp).Offset(1) End If Case Else MsgBox "数値で入力下さい。" End Select Case Else MsgBox "数値で入力下さい。" End Select Next i End With Application.ScreenUpdating = True End Sub これにより、わざわざ抽出条件を変えなくても、 抽出出来るようになります。 例、女性の20歳以上を求める時など 値はすべて数値で入れるようになってます。

hitosa
質問者

お礼

いろんなことが出来ることにびっくりしました ありがとうございます

関連するQ&A

  • エクセル2000マクロについて

    シートにデータベースの表を作っています。 このデータベースを元にピボットで5つの作られたシートがあります。 データーベースのシートの中のデータが更新されたら、自動的に 5つの作られたシートもデータを自動更新したいマクロを作る場合は どうすればいいのか教えてください。 5つのシートをそれぞれ選んでピボットのデータ更新ボタンを押さないと 5つのシートのデータが更新されない。 これをマクロで自動で5つのシートのデータを更新したい。 よろしくお願いします。

  • Excelで座席表を作る

    Excelで座席表を作っています。 名前や性別などは別のシートに入力してあります。VLOOKUP関数で、番号を入力すると自動的に名前が入るようにしてあります。 それで、「男性なら名前を青に、女性なら名前を赤にする」といった作業をしたいのですが、毎回その席が男性とか女性なら単に書式を変更しておくのですが、そうではないので面倒なのです。 マクロも考えたのですが、ボタンを配置してマクロをボタンに登録することはできても、プログラムを組むことができません。 できればマクロがいいのですが、そのほかにも何かいい方法があれば、教えてください。

  • excel マクロコードを教えていただきたいです

    マクロ初心者のため、単純な動作しか分からず困っています。 以下の表とマクロコードを確認していただき、教えていただきたいです。 ファイル【Book1】の表   A  B  C  D  E  F   G   1                  data1   ボタン1   2                  data2   ボタン2  3                  data3   ボタン3     4                  data4   ボタン4  5                  data5   ボタン5  6                  data6   ボタン6  ・                   ・ ・                   ・ ・                   ・ ※Gの列にはハイパーリンクが並んでいます。 ※ハイパーリンクにて各ファイル(data1・data2・data3・・・・)が開きます。 ※各行の右端にはフォームのボタンを設置しています。 ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ Sub Macro1() Range("G1").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Windows("Book1.xls").Activate Range("A1:F1").Select Selection.Copy Windows("data1.xls").Activate ActiveSheet.Paste End Sub ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ 今の動作としては、ボタン1を押す事でファイル”Book1”のG1のハイパーリンク(data1.xls)が開き、 ”Book1”のA1からF1をコピーして、data1のsheetに貼り付けています。 これで、当初は5行ぐらいの表でしたので、毎回、上記の行番号を変更したコードを入力し、各ボタンに 登録していました。ただ今後、この表の行が多くなるとの事で、毎回、この作業を行うわけにもいかず、 何か良い案(マクロ)があれば教えていただきたいです。 やりたい事としては、マクロの実行にて、ハイパーリンクが立ち上がりその行の内容を、その立ち上がった ファイルのsheet2のセルA1:F1に貼り付けたいと思っています。 例としては、立ち上げたい行(セル)をクリックしておいて、ボタンを押すと上記のマクロが開始するなど・・・。 出来もしないのに生意気で申し訳ありませんが、教えていただけると助かります。よろしくお願い致します。

  • EXCELのマクロでデータをクリアしたい

    仕事でエクセルのマクロを使ってリストを作る作業があるのですが、行き詰まりました。どなたか助けて下さい。お願いします。 表を作るのには二つのマクロを使っています。 【一つめのマクロ】 1.定形のウェブページからテキストをコピーする    内容は商品名や商品番号や数量です 2.エクセルの一番左上に貼り付ける 3.するとマクロが働いて貼り付けたデータはseet1に保存されて自動的に新しいシートが用意される 4.新しいシートに別のデータで1.2.を繰り返す この作業は9回まで繰り返し、一旦エクセルを閉じます。 次に再びエクセルで 【二つ目のマクロ】を立ち上げ、現れた『リスト作成』ボタンを押すと自動的に完成の表が作られます。 最初はこの方法で快調だったのですが、行き詰まりました。 ・行き詰まりその1 一つめのマクロで九つまでコピーペーストするのをくり返して、二つ目のマクロを使うと今までのデータをすべて反映して表が作られてしまいます。うまく説明できないのですが、例えば 月曜にコピーペーストして表完成。 火曜に別のデータでコピーペーストして表を完成させると、必要ない月曜のデータも含めて表が出来てしまう。 これが一つめの困りです。 ・行き詰まりその2 二つ目の困りは、ある日別の社員が一つめのマクロを使ってコピーペーストしていたところ、誤って9つ以上シートを作ってしまったらしく、作りすぎたシートを削除しました。 そうしたらフリーズしたので、再起動してやり直ししたら、そのマクロのファイルを開くたびに、上記の失敗が現れてそれ以上のデータが作ることができなくなりました。(2つめのマクロを動かすと失敗データが上書きされるのみです) 快調な時は表が完成すると、一つめのマクロでは何のデータも残りませんでした。 このような稚拙な説明しか出来ないのですが、どなたかご教授下さい

  • エクセルのマクロについて

    エクセルのマクロについて教えてください。 毎月、データをダウンロードし、VLOOKUP関数などを使って、 必要項目を入れ、ピポットテーブルで合計を出すという 作業をしています。マクロを使ったら、簡単にできるのでは ないかとやってみましたが、マクロで登録しても 毎月集計をするデータの件数が異なるため、 VLOOK関数で入力されるのが、そのマクロで登録したときの ものまでで、残りのセルが空欄になっていたり、 ピポットテーブルの集計は、データの範囲を選びなおしたり しないといけませんでした。 いい方法はないでしょうか。 マクロに作業を記録して、そのシートではなく、 ほかのファイルのシートで 実行する場合は、そのマクロを登録したときのファイル(シート)を 毎回開かなければならないのでしょうか。 基本的なことがわかっていません。 教えてください。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

  • エクセル ツールバーからの呼び出しマクロのシート非表示 

    他部署から受け取った一覧表の内容をチェックするエクセルマクロをツールバーのボタンに割り当てていますが、一覧表を開いておいてボタンを押すとマクロを組み込んだエクセルシート(VBA上でのThisWorkbook.Sheet)が表示されるようになりました。以前は一覧表の裏に隠れていたはずなんですが、目障りなのでこのシートを表示しない方法を教えてください。複数体制なので共有ドライブに置いたエクセルマクロを各自が自分のツールバーに組み込んで使っています。 (アドインでは修正発生時に各自が再度取り込む必要があると思って避けています)

  • excelのマクロについて。

    sheetAにデータの一覧があります。 商品aだったらsheetBへ、商品bだったらsheet3へ・・・ という振り分けをボタン一つでできるマクロを作成したいのですが、 どのようにすればいいでしょうか?(vbはあまりわかりません・・・) sheetAにデータをどんどん追加して、ボタン一つで振り分け・・・・ とういうのが理想です。 良い知恵をかしてください。宜しくお願いいたします。

  • エクセルのマクロ機能について

    もう一度 助けてください エクセルの集計表である列の移動 並べ替えをエクセルのマクロ機能でつくりました ボタンを押すだけで うまくいっていたのですが データーが増え行を増やそうと 前のマクロを削除して また最初から作ろうとしたところ 記録できません 静的変数が64KBを超えたとかでます 編集 削除しようにも実行とキャンセルしか使えません いろいろほん(VBA)を見ましたが 私のレペルでは100年無理です 簡単なエクセルのマクロにも 範囲があるんですか あるひとつのシートだけマクロを残しています 手作業の集計や決まった作業はたいへんです

  • エクセルの検索・抽出マクロについて教えて下さい。

    急遽、会社のマクロ使用可のパソコン(ヴィスタ)で、 検索・抽出のデータ作業をすることになりました。 オートフィルタの貼り付けでは、時間がかかりすぎるということで、 職場の少ない知恵を出し合って考えていますが、なかなか上手くいかず、こちらにも お尋ねさせていただきます。 シート1に、3列(番号、文字、英字)の 『参照データ』があります。 シート2の 『検索する番号』 に番号を入れ、 『検索開始』ボタンを押すと、 シート1の『参照データ』から抽出されたデータが、 シート2に 『検索後のデータ』として表になって出てくるような関数(の場合はボタンなし)か、マクロをつくりたいのですが・・ 更には シート2の『検索する番号』を、番号ではなく 表の真ん中の列の『文字』でも検索できるように(番号でも文字でも、どちらでも検索できるように・・)は出来ないでしょうか・・・ ご回答を、心から お待ちしております! よろしく お願いします (u_u)