• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 関数 条件にあったセルを表示したい)

Excel関数で条件にあったセルを表示する方法

このQ&Aのポイント
  • エクセル関数を使用して、特定の条件に一致するセルを表示する方法について質問があります。
  • 具体的には、商品コードに一致する顧客コードを表示させたいという要望です。
  • 表1には顧客コードと商品コードがあり、別の表(表2)から条件を満たす結果を抽出しています。顧客コードは重複しないため、顧客コードと商品コードを結合することで目的の結果を得られるか検討しています。

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.6

No4マクロに不備がありました 少し修正 Sub test() Application.ScreenUpdating = False Dim aa, bb As Range Set aa = Worksheets(1).Range("A2") Set bb = Worksheets(2).Range("A2") bb.Offset(-1) = "商品コード" bb.Offset(-1, 1) = "顧客コード" While aa <> "" lp2 = 0 For lp = 0 To 5 If aa.Offset(0, lp + 1) <> "" Then bb.Offset(lp2).Value = aa.Offset(0, lp + 1) bb.Offset(lp2, 1).Value = aa.Value bb.Offset(lp2, 2).Value = "=COUNTIF(A:A," & bb.Offset(lp2).Address & ")" lp2 = lp2 + 1 End If Next Set bb = bb.Offset(lp2) Set aa = aa.Offset(1) Wend Worksheets(2).Select Columns("A:C").Sort Key1:=Range("C2"), Order1:=xlDescending, Key2:=Range("A2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal Columns("C:C").ClearContents Range("A2").Select While ActiveCell <> "" With ActiveCell lp = 0 While .Value = .Offset(lp) lp = lp + 1 Wend If .Value = .Offset(1) Then Range(.Offset(1).Address & ":" & .Offset(lp - 1).Address).Clear End If .Offset(lp).Select End With Wend Application.ScreenUpdating = True End Sub

mayday911
質問者

お礼

web2525様 本当に、本当にありがとうございます。 早速試したところ、見事に望んでいた結果が得られました!!! スゴイです、感動です。 EXCELって奥深いですね。 次回また質問があった場合にはぜひご指導いただきたいので どうぞよろしくお願いします。

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

その他の回答 (5)

noname#204879
noname#204879
回答No.5

Sheet1    A   B    C    D    E    F    G 1 Ccode Pcode1 Pcode2 Pcode3 Pcode4 Pcode5 Pcode6 2 05824 A12500 B05040 A25012 3 02572 B05040 C12500 4 07050 5 03058 C12500 B05040 6 以下は Sheet2 における操作です。 1.次の各セルに該当する式を入力して、此れを下方にズズーッとドラ   ッグ&ペースト(その結果を Fig-1 に示した)   A2: =OFFSET(Sheet1!$A$1,1+INT((ROW(A1)-1)/6),IF(MOD(ROW(A1),6),MOD(ROW(A1),6),6))   B2: =OFFSET(Sheet1!$A$1,1+INT((ROW(A1)-1)/6),)   C2: =COUNTIF(A:A,A2) 2.範囲 A1:C1 を選択して[オートフィルタ]を実行 3.セル A1 のオートフィルタ矢印(▼)をクリックして“(オプショ   ン)”を選択 4.左上ボックスに 0 を入力して、その右のボックスで“と等しくな   い”を選択して[OK]をクリック 5.抽出されたデータ上の任意のセルを選択して[可視セルの選択]→   [コピー]を実行 6.セル E1 を選択して[貼り付け]を実行(その結果を Fig-2 に示し   た) 7.範囲 E2:G8 を選択して、次の条件で[並べ替え](その結果を   Fig-3 に示した)    [最優先されるキー]    列G 降順    [2番目に優先されるキー] 列E 昇順 8.範囲 E2:E8 を選択(アクティブセルは E2)して、次の[条件付き   書式]を設定(その結果を Fig-4 に示した)    数式が   =E2=E1    フォント色 白 9.A~D列およびG列を削除 Fig-1             Fig-2    A    B   C        E    F   G 1  Pcode  Ccode Qnty    1 Pcode  Ccode Qnty 2  A12500 05824   1    2 A12500 05824   1 3  B05040 05824   3    3 B05040 05824   3 4  A25012 05824   1    4 A25012 05824   1 5    0 05824  18    5 B05040 02572   3 6    0 05824  18    6 C12500 02572   2 7    0 05824  18    7 C12500 03058   2 8  B05040 02572   3    8 B05040 03058   3 9  C12500 02572   2 10    0 02572  18    Fig-3 …   … ……   …       E    F   G 13    0 02572  18    1 Pcode  Ccode Qnty 14    0 07050  18    2 B05040 05824   3 …   … ……   …    3 B05040 02572   3 19    0 07050  18    4 B05040 03058   3 20 C12500 03058   2    5 C12500 02572   2 21 B05040 03058   3    6 C12500 03058   2 22    0 03058  18    7 A12500 05824   1 …   … ……   …    8 A25012 05824   1 25    0 03058  18 26    0 00000  18         Fig-4            E    F   G         1 Pcode  Ccode Qnty         2 B05040 05824   3         3     02572   3         4     03058   3         5 C12500 02572   2         6     03058   2         7 A12500 05824   1         8 A25012 05824   1

mayday911
質問者

お礼

回答いただきありがとうございます。 オートフィルタが使えない方も使用するため、関数などで自動的に表示 できる方法を模索していました。 しかしこのような方法もあるのですね、勉強になります。 丁寧なご説明ありがとうございます。

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

一応マクロも作ってみたけど、動作は怪しいかも シート1の表1が有ってシート2に表2作成です Sub narabikae() Application.ScreenUpdating = False Dim aa, bb As Range Set aa = Worksheets(1).Range("A2") Set bb = Worksheets(2).Range("A2") bb.Offset(-1) = "商品コード" bb.Offset(-1, 1) = "顧客コード" While aa <> "" For lp = 0 To 5 If aa.Offset(0, lp + 1) = "" Then Set bb = bb.Offset(lp) lp = 5 Else bb.Offset(lp).Value = aa.Offset(0, lp + 1) bb.Offset(lp, 1).Value = aa.Value bb.Offset(lp, 2).Value = "=COUNTIF(A:A," & bb.Offset(lp).Address & ")" End If Next Set aa = aa.Offset(1) Wend Columns("A:C").Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Columns("C:C").ClearContents Worksheets(2).Range("A2").Select While ActiveCell <> "" With ActiveCell lp = 0 While .Value = .Offset(lp) lp = lp + 1 Wend If .Value = .Offset(1) Then Range(.Offset(1).Address & ":" & .Offset(lp - 1).Address).Clear End If .Offset(lp).Select End With Wend Application.ScreenUpdating = True End Sub

mayday911
質問者

お礼

web2525さん、いいえweb2525サマ マクロまで作って頂き、本当にありがとうございます。 マクロは殆ど使ったことがない私ですが今からチャレンジします! 結果はお知らせいたしますので、少々?お待ちください。

全文を見る
すると、全ての回答が全文表示されます。
  • orangezzzz
  • ベストアンサー率35% (401/1119)
回答No.3

こんばんは。#1です。 関数だけでは無理ですね。 マクロも必要でしょう。 一番よいのはAccessにすることですが。

mayday911
質問者

お礼

再度の回答ありがとうございます。 一番よいのはAccessにすることですが。 ↑↑ですよねぇ^^; でも、Accessのない環境+Excelの達人ではない私 といった状況なので..。 Accessの導入は再三お願いしている状況であります。

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

関数で一発抽出は計算式文字数制限に引っかかり出来ませんでした で、代案として 表2の商品コード列(A列と仮定) A2に =INDEX(表1!商品コード範囲,ROUNDUP((ROW()-1)/6,0),MOD(ROW()-2,6)+1) 顧客コード列(B列と仮定) B2に =INDEX(表1!顧客コード範囲,ROUNDUP((ROW()-1)/6,0)) C2に =IF(A2=0,"",COUNTIF(A:A,A2)) として下方向コピー 結果をコピーし別表に値のみ貼り付け、C列を基準に降順でソート、不要な部分を削除 これでお望みの表に近い形に。 後はマクロでやるしかないのでは?

mayday911
質問者

お礼

web2525さん 前回の質問に続き、ご回答いただきありがとうございます。 関数を駆使してなんとか理想の形にもっていこうと苦戦していたので、代案の提案大変ありがたいです。 後はマクロでやるしかないのでは? とのことですがそうではないかと思い始めたところで質問させて頂いた次第です。 マクロもやはり勉強すべきなのですね。関数には限界があるということを痛感しました。

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

こんばんは。 ピボットテーブルという発想はありませんか。

mayday911
質問者

お礼

早速の回答ありがとうございます。  しかしながら、関数のみで処理したいのです。 【表1】は入力専用のシートから抽出していてさらに【表2】も 別の表に関数で抽出する仕組みになっています。 説明不足でしたすみません(T_T)

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

関連するQ&A

  • エクセルについて

    重複しているデータを重複を取り除いたものにして表示したいのですが、フィルターオプションの設定で行ってもうまくいきません。 下記が例です。 NO, 年月日 お得意先名 単価 1  4/1 顧客A \2,000 2 4/2 顧客A \2,500 3 4/3 顧客B \2,000 4 4/4 顧客B \1,800 5 4/5 顧客C \1,500 お得意先様でAとBがそれぞれ重複しているので、その中で単価が高いもののみ(4/2と4/3の分と4/5分)を抽出したいです。表示の仕方は別表でも、直接重複を除く形でもかまいません。どうか よろしくお願いします。

  • Excelの関数について教えてください。

    Excelの関数について教えてください。 シート1に顧客表があります。 そこから検索をかけてシート2に該当する顧客を表示させたいです。 検索項目が一つならばVLOOKUPなどを使えばいいのですが、 検索に必要な項目が3つあります。 例えば   A B C D… 1 1 1 1 企業A 2 1 1 3 企業B 3 1 2 1 企業C のような感じで1000くらいのデータが並んでいます。 シート2にて   A B C D 1 1 1 1 企業A 2 それぞれのセルに1-1-1と入力するとD1に『企業A』と表示させ、 1-1-3と入力すれば『企業B』というようにA1~C3に入力する数値によりD1の表示を変えていきたいです。 そして該当がなければ『該当無し』と表示したいです。 この場合の関数は何を用いてどのような式を作ればいいのでしょうか? 関数に詳しい方、ご協力お願いいたします。

  • 2つの条件から1個のデータを導き出す関数が分かりません。

    excelで売上集計表を作っているのですが、関数が分からなくて困っています。VLOOKUPやDSUMなどは知っているのですが、2つの条件から1個のデータ抽出する方法が分かりません。 (例)サイズ+色 → 該当する値段  など 【列】カラー 【行】サイズ → 【交わるセル】値段 という表(1)が参照元として有ります。 その参照表とは別に表(2)として、【A列】には購入者を【B列】カラー 【C列】サイズ と入力していく管理表で【D列】に同じ行の「カラー」と「サイズ」を参照して、別表(1)の価格を自動表示できるような関数を入力したいのです。このようなケースの場合どのような関数を入力すればよいのでしょうか。

  • エクセル関数2

    シート(1) A B C D 作業列    コード    顧客名     金額 3        300001     A 10,000 3        300002   B 15,000 3        300003   C 20,000 3        300004   D 25,000 3        300005   E 30,000 4        400001   F 35,000 4        400002   G 40,000  4 400003 H 45,000 4 400004 I 50,000 4 400005 J 55,000         シート(2) A B C D E F 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でVLOOKUP関数を使い‥シート2の10,000のセルの場合、 VLOOKUP(C$2,sheet1!$A$3,$D$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。

  • エクセル VLOOKUP 番号重複でも表示させたい

    初めて質問いたします。 以下の表を別シートで検索して価格を表示させたいのですが、 顧客番号が重複により、表示させたい価格が出せません。 ------------------------------------ 例:シート1      A      B    C    D    1 顧客番号_会社名_商品_価格 2     01_A社__テレビ_5,000 3     01_A社__モニタ_2,000 4     02_B社__テレビ_5,000 5     03_C社__テレビ_5,000              :              : ------------------------------------ シート2 B2に以下の式を入れています。  =VLOOKUP($A2,シート1!$A$2:$D$5,4,0)      A      B      1  顧客番号_価格  2      01_5,000 3      01_5,000 ←ここを、2,000と表示させたい。 ------------------------------------ わかる方がおりましたら、ご教示ください。 よろしくお願いいたします。

  • エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてくだ

    エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてください。                A列   B列    C列 Aファイルには 行 【注文月日】、【氏名】、【商品金額】が記入されています。 Bファイルには 行 【注文月日】、【氏名】、【税金額】が記入されています。 AファイルのD列に、Aファイルの【注文月日】かつ【氏名】がBファイルの【注文月日】かつ【氏名】と一致する場合のBファイルC列の【税金額】を表示したいのです。 VLOOKUP関数では条件が1つだけなので使用できませんが、似たような関数で複数条件ができる関数があるなら教えてください。

  • 関数について

    Vlookup関数でわからなくて困っています。 例) A B C D 顧客名1 #N/A 顧客名1 1001 顧客名2 #N/A 顧客名2 1002 B1=Vlookup(A1,$C$1:$D$2,2,0) B2=下フィル 各セルの書式は標準になっています。 A列とC列の抽出の仕方に問題があるのでしょうか。 因みに、C列をそのままコピーして、A列のところにもってきた場合には、B1には「1001」と表示されます。どうすれば表示されるようになりますでしょうか。 大変困っております。お力を頂きたくお願い致します。

  • Excelの関数について教えてください。

    Excelの関数について教えてください。 前回の質問と似ていますが、回答お願いいたします。 シート1に顧客表があります。 そこから検索をかけてシート2に該当する顧客を表示させたいです。 検索に必要な項目が3つあります。 例えば   A B C D… 1企業A1 1 1 企業A 2企業B1 1 3 企業B のような感じで1000くらいのデータが並んでいます。 シート2にて   A B C D 1 1 1 1 企業A 2 それぞれのセルに1-1-1と入力するとD1に『企業A』と表示させ、 1-1-3と入力すれば『企業B』というようにA1~C3に入力する数値によりD1の表示を変えていきたいです。 そして該当がなければ『該当無し』と表示したいです。 この場合の関数は何を用いてどのような式を作ればいいのでしょうか? 関数に詳しい方、ご協力お願いいたします。

  • EXCELの関数で複数条件の抽出方法

    エクセルの関数について教えてください。 VLOOKUPで複数条件を抽出したい。 以下の様に出来ればと思いますが、数式が分かりません。 売上データーの中から複数の条件に一致したものだけを抽出したい。 例) 商品が1,2,3,4,5,6,7,8,9,10と種類が100あるとします。 売上先A,B,C,D,E,F,G,と100の客先があるとします。 その中から、商品1と売上先Aの場合はA-1と売上金額のデーターを抽出させて、商品1と売上先がDの場合はD-1と売上金額を抽出させたい。但し、商品1と売上先Bの場合は売上金額を抽出させたくない。 このような場合の関数での数式を教えて欲しい。 お分かりの方があればお教え願います

  • エクセル:セルを参照して計算

    お世話になります。 A列にコード番号が、B列に数値が入っています。 A列のコード番号は順不同で重複もあります。 C列にはコード番号の一覧が入っています。(重複なし) C列と一致するコード番号をA列から探し、対応するB列の合計をD列に表示する。 A列に一致するコード番号がないときは0と表示させる。 この場合、D列にはどのような計算式を入力されておけばよいのでしょうか。 例) A1にA、A2にB、A3にC、A4にA、A5にB、A6にD B1に10、B2に20、B3に30、B4に15、B5に20、B6に50 C1にA、C2にB、C3にC、C4にD、C5にE・・・・ この場合 D1には10+15なので25、D2には20+20なので40、D3には30、D4には50、 D5には0を入力する。 よろしくお願いします。

専門家に質問してみよう