• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数条件分岐に関して、お知恵を貸してください(A列)

複数条件分岐に関するデータ処理の方法

このQ&Aのポイント
  • 複数条件分岐に関するデータ処理の方法についてお知りになりたいです。
  • データの条件に応じて処理を行いたい場合、VLOOKUPやIF、DGETなどを組み合わせて試してもエラーが出てしまいます。解決方法を教えてください。
  • 例えば、特定の条件に該当するデータの値を表示したり、他のセルに参照したりする方法が知りたいです。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2です。 >イメージに近いものが出たのですが、出されるデータが少し違っていました。 >返しの結果が異なるのは、資格の並びが不順だからでしょうか。。  はい、資格の並びが不順であるためです。  とは言え、資格の名称が、「A資格」、「B資格」、「C資格」の様なパターンであれば、一旦、B列を基準にしてA~C列を昇順で並べ替えてから、A列基準で並べ替える、という方法も使えるのですが、実際の資格のレベルの順番は、必ずしも資格名の文字コードが若い順番と一致している訳ではないと思われますから、Excelの並べ替え機能に頼るのは得策ではないと思います。  一応、隣の列に関数を使って資格のレベル順に数値を割り振ってから、その列を基準に並べ替えを行うという方法も無い訳では御座いませんが、並べ替えるのを忘れていた場合には、正しい結果が表示されないという難点があります。  ですから、名前と資格の双方とも、順不同に並んでいても問題が無い、以下の様な方法は如何でしょうか?  今仮に、御質問文の例の様な表が存在しているシートのシート名がSheet1であり、Sheet2のA列とB列を作業列として使用して、Sheet1のD列に結果を表示させるものとします。  まず、Sheet2のA列に、上から順番に「A資格」、「B資格」、「C資格」という様に、レベルの高い順に全ての資格名を並べたリストを作成して下さい。(途中に空欄のセルが挟まっていても構いません)  次に、Sheet2のB3セルに次の関数を入力して下さい。 =IF(OR(Sheet1!$A3="",Sheet1!$B3="",COUNTIF($A:$A,Sheet1!$B3)=0),"",COUNTIF(Sheet1!$A:$A,">"&Sheet1!$A3)*10000000+MATCH(Sheet1!$B3,$A:$A,0))  次に、Sheet2のB3セルをコピーして、Sheet2のB4以下に貼り付けて下さい。  次に、Sheet1のD3セルに次の関数を入力して下さい。 =IF(ISNUMBER(Sheet2!$B3),IF(COUNTIF(Sheet2!$B:$B,"<"&Sheet2!$B3)=COUNTIF(Sheet2!$B:$B,"<"&ROUNDDOWN(Sheet2!$B3,-7)),"抽出","UID"&INDEX($C:$C,MATCH(SMALL(Sheet2!$B:$B,COUNTIF(Sheet2!$B:$B,"<"&ROUNDDOWN(Sheet2!$B3,-7))+1),Sheet2!$B:$B,0))&"所有につき無視"),"")  次に、Sheet1のD3セルをコピーして、Sheet1のD4以下に貼り付けて下さい。  以上です。

sunny32day
質問者

補足

kagakusuki様 おはようございます。 昨日はあのままチェックできず、今、再度のご連絡をいただいたことに気づきました。 お礼が遅くなりまして申し訳ございません。 いただいた方法を早速試してみます! ひとまず、取り急ぎ御礼まで。

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

その他の回答 (7)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.8

