• ベストアンサー

Excel VBAで会員データをある条件で振り分けたい

大変困っているので助けてください。 A列に「会員番号」、B列に「名前」、C列に「住所」・・・と言った感じのデータがあります。 Input BoxまたはUser Formを使って会員番号を入力し、該当したときにその隣(例えばD列)に「1」などの値を入力できる方法。 または、上記のデータと別のデータ(項目は同じ)を照合し一致しない物を別のシートに表示するという形でもいいです。 仕事で早急に必要なのですが、VBAの知識があまり無いのでいろいろ試行錯誤しましたができません。 お願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> A列に「会員番号」、B列に「名前」、C列に「住所」・・・と言った感じのデータがあります。 これをSheet1とします。 > 上記のデータと別のデータ(項目は同じ) これをSheet2とします。 > 一致しない物を別のシートに表示 これをSheet3とします。 Sheet1にあってSheet2に存在しない会員番号のA~C列をSheet3に表示するVBAです。 Sub test() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") For i = 1 To sh1.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row Set x = sh2.Columns("A").Find(What:=sh1.Cells(i, "A"), LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) If x Is Nothing Then r = r + 1 For n = 1 To 3 sh3.Cells(r, n) = sh1.Cells(i, "A").Offset(0, n - 1).Value Next n End If Next i End Sub Sheet2にあってSheet1にないデータもちょっと応用すればこれで出来ますよね?

furaipan
質問者

お礼

ありがとうございます。 思っていた以上にスムーズに処理ができました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

こんにちは。KenKen_SP です。 > Input BoxまたはUser Formを使って会員番号を入力し、該当したときにその隣 >(例えばD列)に「1」などの値を入力できる方法。 ご参考までに。 '// InputBox で会員番号を入力し、該当セルの行D列に1を書き込む Sub Sample1()   Dim strCode As String   Dim rngSA  As Range   Dim rngFC  As Range   Dim Sh   As Worksheet      '検索するシートを定義   Set Sh = ThisWorkbook.Sheets("Sheet1")        '検索する受付番号を取得   '0で始まる文字列の数字があるかも知れないので文字列型変数で受ける   strCode = Application.InputBox("会員番号を入力", Type:=2)   'キャンセルボタンクリックなら終了   If UCase$(strCode) = "FALSE" Then Exit Sub   '会員番号の検索範囲を取得   'Sheet1の使われている範囲とA列の交差範囲=検索範囲   Set rngSA = Intersect(Sh.UsedRange, Sh.Range("A:A"))   '検索範囲から入力された会員番号を探す   Set rngFC = rngSA.Find(What:=strCode, LookAt:=xlWhole)      If rngFC Is Nothing Then     '該当番号が無ければ警告を表示     MsgBox "該当する会員番号はありません!", vbCritical, "エラー"   Else     '該当番号があれば変数 rngFC には見つかったセルがセットされている     'そのセル(A列)からOffset(行,列)で3つ横=D列のセルに1を書き込み     '移動する     rngFC.Offset(0, 3).Value = 1     Application.Goto Reference:=rngFC   End If   '変数をクリア(オブジェクト変数はできるだけ明示的にクリアして下さい)   Set rngFC = Nothing   Set rngSA = Nothing   Set Sh = Nothing End Sub

furaipan
質問者

お礼

非常に参考になりました。 説明付きでわかりやすかったです。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row '--- Do n = InputBox("会員番号=") If n = "99999" Then Exit Sub '終わり fnd = "n" For i = 1 To d If Cells(i, "A") = Val(n) Then Cells(i, "D") = 1 fnd = "y" End If Next i If fnd <> "y" Then MsgBox n & "は見つかりません" End If Loop End Sub 一番初歩的なロジックで。 データ数が多く、反応がいらいらするぐらい遅い場合は、他の方法を使ってください。

furaipan
質問者

お礼

