• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ 複数条件と部分一致)

エクセルマクロで複数条件と部分一致検索の方法

keithinの回答

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>例えば、xlpart、Match、Index、Offset を使い… そういったやり口ではない,簡単な方法で。 #ただし簡単のため「複数ヒットの場合の採用基準」を変更しています #簡単のため,シート1,2ともに「1行目にタイトル行」「2行目から実データ」というレイアウトを仮定します。常識的な作表と判断しています。 サンプル: Sub macro1()  Dim h As Range  Application.ScreenUpdating = False   ’シート2のデータを巡回  For Each h In Worksheets("Sheet2").Range("A2:A" & Worksheets("Sheet2").Range("A65536").End(xlUp).Row)  ’該当データの抽出   Worksheets("Sheet1").Range("A:B").AutoFilter field:=1, Criteria1:="*" & h & "*"   Worksheets("Sheet1").Range("A:B").AutoFilter field:=2, Criteria1:=h.Offset(0, 1)  ’転記   h.Offset(0, 2) = Worksheets("Sheet1").Range("A65536").End(xlUp)   h.Offset(0, 3) = Worksheets("Sheet1").Range("C65536").End(xlUp)  Next  Worksheets("Sheet1").AutoFilterMode = False  Application.ScreenUpdating = True End Sub

iceblue88
質問者

お礼

keithin様はどれくらいのご経験なのでしょうか。どうやったら、このように書けるか勉強方法を教えていただきたいくらいです。こちらは1ヶ月の経験です。すぐ動かすことができました。1行1行理解していきたいと思います。ありがとうございます。