回答No.5の数式を一部修正して全体を簡略化してみました。 =IF(B3="","",IF(MOD(SUMPRODUCT(MAX((A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*ROW(A$3:A$1000)+(A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*{20000,10000,0})),10000)=ROW(),"抽出","UID"&INDEX(C$1:C$1000,MOD(SUMPRODUCT(MAX((A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*ROW(A$3:A$1000)+(A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*{20000,10000,0})),10000))&"所有につき無視")) 資格のウェイトの値を逆順にしてLARGE関数の代わりにMAX関数を使いました。 また、IF関数の論理式で使っているMOD関数は文字列結合時に使うMOD関数と全く同じ引数なので式中でコピー&ペーストが使えます。 MOD(SUMPRODUCT(MAX((A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*ROW(A$3:A$1000)+(A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*{20000,10000,0})),10000)

sunny32day
質問者

お礼

bunjii様 いただいた式の資格を追加して行ったところ、出てきました! 資格の種類が15に上るので、今回は別の式にて対応いたしましたが、いただきました解も、今後に生かしたいと思います。 教えてくださって本当にありがとうございました。

sunny32day
質問者

補足

bunjii様 再度のご回答ありがとうございます! こちらも試してみます! 1つのことを処理するのにも、色々な出し方が考えられるんですね。 とても勉強になります。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.7

 実際の資格のレベルの順番は、必ずしも資格名の文字コードが若い順番と一致している訳ではない以上、御質問の処理を行うには、作業列と関数を併用するか、配列式を使うか、SUMPRODUCT関数を使うか、の何れしか方法は御座いません。  但し、配列式やSUMPRODUCT関数は、データの数だけ繰り返し計算を行う事で結果を求めるという処理の仕方をしていますので、普通のやり方で作られた配列式やSUMPRODUCT関数の場合、式の中においてA列~C列のセル範囲として指定している行数が多ければ多いほど、繰り返し計算の回数が多くなり、処理に時間が掛かる様になるという短所があります。  SUMPRODUCT関数の一例として、SUMPRODUCT関数を用いて、A3:B1000の範囲内で、A列の値がA3セルの値に等しく、B列の値がB3セルよりも大きな値となっているデータの数をカウントするという、複数条件のカウントを行う関数を挙げますと、 =SUMPRODUCT(($A$3:$A$1000=$A3)*($B$3:$B$1000>$B3)) という関数になりますが、この場合には、3行目のデータに関して計算を行ってから、4行目のデータに関して計算を行い、続いて5行目のデータに関して計算を行い、・・・ という事を繰り返して行きますので、似た様な計算を998回も繰り返す事になる訳です。  そこで、同じくSUMPRODUCT関数を使用していながら、繰り返しの対象としているデータの数が、A列~C列の行数によってではなく、資格の種類の数によって決まる様にする事で、高速化を図った関数を考えてみました。  但し、SUMIFSIFS関数を応用しておりますので、C列のUIDの値が数値で入力されている必要がありますし、ExcelのバージョンがExcel2007かそれ以降のものが必要となります。  又、同一人物のデータの中で、B列の資格のレベルが最も高い資格となっている行が、万が一、重複して複数存在している場合には、正しい結果が得られませんので注意して下さい。(「無視」の場合に表示されるUIDの番号がおかしな値となるだけで、「抽出」と「無視」の区別自体は正しく行われます)  まず、D3セルに次の関数を入力して下さい。 =IF(OR($A3="",ISNA(MATCH($B3,{"C資格","B資格","A資格"},0))),"",IF(MATCH($B3,{"C資格","B資格","A資格"},0)=SUMPRODUCT(MAX((COUNTIFS($B:$B,{"C資格","B資格","A資格"},$A:$A,$A3)>0)*MATCH({"C資格","B資格","A資格"},{"C資格","B資格","A資格"},0))),"抽出","UID"&SUMIFS($C:$C,$A:$A,$A3,$B:$B,INDEX({"C資格","B資格","A資格"},SUMPRODUCT(MAX((COUNTIFS($B:$B,{"C資格","B資格","A資格"},$A:$A,$A3)>0)*MATCH({"C資格","B資格","A資格"},{"C資格","B資格","A資格"},0)))))&"所有につき無視"))  次に、D3セルをコピーして、D4以下に貼り付けて下さい。  以上です。  尚、関数中の各所に記述されている{"C資格","B資格","A資格"}の部分は、必ず資格のレベルが低いものから順に記述する様にして下さい。 ※画像に関しては、回答No.3で添付した画像から、Sheet2の部分を削除しただけのものと同様のものとなりますので、今回は割愛致します。

sunny32day
質問者

補足

kagakusuki様 再度のご回答ありがとうございます! Excel、、Version、かなり古いのです。 自分のPC(まだOfficeが入っていない)に、Office買っていれようかと思っているので、そのとき、新しいVersionで、ぜひ試してみたいと思います。 先にご教授いただいたものを、まず、試してみたいと思います。 1つのことを処理するのにも、色々な出し方が考えられるんですね。 とても勉強になります。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>ちなみに、結果は、D2はOK D3は#N/A(ここには「UID1所有につき無視」をしたい) D4は、「抽出」(ここは、「UID1所有につき無視」を返したい) D5は、#N/A(ここには「抽出」を返したい) D6は、#N/A(ここには「UID4所有につき無視」をしたい) D7は、表示なし(ここには「抽出」を返したい) という感じです。 例示のデータはD3セルから始まっていますが、D2セルからなのでしょうか? 実際のデータと同じレイアウトならD3セルに回答をそのままコピー貼り付けすれば、問題なく表示できるはずです。 >例の表では、A資格が一番上になっていますが、実際のデータでは、特にABCと並んでいるわけではないです。 この条件がある場合は(特に資格の数が決まっていない場合)簡単な関数ではできません。 並べ替えで名前を第一優先順位、資格を第二優先順位にして(これが昇順で並べ替えられない場合はユーザー設定リストを利用した並べ替えをする必要があります)並べ替えてください。

sunny32day
質問者

お礼

MackyNo1様 補足の内容も確認、再度の回答をいただきましてありがとうございました。 今回は別の式にて対応いたしましたが、いただきました解も、今後に生かしたいと思います。 教えてくださって本当にありがとうございました。

sunny32day
質問者

補足

MackyNo1様 ご連絡ありがとうございます! 資格の数は、現時点でも15種類登録があります。 並び替えと資格名を増やして試してみます。 どうもありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>データのソートは、A列の人物順になっており、資格ではソートされていません。例の表では、A資格が一番上になっていますが、実際のデータでは、特にABCと並んでいるわけではないです。 条件が難しいので関数式が長くなります。 =IF(B3="","",IF(MOD(SUMPRODUCT(LARGE((A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*ROW(A$3:A$1000)+(A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*{10000,20000,30000},COUNTIF(A$3:A$1000,A3))),10000)=ROW(),"抽出","UID"&INDEX(C$1:C$1000,MOD(SUMPRODUCT(LARGE((A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*ROW(A$3:A$1000)+(A$3:A$1000=A3)*(B$3:B$1000={"A資格","B資格","C資格"})*{10000,20000,30000},COUNTIF(A$3:A$1000,A3))),10000))&"所有につき無視")) 貼付画像はExcel 2013で検証した結果です。 基本的には配列の中から名前と資格で抽出し、A資格、B資格、C資格の順にウェイトを掛けた行番号から抽出要件を満たすものを選別しています。 検索範囲の最大行番号と資格ごとのウェイトは目的に合わせて変更してください。 数式はExcel 2003にも組み込まれた関数の範囲にと思います。 尚、MAEDAさんは資格を逆順にしてありますので結果を確認してください。

sunny32day
質問者

補足

bunjii様 おはようございます。 昨日はあのままチェックできず、今、再度のご連絡をいただいたことに気づきました。 お礼が遅くなりまして申し訳ございません。 いただいた方法を早速試してみます! ひとまず、取り急ぎ御礼まで。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに適切な回答は出ていますが・・・ VBAでの一例です。 資格は3つだけで優先順位は A資格 B資格 C資格 の順とします。 元データはSheet1にあるとします。 Sheet2を作業用のSheetとして使用していますので、Sheet2は使用していない状態にしておいてください。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面(カーソルが点滅しているところ)に ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, lastRow As Long, c As Range, r As Range Dim myRange1 As Range, myRange2 As Range, wS As Worksheet Set wS = Worksheets("Sheet2") lastRow = Cells(Rows.Count, "A").End(xlUp).Row Application.ScreenUpdating = False If lastRow > 2 Then Range(Cells(3, "D"), Cells(lastRow, "D")).ClearContents End If Range("A2").AutoFilter field:=2, Criteria1:="A資格" Range(Cells(3, "D"), Cells(lastRow, "D")).SpecialCells(xlCellTypeVisible) = "抽出" AutoFilterMode = False Range("A:A").AdvancedFilter Action:=xlFilterInPlace, unique:=True Range(Cells(3, "A"), Cells(lastRow, "A")).Copy wS.Range("A1") ShowAllData For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row Range("A2").AutoFilter field:=1, Criteria1:=wS.Cells(i, "A") Set myRange1 = Range(Cells(3, "D"), Cells(lastRow, "D")) Set c = myRange1.Find(what:="抽出", LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then myRange1.SpecialCells(xlCellTypeBlanks) = "UID" & c.Offset(, -1) & "所有につき無視" Else Set myRange2 = Range(Cells(3, "B"), Cells(lastRow, "B")) Set r = myRange2.Find(what:="B資格", LookIn:=xlValues, lookat:=xlWhole) If Not r Is Nothing Then r.Offset(, 2) = "抽出" myRange1.SpecialCells(xlCellTypeBlanks) = "UID" & r.Offset(, 1) & "所有につき無視" Else myRange1.SpecialCells(xlCellTypeBlanks) = "抽出" End If End If Next i AutoFilterMode = False wS.Range("A:A").Clear Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないのでデータ変更があるたびに マクロを実行する必要があります。m(_ _)m

sunny32day
質問者

お礼

tom04様 こんにちは。 VBA知識がまだまだなため、今回教えていただいたものはまだ試せていないのですが、いただきました解も、今後に生かしたいと思います。 教えてくださって本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 例えば、同じ人物のデータの中で、C資格が一番上に来ていて、A資格が後になっている場合には、C資格の行のD列の所を「抽出」とし、A資格の行のD列の所は「UID○所有につき無視」とすると考えて宜しいのでしょうか?  それで宜しければ、以下の様な方法となります。  まず、D3セルに次の関数を入力して下さい。 =IF($A3="","",IF(COUNTIF($A$2:$A3,$A3)=1,"抽出","UID"&VLOOKUP($A3,$A:$C,3,FALSE)&"所有につき無視"))  そして、D3セルをコピーして、D4以下に貼り付けて下さい。

sunny32day
質問者

補足

kagakusuki様 こんにちは。ご回答ありがとうございます。 イメージに近いものが出たのですが、出されるデータが少し違っていました。 返しの結果が異なるのは、資格の並びが不順だからでしょうか。。 A資格、B資格、C資格とあり、それぞれ人物毎に取得している資格は異なります。 B資格だけを持っている人もいれば、AとCを持っている、Aだけ、あるいはCだけ持っているなどばらばらです。 データのソートは、A列の人物順になっており、資格ではソートされていません。例の表では、A資格が一番上になっていますが、実際のデータでは、特にABCと並んでいるわけではないです。 得たい結果は、 (1)それぞれ、少なくとも1つは資格は持っていますが、各人物の所有の資格から、その所有のうちもっとも高いレベルのものを明確化したい。 (2)複数持っている人の場合は、一番上レベルの資格以外の行は「上レベルのものを持っているので、この行はいったん無視した」ことを示すメッセージを表示したい。※そのために、その行を無視する理由になった、所有中の最上位の資格を登録しているUIDを返したい の2点です。 どうぞよろしくお願いいたします。

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

元データが例示のレイアウトなら以下の式でご希望の表示ができます。 =IF(A3="","",IF(COUNTIF($A$3:A3,A3)=1,"抽出","UID"&MATCH(A3,$C$3:$C$100,0)&"""所有につき無視"))

sunny32day
質問者

補足

MackyNo1様 こんにちは。ご回答ありがとうございます。 試してみたのですが、最初の1行以外、Error、または異なる返しになってしまいました。。絶対参照とかを一部はずさないといけないのでしょうか。。 ちなみに、結果は、D2はOK D3は#N/A(ここには「UID1所有につき無視」をしたい) D4は、「抽出」(ここは、「UID1所有につき無視」を返したい) D5は、#N/A(ここには「抽出」を返したい) D6は、#N/A(ここには「UID4所有につき無視」をしたい) D7は、表示なし(ここには「抽出」を返したい) という感じです。

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

関連するQ&A

  • Excel2007 複数条件での検索

    Excel2007で複数条件のデータの抽出について教えて下さい。 現在、シートAにデータが入力され、シートBにデータの抽出を行いたいと思います。 シートAの内容は以下の通りです(アルファベットと数字はセルの場所です): 1行目: 項目欄 2行目以下: データ詳細 1行目 A1 「日付」 B1「名前」 C1「出社状況」 2行目以下 A2 12/01  B2 山田  C2 出社 A3 12/01  B3 佐藤  C3 早退 A4 12/01  B4 木村  C4 出社 A5 12/02  B5 木村  C5 早退 A6 12/02  B6 山田  C6 遅刻 A7 12/02  B7 佐藤  C7 遅刻 ・・・・・ A列の日付は昇順ですが、B列の人名はランダムに入力されています。 また、日付によっては途中入退社する人もいるので、12/01に名前がなくても、 12/10から名前が入力されている場合(あるいはその逆)もありえます。 シートBは以下の通りです: 1行目 名前 A列:日付 B1 木村 C1 山田 D1 佐藤 ・・・ A2 12/01 A3 12/02 このシートBの B2に シートAから 「木村の12/01の出社状況」(つまりC4)に値するデータを 自動的に抽出するような関数を入力したいのですが、どのようにすればよいのでしょうか? (このB2セルの式をB2:D3に入力していきたいので、絶対値を指定することになると思いますが・・・) IndexやらMatchやらLookupやらを色々試してみたのですが、どうも上手くいきません。 どなたかアドバイスをお願いいたします。

  • Excel2007 複数列に対する抽出条件の設定

    Excel2007を使用しています。 下記のような抽出をVBAで行いたいのですが、条件の指定方法が分からず困っています。 ご存知の方がいらっしゃいましたら、ご教授願います。 A列 B列 C列 D列 1   あ  22 2   い      全 3   う   21  部分 4   え   22 5   お   6   か   23  部分 7   き   22 8   く    21  全 9   け 10  た   22  部分 11  ち ↓↓↓↓↓↓ A列 B列 C列 D列 1   あ  22 2   い      全 3   う   21  部分 4   え   22 6   か   23  部分 7   き   22 8   く    21  全 10  た   22  部分 【やりたい事】 C列が空白かつD列が空白の行を削除したい。 ※A列B列は連番や続いた文字が入っているのではないのですが、便宜上こう書きました。 ※C列には数値、D列には文字列が入っています。 宜しくお願い致します。

  • エクセル A1の値と同じ値の入ったB列のC列の計

    A1=10 D1=37 B C 10 15 11 10 10 12 12 1 10 10 A1と同じ値をB列から探し其の行のC列の値の合計をD1に表示したいのです ご教授ください

  • エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させた

    エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させたい。 エクセルのA列に約1,000行くらいのデータが有ります。 このA列内で重複レコードがあります。 B列に約1,000行くらいのデータが有ります。 B列内でも重複レコードが有ります。 この条件の中で (1)A列にもB列にあるデータすべて (2)A列にしかないデータすべて (3)B列にしかないデータすべて を抽出したいのですが、どんな方法がありますか? それで (1)をC列 (2)をD列 (3)をE列 に並べて表示させたいです。 さらに抽出されたデータで重複レコードの場合は1件のみで表示したいです。 複数の操作を繰り返すのではなく C,D,E列に式を入れるだけで済ませる事は可能でしょうか? よろしくお願いします。 例    A   B    C   D   E 1-001-002--001--004--007 2-002-002--002--006--008 3-001-001--005--010 4-005-007 5-001-005 6-004-005 7-004-008 8-010-007 9-006-007 A列には001が3個、002が1個、005が1個有ります。 B列には001が1個、002が2個、005が2個有ります。 A列にもB列にも有るのは、001と002と005ですから これがC列に表示されます。 でそれぞれA列にもB列にも複数有りますが、1個として判定なので よって、C列には 001 001 001 001 002 002 005 005 と表示ではなく 001 002 005 と表示したい。 次にD列はA列に有る物だけですから 004 006 010 となります。B列には004は2個有りますが同じ値なので 004 004 006 010 では無く004は1個の表示です。 E列はB列のみのデータなので 007 008 です。 同じくB列には007が3個有りますが1個ともなします。 007 007 007 008 では無く 007 008 です。

  • Excelのフィルタオプションの設定で検索条件範囲を複数設定するには

    Excelでデータを抽出する「フィルタオプションの設定」について教えてください。 例えば,A列,B列,C列のように 複数の列に抽出条件が存在します。 どの列にも"A"~"Z"のアルファベットが入っているとして 「A列の値が"A"」or「B列の値が"A"」or「C列の値が"A"」つまり A列~C列のどこかに"A"という値が入っている行を抽出したいのですが,よい方法を教えてください。 お願いします。

  • 番号が一致したら別の列の値を抽出したい

    こんばんわ。 Excelについて教えてください。 A列に数字が1~10と並んでおり、 C列には数字が穴あきで5つ(1,2,4,6,8)あったとし、 A列とC列を比較して比較し、数字が重複した場合は、 D列にある値をB列に抽出したいのですが、行番号を指定して 抽出する事なんてできますでしょうか? ↓こんな事をしたいです。 A列 B列 C列 D列 1  A  1  A 2  B  2  B 3     4  C 4  C  6  D 5     8  E 6  D 7 8  E 9 10

  • VBAの複数条件分岐について

    VBAで下記の構文を使用してシート1にある表より 条件に合致するもののみシート2に抽出するようにしています。 現在はシート1のE2セルの値がシート1のB列の値と比較して 該当するものを抽出しています。 この条件が、 シート1のE1のセルの値が20より小さい場合、 かつE2のセルの値がシート1のB列の値と比較して該当するものを シート1に貼り付け、 シート1のE1のセルの値が20以上の場合、 かつE2のセルの値がシート1のD列の値と比較して該当するものを シート1に貼り付ける というような条件に変えたいのですが どのように変更したらよろしいのでしょうか。 よろしくご教授下さい。 ちなみに現在使用している構文です。 これもきれいな構文かはわからないのですが・・・ Sub test() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 1 sh2.Cells(k, "B") = sh1.Cells(1, "A") sh2.Cells(k, "C") = sh1.Cells(1, "B") k = k + 1 d = sh1.Range("A65536").End(xlUp).Row For i = 2 To d If sh1.Cells(i, "B") <= sh1.Range("E2") Then sh2.Cells(k, "B") = sh1.Cells(i, "A") sh2.Cells(k, "C") = sh1.Cells(i, "B") k = k + 1 End If Next i sh2.Activate End Sub

  • 複数の条件に合う行の特定のセルを返す

    ほぼ同じ質問をいくつか見かけたのですが、その式を自分の内容に置き換えても全く希望通りの結果が出ず、質問させてください。 2 1 Aさん 4 1 Bさん 5 1 Cさん 2 2 Dさん 5 2 Eさん セルのA1には「2」、B1には「1」、C1には「Aさん」と入ったシートがあり、例えばセルのD1に A列、B列ともに「2」が入力されている4行目のC列「Dさん」という値が反映して欲しいのですが、その関数が分からなく困っています。 他にもA列が「5」、B列が「1」の結果が(Cさん)が欲しい時もあり、条件にはA列の値とB列の値を使う方法で考えています。 お知恵を貸してください。

  • EXCEL 文字列条件抽出

    特定の文字列を検索条件として別シートに抽出する方法を御教授願います。 使用する関数はLEN,MID,LEFT,ISERR,もしくはワイルドカードなどを使用すればいいのかと考えておるのですがいまいちやりたいような数式を組めず悩んでおります。 やりたいことを言葉で表現するならば以下のような感じとなります。 「sheet1のF列に<107>という文字が含まれていた場合」 ・顧客別シートのD列に顧客ごとに分けて抽出 ・含まれていない場合、抽出しない と、単純なことなのです。が、制約がある為にうまくいきません。 制約は以下となります。 ・検索対象の文字列が以下のように決まった形ではない。 (1)A-BB-107○#----- (2)A-BB-107○#----- (3)ABB107○C #----- (4)ュウリABB-107○#----- (5)ュウリABB107○#----- (6)BB-107○C-D9#-----  など、その他にも数種類存在。(○部分には違う数字が入ります) ・上記でも分かるように<107>が始まる文字列の位置が決まっていない。 という具合です。 操作しているブック構成は下記のとおりです。 ・sheet1・・・参照用シート 4行目 /D列・・・顧客No / E列・・・顧客名 / C列・・・製品仕様 (A列,B列,G~AD列まで使用中) 5行目 / 1 / A / A-BB-107○#----- 6行目 / 2 / B / ュウリABB-107○#----- 7行目 / 1 / A / BB-107○C-D9#----- 8行目 / 3 / C / A-BB-107○#----- 9行目 / 3 / C / BB-107○C-D9#-----  10行目 / 4 / D / A-BB-107○#----- (会社のサーバーで管理している情報がそのままエクセルに打ち出されたシート。 情報量として約1000行ほど) ・sheet2,3,4,5(開始行,項目列は同じ位置)・・・特定の顧客別ごとに分け、特定の製品仕様だけを抽出したシート(参照用から引用)。 4行目/ B列・・・顧客No / C列・・・顧客名 / D列・・・製品仕様 5行目 / / A-BB-107○#----- 6行目 / / ュウリABB-107○#----- 7行目 1 / A / BB-1234C-D9#----- 8行目 / / A-BB-1115#----- 9行目 / / BB-107○C-D9#-----  10行目 / / A-BB-3498○#----- 特定の顧客NoをB列(一つのセルになってます。C列も同様一つのセルになってます)に入力すると、製品仕様すべてを抽出するように作成したシート。このシート内のG列から新たに表を作成し<107>の文字列が含む製品仕様を抽出しようと考えております。 出来れば、このような一度段階を踏んでから特定の仕様を抽出するのではなく各シートに対象となる顧客Noを入力すると特定の仕様が一回で抽出できるようなシートを作成したいのですが、関数初心者の為、うまく組めずこのような形となりました。(現在、参照用シートに作業列を作り対応。作業列ばかりが増えて正直困っているのも確かなのです) 【御教授頂きたいこと】 ・<107>の文字列を条件として別表に抽出する関数の数式 です。 また、出来ればでいいのですが、 ・顧客Noを入力すると特定の仕様が一回で別表に抽出できるような方法が御座いましたら、そちらも合わせてお願いしたいと思っております。 長々と書き綴り、大変申し訳御座いませんが、宜しくお願い致します。

  • エクセルでA列とB列の差分を抽出

    エクセルでA列にはあるがB列にはない項目を抽出するにはどうしたらよいでしょうか。 下の例だと、C列あたりに、山本、川田を抽出したいのですが…… A列にはB列のデータがすべて含まれています。 A列は10月と11月のデータで、B列は10月のデータです。 A列   B列 山田  山田 山本  川上 川田 川上

専門家に質問してみよう