ありがとうございます。 初心者の私にはわかりやすい内容でした。 が、imogasiさんの言うとおり「反応が遅い」と言うより、 フリーズしてしまいました・・・ せっかく教えていただいたのにスミマセン。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • Excelデータの照合

    Excelデータの照合 こちらでも色々調べさせて頂いたのですが、自分のデータにうまくあてはめられず困っています。 Excelの元データ、入力データがあります。 元データが正規のデータで、入力データにモレがないか、ミスがないかをチェックする為に 照合をしたいんですけど、どうやったらうまく出来るかわかりません。 是非ご教授下さい。 元データ、入力データ共に2列あり、どちらも A列・・・コードナンバー B列・・・コードナンバーに対応する金額 が入力されています。 これは今現在は同一シート内に抜き出してありますが、元は別シートです。 なので別シートにあるものとして回答頂いても結構です。 入力データの中から、元データのA列、B列共に一致するものだけを抽出することは出来ますか? 不一致もしくは該当するデータがないものと、一致しているものが区別で切れば形式は何でもOKです。 (作業列を増やすとか、色分けするとか、文字で表示するとか) 出来ればVBAやマクロを使わず関数のみでお願いします。 検索を使うからVLOOKUP? 複数条件だからIF?? と色々考えましたが、2つセットで検索をかけるのがどうしても出来ず・・・(-_-;) よろしくお願いします!!

  • エクセルのVBA

    お世話になります。 ただ今,VBAで以下のことに挑戦していますが,行き詰ってしまいました。皆様のお知恵をお貸しください。 1.エクセルで,ある図形をクリックすると,インプットボックスが開き,「顧客番号を入力」と出ます。 2.顧客番号を入力すると,「顧客管理」というシートのD1セルにその番号が入力されます。 3.その顧客番号をもとに「顧客名簿」というシートのデータから,その顧客の住所や性別などのデータがvlookupで引っ張ってこられます。 そこでご相談です。上記の2の操作で,顧客番号を入力後,すぐにD1セルに番号が入力されるのではなく, メッセージボックスでの確認画面「○○さんのデータを表示しますか」(○○には顧客番号に該当する顧客名が入ります)というものを表示させ,OKを押せば,D1セルに番号が入力され,キャンセルを押せば,単純に,メッセージボックスが閉じる という機能を追加したいのですが。ちなみに,現在のVBAは以下の通りです。 Dim ans As String ans = InputBox("顧客番号を入力", "入力", "") If ans <> "" Then Sheets("顧客管理").Select Range("D1").Value = ans End If End Sub これの,どこにどのようなプログラムを追加したらいいのでしょうか。 よろしくお願いします。

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

    VBAかマクロで作成したいと思いますが、あいまい検索ができずに困っております。 どなたかご教授お願いできますでしょうか? 一応画像を添付しておりますが大変見にくく申し訳ないです。  一つのファイルで2枚のワークシートを使用してデータのあいまい検索をしたいと思っております。 画像1の方のワークシートがSheet2になっていてこちらの”I”の列に入力しているデータが画像2になりますが登録商品リストの”G”の列に含まれているかを検索したいと思います。 その結果は”Sheet2”の緑色の部分”I”のセルにデータがあれば”*”をJのセルに表示したいと思います。 登録商品リストには長いもので桁数が30桁近いものもありますがこの桁数を8ケタくらいまでの一致でSheet2のIの列のデータと照合して結果をJに表示できればと思っております。何卒ご教授くださいますようお願いいたします。 照合するデータにつきましては、その日によって件数が違いますので、Sheet2のI列にあるデータが200件くらいの時もあれば2000件くらいの時もございます。 登録商品リストは登録するたびに量が増えていくので照合件数も増えていくことになりますので、どちらも1行指定でできればべすとだとおもっております。

  • エクセル VBAで色塗りについて教えてください

    VBA初心者です。 例えばB列2行目から下に(1)~(7)までの番号を不規則に入力することにより F列11~17行目に1セルずつ右へ色塗りをしていくにはどうプログラムをかいたらよいでしょうか? 番号によって、色塗りの行と色は決まっています。 (1)→11行目、黄色 (2)→12行目、青色 (3)→13行目、赤色 (4)→14行目、緑色 (5)→15行目、白色 (6)→16行目、黒色 (7)→17行目、茶色 また色塗りはF列からBD列までで終了です。 番号の入力回数の多いものが色塗りを早く終了できることになります。 VBAの本をみながら試行錯誤していましたが、うまくできず… どなたか詳しい方、お力を貸してください。

  • エクセル 複数の条件での比較 一致 。困ってます。

    こんにちは。 エクセルでデータの比較、照合の方法で困っています。 A~Cのデータにあわせて  D~Fのデータを照合したいのですが A列の番号とD列の番号が順不同になっており上手く照合ができません。 下記のようなデータが100件以上ありA,B,Cの三つの条件が全て一致するD,E,FのデータにあればOK,ひとつでも違っていればNGと表記させたいのですが、なかなかいい関数が思いつきません。 出来ればVBAではなく関数で表記をさせたいのですが、宜しくお願いいたします。 A  B     C       D E     F 1 りんご  青森 1 りんご  長野 3 みかん 和歌山    2   スイカ  千葉

  • Excel VBA ある範囲内で検索条件に一致したデータを入力する

    Excel VBA ある範囲内で検索条件に一致したデータを入力する Excel2003を使用しています。 Sheet2で選択している範囲内のB列のデータがSheet1で選択している範囲内のB列のデータと一致していたら、そのA列のデータをSheet2のA列に入力するというマクロを作成中ですが、うまくいきません…。 Sheet1とSheet2の選択範囲については、このマクロを実行前に都度選択するようにし、A列のデータは日付、B列のデータは数値です。 以前、示していただいたサンプルを参考にコードを書き換えて試していますが、なかなか思うようにいかず、質問させていただきました。 よろしくお願いします。

  • エクセルのVBA「当てはまる場合、コピー」の方法

    Excell2003のVBAについてお尋ねします。     A1 101  B1 102  C1  A2 102  B2 104  C2 OK A3 103  B3 105  C3 A4 104         C4 OK A5 105         C5 OK ・   ・ ・   ・ ・   ・    ↑     ↑      ↑   もとから  指定する マクロで A列に101から始まる番号が続いています。 B列で番号を入力してボタンを押します。 そうしますと、入力した番号の行にだけC列にOKという文字が入るようできますでしょうか。 イメージとしましては、来場してくれた会員を控えておきたいときに、 A列には会員番号があらかじめ入力されていて、 来場してくれた方の会員番号をB列にどんどん入力していきます。 ボタンを押すとB列で入力した方のC列に「来場」と入力されるような使い方を想定しております。 コピーペーストのVBAとVLOOKUPの数式の知識は(かろうじて)あるのですが、 VBAでどのように行ったらよいかわからずにおります。 お手数ですがよろしくお願いいたします。

  • エクセルでデータを蓄積するVBA

    蔵書管理用の一覧表です。 エクセルでデータ入力用のフォームは作ることができたのですがシートに転記するVBAをどのように書けばよいのか分かりません。 データは次々に増えていきます。 A列には番号を入力せずに自動的に番号が増えていくようにしたい。 3番まで入力済みのあとは、自動で「4」と番号が付与されて、下の行に転記されるようにしたい。 VBA初心者です。よろしくお願いします。 A    B      C          D 番号 分類     図書名      冊数 1   文庫本    日本の歴史   3 2   週刊誌    新潮        1 3   月刊誌    月刊ゴルフ    1

  • エクセルVBA データを別シートに書き込む

    エクセルの、あるシートのデータを、別シートの項目条件の一致するセルに 書き出す方法を教えていただけますでしょうか?  元のシートには  A列     B列    C列 ID番号 年月日番号  金額 ID番号 年月日番号  金額 ID番号 年月日番号  金額  ・      ・       ・  ・      ・       ・ という形で、データが入っています。各列でデータには重複はありますが、   A列とB列の内容が共に同じという行は、ありません。 これを列項目がID番号、行項目が年月日番号の、金額を参照する表にしたいのです。 新しいシートのA列に降順に全ID番号を、1行目に同じく全ての年月日番号をいれ、 元のシートのC列データ(金額)を新しいシートの該当セルに書き込むには どのようにすればいいでしょうか?このような感じで‥。    月日1 月日2 月日3‥‥ ID1 金額  金額  金額 ID2 金額  金額  金額 ID3 金額  金額  金額  ・  ・  ・ 実は元のシートは10枚ほどあり(期間で区切っています)、おまけに各シートには 登場しないID番号もあります。 そこで、すべてのID番号と年月日番号をまとめ、ひとつのシートにしたいと考えた次第です。 1枚のシートならばピボットテーブルで何とかなるのですが、それをまとめようとすると、 データの量が膨大で、PCがとまってしまう(のか計算が終わらない気が‥) VBAを使えば何とかなるのかもと思いまして、質問いたしました。 エクセルは2007です。 どうぞよろしくお願いいたします。

専門家に質問してみよう