• ベストアンサー

エクセル この場合のVBAの書き方教えてください。

顧客情報がsheet2にデータベース化されていて、そのシートのR列に管理上、属性によって顧客を分類する番号が1から8までそれぞれ入力されています。 教えていただきたいのは、シート1上でその分類の数字を入力すれば、別シート、例えばsheet3にそれに該当する顧客だけをsheet2と同じ書式で自動でコピーしてくれるマクロを作りたいのですが、詳しい方いましたらご面倒でしょうがVBAのコードをそのままコピーできるように書いていただけないでしょうか? 情報が不足でしたら補足させていただきますので宜しくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

簡単なサンプルです。都合により、 >シート1上でその分類の数字を入力すれば... この部分はウインドウから直接入力する方法になっています。ご参考までに。 Sub Sample()   Dim rngDB As Range   Dim Sh As Worksheet   Dim intKey As Integer        '元データ範囲   Set rngDB = Sheets("Sheet2").Range("A1").CurrentRegion   '分類番号入力   intKey = Int(Application.InputBox( _     Prompt:="分類番号を入力して下さい(1-8)", Type:=1))   If 1 > intKey Or 8 < intKey Then Exit Sub      Application.ScreenUpdating = False   '転記先初期化   Set Sh = Sheets("Sheet3")   Sh.Cells.Clear   'データ抽出&コピー   With rngDB     .AutoFilter Field:=18, Criteria1:=intKey     .SpecialCells(xlCellTypeVisible) _       .Copy Destination:=Sh.Range("A1")     .AutoFilter   End With   Sh.Activate ExitHandler:   Application.ScreenUpdating = True   Set rngDB = Nothing   Set Sh = Nothing End Sub

hama21
質問者

お礼

早速コピーさせていただきました。動作もばっちりです。本当に助かりました。 自分にはどこが簡単なサンプル??ってくらい高度に感じますよ。定期的にエクセルの質問してますのでまたなにかありましたら宜しくお願いいたします。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

AdvancedFilterで行うのが良いと思います。 ただし、いくつかの条件があります。 番号 データ1 データ2  ←このようにフィールド行が必要です。 1   a    f 2   b   b 3   c   c 3   c   d 3   d   e 4   d   d 次に、条件検索の検索値には、 番号 ←フィールド行が必要です 2 後は、標準モジュールにでも書いていただければ、良いと思います。 最後に、コピーされる場所は、左端上のセルひとつを指定すればよいです。 Sub Test1() Dim DataRng As Range Dim myCriteria As Range Set DataRng = Worksheets("Sheet2").Range("R1").CurrentRegion 'データ領域 Set myCriteria = Worksheets("Sheet1").Range("C1:C2") '条件検索の検索値   DataRng.AdvancedFilter Action:=xlFilterCopy, _               CriteriaRange:=myCriteria, _               CopyToRange:=Worksheets("Sheet3").Range("C1"), _               Unique:=False End Sub

hama21
質問者

お礼

回答ありがとうございました。 無事解決できました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

Sheet2 のR列でオートフィルターを設定し、分類する数字でデータ抽出。その結果をコピーして、Sheet3に貼り付けるれば、良いのではないでしょうか。 マクロでやるのと手間はそう変わらないと思いますよ。

hama21
質問者

お礼

お礼が遅れまして失礼しました。 随時分類ごとに一覧が出来てくれることが目的でしたのでマクロで出来ないかと質問してみました。 実はマクロや関数といった存在を知ってから1ヶ月あまりでしてオートフィルター?って感じなんですよ。 回答ありがとうございました。