関連するQ&A

  • エクセル 複数の条件に一致

    複数の条件に一致したセルの内容によって、別のセルに別の文字を自動で表示したいのですが可能でしょうか? 詳細はこのような形で、 【シート1】       A     B       C 1      0001     3/1    有 2      0002     3/1    無 3      0001     3/2    不明 【シート2】       A     B       C 1             3/1      3/2 2      0001       ○      △ 3      0002       ×     "空欄" ・シート2のB2からC3を自動で表示できるようにしたい。 ・シート1のA列とシート2のA列が一致、更にシート1のB列とシート2の1行が一致。 ・シート1のC列が「有」の場合「○」、「無」の場合「×」、「不明」の場合、「△」、「空欄」の場合、「"空欄"」と表示。 知りうる限りの関数を合わせてみましたが、できませんでした。 どなたかいい方法を教えて頂ければと思います。 環境はXPpro、エクセル2000です。 宜しくお願いします。

  • エクセルでセルの条件が一致したら、値を挿入したい

    エクセルで2つのシートの2つのセルの条件が一致したら、シート2の該当の部分をシート1に挿入したいのです。 例 Sheet1 A    B    C 1 社員A 100 2 社員B 200   3  社員A 500 Sheet2 A    B    C 1 社員B 100  休み 2 社員B 700  勤務 3  社員A 100  夜勤   というような2つなシートがあり(実際には、セルの行数は3000行くらいあります) Sheet1,Sheet2の比較をしてA列、B列の値が一緒である場合、シート1にシート2の該当部分を C列に挿入したいのです。 たとえば、シート1のC列に数式をいれることになるかと思うのですが、 シート1とシート2を比較すると、   シート1のA1・B1の【社員A 100】とシート2のA3・B3の【社員A 100】が一致しているので、シート2のC3の【夜勤】をシート1のC列のC1(該当する同じ行に挿入)に挿入したいのです。 どういった式をいれたらいいかわからないので、どなたかおしえていただけたら助かります。 よろしくお願い致します。 知恵をお貸し下さい。 非常にこまっております

  • Excel マクロで同じワークシート内で複数の条件が一致するものを

    Excel マクロで同じワークシート内で複数の条件が一致するものを 抽出する方法がありますか。具体的にはワークシート構成は|31日| 30日|29日|・・・|2日|1日|7月集計|品目別集計|となっています。 例として11日シートのC29にバナナ(品目)、E29に国産(規格)、F29 に20(数量)とあった場合に搬入品目別集計シートの同じ行にあるB 列(品目)、E列(規格)の一致するものを検索して該当する行より下 の最初のA列の空白に平成22年7月11日(搬入日)、同じく最初のB列 の空白(搬入日と同じ行になる)には20(数量)を出力する。12日シー トにC29バナナ、E29国産、F29に16とあれば搬入品目別集計シート に出力(平成22年7月11日の下にくるように)するという具合にする ことは可能でしょうか。品目もバナナ・メロンなど複数あり、規格 も国産・台湾産などと複数あるので11日シート(12日シートも同じ) のC29~C58、E29~E58の中で同じ行にあるものを品目別集計シー トのB列(品目)F列(規格)の同じ行にあるものを検索して出力させる。 うまく表現できませんが11日シートなどに日毎に搬入したものを入 力したときに、搬入品目別シート(先に必要な分の品目・規格を入力 した表を先に作成してある)のなかを検索して一致するものを品目毎 ・搬入日順に搬入数量を出力させる作業を手作業ではなく自動的に行 いたいのですが可能でしょうか。長文になりましたが初心者なので 具体的に教えていただきたいのですがどなたか宜しくお願い致します。

  • EXCELで2つ条件で1つが部分一致のとき

    Excelの2003バージョンです。 現在使用しているファイル名「会社」シート名「支社」のセルE12に 同じシート上のD12(同じ行ですね)と ファイル名「埼玉」シート名「データ」のA列の中の値と一致(完全一致)して なおかつ、シート名「支社」のF3の値(例・後1、後2)とシート名「データ」の C列の値(例・後1 第23号)と部分一致をした時に 使用中シート「支社」のE12に●、していない時は空白にしたいのです。 ファイル「会社」シート名「支社」 行数 --A列----B列----C列-----D列----E列----F列---- 1                             11223344  (ここに関数)  後1 ファイル「埼玉」シート名「データ」 行数 --A列----B列----C列-----D列----E列----F列---- 10   11223344         後1 第23号  11   11223344         一般会社 第44号  のような場合はE1に●になるようにしたいのです。 それ以外は空白で。 あまり詳しくないので、よろしくお願いします。

  • excel マクロで複数シート検索し行をコピー

    excel2010 マクロで下記のようなことをしたいのですが どのようにしたら良いか教えていただけないでしょうか? (1)sheet1のA1を検索用の欄とする (2)sheet2・sheet3・sheet4にはそれぞれデータを入力しておく (A列~H列 まで使用し、行数は多くても500程度) (3)sheet1のA1に検索したい単語を入力することで、sheet2・sheet3・sheet4全てのA列を検索する (4)一致(部分一致)したら、その行をsheet1の10行目以降にコピーする なお複数ヒットすると思われるため、複数ヒットした場合には行を追加しながらコピーしたいです。 マクロでは無理なのでしょうか? どのように書いたらよいか、参考になるHPでも助かりますので、教えていただきたく よろしくお願いします。

  • エクセル複数条件一致の数式

    質問失礼します。 下記のエクセルデータから、E列のセルに、条件にあわせて5か6、もしくは空白を表示させる数式を作りたいと考えています。 条件として セルE2に5を表示さる場合 D2がa4の時、A列から、同じa4を検索し、この場合は、行10と行11が該当します。 その該当する行から、 セルD2の文字列a4がある行のA列のセル、この場合は、セルA2のa1 と文字列が一致するセルB11の11行目が選択され、その行にあるC列の数字を、E2セルに表示させたいです。 E列に入れる数式は作ることが可能でしょうか? 色々試してみましたが、どうしてもうまくできませんでした。 よろしくお願いします。   A  B  C   D    E 1        2 a1  a2   5    a4   5 3 a1  a3       a3   6 4 a1  a1       5 a2  a3   5    a1   5 6 a2  a1       7 a3  a1   6    a2   5 8 a3  a1       a4   6 9 a3  a4   5    a2   5 10 a4  a3   6    a3   5 11 a4  a1   5    a2

  • エクセル マクロ:部分一致検索

    教えてください。 sheet1のA列に時間データがあります。A列は書式設定でhh:mm:ss.00にしています。 sheet2のA1に時間を表示しており書式設定でhh:mm:ssにしています。 sheet2のA1と部分一致する時間を、sheet1のA列から検索するマクロを作成しています。 (複数ある場合は初めに該当するセルの行を表示) sheet2に下記のコードを入力しており、実行すると「オブジェクト変数またはwithブロック変数がされていません」と表示され困っています。 ご教授のほどよろしくお願い致します。 Sub 検索() Dim Jikan As Date Dim Row1 As Integer Jikan = Sheets("sheet2").Cells(1, 1).Value Row1 = Sheets("sheet1").Range("A:A"). _ Find(What:=Jikan, LookAt:=xlPart).Row MsgBox Row1 End Sub

  • 一致するデータを複数シートから別のシートへ移動

    Sheet1~Sheet3を用いて、 Sheet1とSheet2でそれぞれのC列の項目が一致するデータを抽出し、 該当するデータの Sheet1B列⇒Sheet3D1 Sheet2A列⇒Sheet3A1 Sheet2B列⇒Sheet3B1 Sheet2C列⇒Sheet3C1 に移動するためのマクロを組みたいと思っています。 Sheet2からSheet1に検索をかけて、 Sheet2C列≠Sheet1C列であればSheet2のA1行を削除していき Sheet2C列=Sheet1C列であれば Sheet2A~C列をSheet3A~C列へ移動するところまでは出来ました。 ※なお、Sheet3のA1行に文字列があればセルを1行追加する設定にしています。 しかし、それはA1行の文字列をそのままコピペしているだけなので Sheet1B列の一致データをSheet3D1へ移動するやり方が思い浮かびません…。 Sheet2と同じくA1行を削除していこうとしてもうまくいきませんでした。 どんどんマクロも指示文ばかりが増えてわけが分からなくなってきてしまい、挫折しています。 シンプルにするにはどうすればいいでしょうか? また、マクロの内容を載せたいのですが 会社の業務端末で組んでいるため転記できません; 申し訳ありませんが、どうかご指導ください。

  • マクロ 複数キーと一致する行を条件選択、フラグ入れ

    ご質問です。 複数キー中1つ以上のキーが部分一致する行(複数列で構成)を選択し、フラグを入れたいです。 下記の例で言いますと、Sheet1の1行に、Sheet2の列中の1つ以上が部分一致する場合、1と記入したいと思います。 (Sheet1)  A     B      C      D       E           B          C 1)                     (条件1チェック) (条件2チェック)(条件3チェック) 2) 犬あ  猿い   う鳥   え魚       1         1 3) 豚い  熊え   ね兎   蛇ら                            1 4) 猫た  龍さ   魚み   羊り       1                     1 ・・・・500件続くアンケートです。 (Sheet2)  A       B       C   1) (条件1)  (条件2) (条件3) 2) 犬     猿     豚 3) 猫     馬     羊 4) 狐     牛     熊 FindとLoopで作ってみましたが、上記で言うところのSheet1の先頭行しか検索してくれませんでした。どなたか、FindとLoop(またはFor)で教えてくださいますでしょうか。 ↓できなかった私の作成物 With WS(2).Range("a2:c5") Set c = .Find(What:=myKey, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing Then fAddress = c.Address Do WS(2).Cells(m,1).vakue=1 Set c = .FindNext(c) If c.Address = fAddress Then Exit Do Loop 3日悩んで、大変困っております。よろしくお願いします。(OS:WindosXP、Office2003)

  • エクセルのマクロで指定条件一致行をグループ化したい

    エクセル2007を使用しています。 次の様なシートで、特定列で条件(ブランク)に一致する行を一括して グループ化するコードを教えてください。      A       B      C       D 1    コード  科目      実績   予算 2   5000  販売収入    100    90 3   5001  受取手数料    4   5002  その他収入 5      【売上高】 100    90 この様な会計の管理帳票で、1シート約800行あり、シートが部門毎に 全部で約100シートが一つのブックに収めてあります。 全部のシートに対して、例えばC列がブランクの行を一括してグループ化 させる様なマクロのコードを教えていただきたいと思います。 (この場合だと3~4行目) 他の部門では使わない補助科目が多く、折りたたまないと使い物に ならないため、現在は手作業で行っております。 どうぞよろしくお願い致します。