関連するQ&A

  • エクセルVBA初心者です。マクロを組んでください。

    エクセルVBA初心者です。組んで欲しいマクロがあります。 Sheet 1に13桁を入力するセル sheet 2に検索したいデータ 手順としては、 Sheet 1のセルにデータを入力 →13桁以上でマクロが開始(されるように設定します) →Sheet 1のセルと同じ数列をSheet 2の列Aから検索 →該当のセルを含む行をSheet 3にコピー →Sheet 1の入力セルの少し下にもコピー (確認用) というのを一回一回ずつやりたいです。 できれば作業中マウスやキーボードを触りたくないので、そのために、マクロの終わわりには入力セル内の消去、マクロの始まりには確認用でコピーした行の削除もつけて下さい。 検索するSheet 2には同じデータが含まれているので、出来ればひとつずつSheet 3にコピーしたいので組み込んで頂けると幸いです。 よろしくお願いいたします。

  • エクセルVBAでデータ検索について

    顧客情報の管理をしようと思っています。 (マクロ初心者です) エクセルのシートを2つに分けて、1つは顧客情報を入力したり検索したりするシート、もう1つは入力した顧客情報を蓄積するシートです。顧客情報を蓄積シートから検索する時に、顧客番号から検索するのですが、それ以外に検索したい時や番号にローマ字が入っている時はどのようなVBAを組めばよいですか? 今参考書のとおりやっていると、 tmpInt = Sheet("入力").Range("C4").Value でエラーが出てしまいます。 数値しか検索しないようになっているからだというのはわかるのですが、それに変わるマクロがわかりません。 教えてください。 また昨日本屋に行き、このような時に対処できる本を探しましたが見つかりませんでした。何か良いのがあれば教えてください。

  • エクセルで検索結果が複数の場合すべて抽出する

    Excelでシート営業とシート顧客の2つがあります。どちらも互いの部署のデータが入っています。 シートの説明をします。シート顧客のD列に部品コード【145847】のような数字が1000以上あり、シート営業にも同じ数字がB列に1000以上ランダムにあり更に同じ数字が出てきます。シート営業のA列には、取引先コードが【123-254】とあり、同じ部品コードでも違う取引先コードがいくつかあります。 そこで私の作りたいのは、シート顧客をベースにして、部品コードD1を検索値として、シート営業の部品コードB列の検索範囲から検索して、ヒットした取引先コードのみをシート顧客の部品コードD1隣空セルに入れたいのです。このとき、検索結果が複数あった場合はさらに隣の空セルにいれたいのです。開きセルE.F.G.H.I.Jのように10個程度必要です。つぎは部品コードD2を検索値として行います。これを1000以上繰返したいので、関数かVBAを考えています。 長くなってすみません。 マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすくプログラムを教えていただきたいのですが・・方法が分からず困っています。 お手数ですが、どうかお教えください。

  • エクセルでデータベース

    最初から「アクセスを使え!!」とお叱りを受けると思いますが、アクセスが無いため、エクセルで何とかしようとたくらんでおります。 本題に入りまして… まず、シート1に顧客リスト(コード、氏名、住所… )と入力してあります。 シート2には顧客毎に請求月日、売上額、値引き等を入力していきます。 シート3には請求月日(毎月5の倍数)を入力します。A列に1月5日、1月10日、1月15日…というように、12月30日まで入力してあります。 ここでデータベースとなる!?わけですが、VBAでフォームをつくり、シート1に入っている氏名から、該当する顧客を選んで、シート2に各項目ごと、データを入力するというものです。シート2に入力する項目の中で、請求年月日はシート3から選ぶようにします。 なお、もしシート1の顧客リストに該当者が無い場合(新規)は、シート1の顧客リストに追加し、追加した後、シート2にデータを入力できるようにしたいです。 ちなみに、顧客数は400件くらいあります。 VBAは超初心者で、命令文などがほとんど理解できないので、勝手でずうずうしいお願いなのですが、説明があると非常にありがたいです。 よくわからない質問をして、なおかつ無謀なことをやろうとしている私に、お力をお貸しくださいm(__)m

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

  • ExcelのVBAで作りたいんです

    Excelのマクロで以下のようなものを作りたいのですが、調べても適当なものが見つからず、どのようなコードを書いたらいいのか分からないので有識者の方のお力をお貸しください。 Sheet1に検索ワードが入力された表を作成しておきます。(表自体は数十行程度で1列だけ) Sheet2にSheet1に書かれている検索ワードがあるかどうかを調べて、該当した場合にはその行を削除する。 もしくは別シートに移動する。 この作業をSheet1の検索ワード行数分自動で処理する。 Sheet2は数百行程度で複数列ありますが、検索ワードが該当さえすれば削除(移動)してしまって構いません。 また、話は変わりますがこのようなものも作りたいのです・・・。 CSVからの整形用マクロがあるのですが、整形処理が終了したら整形済みのシート(例としてSheet2~5)から1つのシートにまとめたい(Sheet1へ)と思っているのですが、データがどこまで入力されているか(Sheet2~5に)の判断と、Sheet1へのコピーでSheet1にどの行までデータが入っていてどの行から追加すればいいのかをお教えください。

  • エクセルVBAでのvlookup関数の使い方

    エクセルでvlook up関数を用いたVBAを書こうと思っているのですが上手くいきません。 詳しい方がいらっしゃいましたら教えて頂けませんでしょうか。 使用しているエクセルは2010です。 いろいろ調べながら書いてみたのですが、繰り返しの処理かエラー処理が悪いようでVBAを実行することが出来ませんでした。 シート1にあるコマンドボタンを押すことで別シート(シート2、3)に入力されている値をもってくるというVBAを考えています。 Sheet1(取扱商品)にはA列に商品番号、B列に商品名、C列に管理者が入力されています。 D~H列には属性1~5というヘッダーだけがあり、コマンドボタンを押すことで、別シートから商品の属性が入ります。 Sheet1(取扱商品) 商品番号 商品名 管理者 属性1 属性2 属性3 属性4 属性5 001  桜   安部 002  薔薇  安部 002  薔薇  伊藤 004  梅   上田 007  水仙  伊藤 010  牡丹  榎本 ...(以下続く) Sheet2(データベース1) 商品番号 属性1 属性4 001  A1  A4 002      B4 004  D1     008  H1  H4 ...(以下続く) Sheet3(データベース2) 商品番号 属性2 属性3 属性5 001  A2      A5 003  C1  C3  C5 004      D3 011  K1  K3 ...(以下続く) 各シートの商品番号は1対1で対応していません。 Sheet1は商品番号が重複する場合があります。Sheet2、3は重複しません。 コマンド実行後のイメージは下記のような形です。 対応する商品番号、属性がない場合はnull入るようにしたいと思っています。 Sheet1(取扱商品) 商品番号 商品名 管理者 属性1 属性2 属性3 属性4 属性5 001  桜   安部  A1  A2      A4  A5 002  薔薇  安部              B4     002  薔薇  伊藤              B4     004  梅   上田  D1      D3         007  水仙  伊藤                     010  牡丹  榎本                     ...(以下続く) 要領が得ないところがあるかと思いますが、皆様のお知恵を拝借致したく、教えて頂ければ幸いです。 どうかよろしくお願い致します。

  • エクセルVBAのAutoFilterについて

    はじめまして。今回初めてエクセルVBAに挑戦していますが、行き詰まってしまいました。 エクセルで顧客管理データベースを作っています。シートの一番上の行に、ID、顧客名、依頼内容、依頼日、処理終了日・・・・などデータベースでいう「フィールド名」を入力し、2行目以下に顧客データを打ち込む形です。 当社では週一回会議で、前の週の新規顧客名の一覧と前の週に処理終了した顧客名の一覧をリストにして配りますが、エクセルVBAを使ってそのリストを作るプログラムを作ろうと試みました。  まず、UserFormを用いて、抽出したい期間(何年何月何日から何年何月何日)をそれぞれTextBox1、TextBox2の値で所得します。そして、開始年月日をDateFromという変数に代入、終了年月日をDateToという変数に代入し、AutoFilterで検索して別シートにコピーするという流れです。  前置きが長くなりましたが、質問です。 1 この変数の定義、つまり DateFrom = UserForm1.TextBox1.value という文で所得しようと思いますが、うまくいきません。書式がおかしいのでしょうか? 2 AutoFilterの使い方を「新しいマクロの記録」を使って見てみると Selection.AutoFilter Field:=10 _ , Criteria1:=">=2004/4/27", Operator:=xlAnd _ , Criteria2:="<=2004/5/10" というかたちになるようですが、>=2004/4/27の部分を変数を使って指定するには、書式はどのようにしたらいいのでしょうか。このまま>=DateFromの形ではうまくいかないようです。

専門家に質問してみよう