• ベストアンサー

【EXCEL】関数を用いての抽出

A列からF列までの各列に数値が入っていて(以下ID) 関数を用いてG列に全列(A~F)に含まれているIDだけを抜き出したい場合 どのような式になるのでしょうか? 条件としては各列の行数はバラバラ(A列は500行、E列は30行のような)で IDの桁数は上限なしです。

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

  • ベストアンサー
noname#70958
noname#70958
回答No.2

ご質問の趣旨を取り違えていましたらすみません。 >全列(A~F)に含まれているIDだけを抜き出したい 私は「A~Fの各列に【共通して存在するID】を抽出」するのかと思ったのですが…。 もしそうであれば 1.  G1セル: =IF(ISNA(MATCH(F1,A:A,0)+MATCH(F1,B:B,0)+MATCH(F1,C:C,0)+MATCH(F1,D:D,0)+MATCH(F1,E:E,0)),"",ROW())  としてF列の行数分下方にフィル。 2.  H1セル: =IF(ROW()>COUNT(G:G),"",INDEX(F:F,SMALL(G:G,ROW())))  として空白が返るまで下方にフィル。 H列が求める結果となります。 -------------------------------------------------------------------------------- ※G列は下記のように書くこともできますが、データ数が多いとおそらく重いです。  =IF(SUMPRODUCT(--(COUNTIF(OFFSET($A$1,,{0,1,2,3,4},9999),F1)>0))=5,ROW(),"") ※作業列を使わず直接G列に返すのも不可能というわけではありませんが、重すぎて実用にはならないと思います。  =INDEX(F:F,1/LARGE(INDEX(NOT(ISNA(MATCH(F$1:F$999,A:A,0)+MATCH(F$1:F$999,B:B,0)+MATCH(F$1:F$999,C:C,0)+MATCH(F$1:F$999,D:D,0)+MATCH(F$1:F$999,E:E,0)))/ROW(F$1:F$999),),ROW())) いずれもExcel2003で動作確認。以上ご参考まで。

rei00122
質問者

お礼

返事が遅くなってすいません。 教えていただいた関数を用いることで抽出ができました。 ありがとうございました!

その他の回答 (3)

noname#204879
noname#204879
回答No.4

  I  J  K  L   M   N   O 1  0  7  2   4   3   5   6 2  0  7  9  13  16  21  27 3  0 7.5 9.5 13.5 16.5 21.5 27.5 1.範囲 I1:I3 に数値 0 を入力 2.次の各セルにそれぞれ次式を入力   J1: =COUNTA(A:A)   J2: =SUM($J1:J1)   J3: =J2+0.5 3.範囲 J1:J3 を右方にズズーッとドラッグ&ペースト 4.セル G1 に次式を入力して、此れを下方にズズーッとドラッグ&ペ   ースト   G1: =INDEX(A$1:F$1000,ROW(A1)-INDEX($I$2:$O$2,MATCH(ROW(A1),I$3:O$3)),MATCH(ROW(A1),I$3:O$3))

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

IDについて、A-F列の全体の集合の中から、重複なく抜き出す(といっても作成に近い)のが質問の真意でしょうね。 各列に共通して含まれるIDを見つける、とも取れる質問で、明確で無い。 ーー 関数だけでは難しいと思う。 #1のご回答のような式が理解できる人はそれを使えばいいのかもしれないが。 複数列にあるデータを対象にするということが、エクセル関数では やりにくくしていると思う。 1列に人間が並べる(すなわちA列の最後の下にB列、A+B列データの最後の次からC列・・とコピー貼り付けをすれば、自称imogasi方式(Googleで照会すると多数出ます)でも出来ます。 初出のデータに連番を振る。 それを別シートにつめて表示する。 ーーー VBAは経験なく、関数で、と希望しているのだろうが、詳しくVBAのコードの中身がわからなくても、下記を標準モジュールに貼り付けて実行すればどうですか。 関数のカウントイフだってエクセルがどういう処理をしているか、プログラムが組まれていると思うが、だれも知らないで使っている。 ーー Sub test01() k = 1 For Each cl In Range("A1:F10") If cl <> "" And Application.WorksheetFunction.CountIf(Range("H:H"), cl) = 0 Then Cells(k, "H") = cl k = k + 1 End If Next End Sub A1:F10は適当に、多目でもかまわない。 結果はH列に出している 例データ A列  B列   C列・・ 1 2 3 2 1 3 13 5 6 8 9 7 3 4 6 12 34 8 14 結果 1 2 3 13 5 6 8 9 7 4 12 34 14 関数CountIfを使っているので、何をやっているか関数COUNTIFを知っておれば、推測はつと思う。 (注)標準モジュールは シートガ出ているところで、ALT+F11キー そこで出てくる画面の メニューの挿入ー標準モジュールで出てくる白紙的画面にコピペ。 実行は、カーソルをコードの何処かにおき、F5キーを押す。

rei00122
質問者

補足

すいません、質問文がわかりにくかったですね。 No2の方がおっしゃってるとおり共通して存在しているIDのみ抜き出すことが目的です。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

かなりトリッキーな式になります。 >IDの桁数は上限なしです とありますが、それでは難しいので以下の条件はつけます 1)IDは数値である 2)IDの最大桁数は9桁とする(式を理解できれば変更可能です) 3)データ行の最大は999行までとする 以下の式を任意のセルに貼り付けて確定は通常のEnterキーではなく、Shift+Ctrl+Enterで確定してください。すると配列数式となって、数式バーには{ }で式が囲まれた状態になります =MOD(SMALL(IF(ISNUMBER($A$1:$F$999),VALUE(COLUMN($A$1:$F$999)&TEXT(ROW($A$1:$F$999),"0000")&TEXT($A$1:$F$999,"000000000")),99000000000000),ROW(A1)),100000000) 後はセルを下方向にコピーします。 ただし処理が重いので、ものすごく反応が鈍くなると思います。ですから実用的な処理とはいえませんね。(それだけのことを要求されている訳ですから仕方ないですが…) 普通ならこのような処理はVBAを用いるのが一般的ではないでしょうか 「VBAはちょっと…」というなら仕方ありませんが、VBAならあっという間に終わりますし、シートが重くなることもありません 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻りALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro1() Dim r, rng As Range Dim cnt As Long  Set rng = Intersect(Cells(1, 1).SpecialCells(xlCellTypeConstants, 1), Columns("A:F"))  If Not rng Is Nothing Then   For Each r In rng    cnt = cnt + 1    Cells(cnt, "G").Value = r.Value   Next r  End If End Sub 上記マクロで処理する対象は「数値が入力されたセル」に限定しています。文字列も対象にするなら SpecialCells(xlCellTypeConstants, 1) の部分の「1」を「3」に変更してください

関連するQ&A

  • EXCEL2007 情報抽出 関数

    A~E列それぞれの一つのセルに"1"を入力し、F列にある情報を抽出、 G列のセルに表示させたいです。 行が多いので、IF関数などは使用できませんでした・・・ 何を使用すればよろしいでしょうか・・・? 例) A1~A20 B1~B20 C1~C20 D1~D20 E1~E20 それぞれの列の一つだけに1を入力します。 ・A 5に1を入力 → F5の情報をG1に表示 ・B15に1を入力 → F15の情報をG2に表示 ・C 2に1を入力 → F2の情報をG3に表示 ・D18に1を入力 → F18の情報をG4に表示 ・E9 に1を入力 → F9の情報をG5に表示 行数が多く、複数の関数を試してみても、数の制限にひっかかるのか うまくいかず困っています。どうぞよろしくお願いします。

  • Excel関数で数値のみ取り出したい

    Excelの関数について教えてください。 A列には単位付の数値が入っています。数値の桁数は決まっていませんが、3桁区切り、小数も含まれて居ます。単位はkm2とか、m3、L、Kw、gとかの3文字以内です。 この列から、B列に「数値のみ取り出したい」場合の関数式を教えてください。

  • Excel2002 IF関数の組み合わせ

    初歩的な問題ですが、組み合わせ方が他のサイトに例が見つからなかったので質問します。 IF関数で、 D列に、『もしA列が○○なら、B列の数値をもってきなさい。そうでなければC列の数値を持ってきなさい。』 というような単純な数式が入っているとして、ここに別の条件をまた付け加えたくなったので、どうすればよいか 質問させて下さい。 内容は、上記の条件のあとに、『E列が△△なら、F列の数値を持ってきなさい。』 というものです。 式としては IF(A1="大阪",B1,C1) 追加したいのは IF(E1="国語",F1,C1) ということで、全く違う条件を追加したい場合はどのように組み合わせればよいでしょうか?

  • EXCEL 関数 条件に当てはまる行数を求める

    1行の中の、複数の列の値に条件をつけ、それに当てはまる行数を関数で求めたいのですが、どうやれば良いのでしょうか? 行数を求めるのはおそらくROWS?だと思うんですが、その行の中の複数の列の条件をどのように指定すれば良いのか分からずに困っております。 (例) 列Cに文字列"青"、列Fに数値"5"が両方満たす行がいくつあるかを、どこかのセルに関数で求める。 よろしくおねがいいたします。

  • Excel関数について

    A列の1行目に A C D F X のデータが入ってきます。 B列の1行目に 0 1 2 9 T V のデータが入ってきます。 条件はA列の1行目がAまたはFでB列の1行目が0の場合は10% 条件はA列の1行目がAまたはFでB列の1行目がTの場合はブランク 条件はA列の1行目がDの場合はブランク 条件はA列の1行目がXの場合は100% 上記以外は0% の条件を満たすための関数の設定の仕方を教えてください。

  • EXCEL関数が全くわかりません。

    数学どころか算数すら苦手だった私は、 仕事で関数を表に入れなくてはならなくなり EXCELのテキストとにらめっこしていますが、全く理解できません。 今悩んでいるのは   a   b  c  d   e  f  g あ      0.5  0.5       1.0 い      0.5  1.0       2.0   で、「い」は前の行の「い」と同じ行の「あ」を足したもの。 例:dい=cい+dあ  ここまでは同僚がやってくれたのですが、 更に「あ」欄に数値が入った時のみ 前の「い」の数値を足す(gい=dい+gあ) (「eい」「fい」は空欄) というもの。今は、「あ」欄に入れる数値がない時は 0 を入れて計算し、後でその部分の文字を白抜きにするという めんどくさい方法しかわかりません。 この問題の解答でも結構ですし、関数全般を網羅した 数字音痴でもわかるようなテキストやサイトがありましたら ぜひ教えてください。

  • EXCEL関数についての質問です。

    EXCEL(2003)についての質問です。 関数にて、もし上行(※(1))のセルが空白の場合は空白、 そうでない場合は、2列隣(別シート)(※(2))のセルを返す。 ※(1)セル結合にて行を結合しています。 ※(2)同じ式(関数)ではじめのセル(結合されている)は、 A1次のセルはC1、E1、G1等1列飛ばしで参照。 としたいのですが、可能でしょうか? ちなみに添付画像のように結合行は可変します。 教えていただけると大変助かります。 例)    A            A    B    C    D    E    F    G 1 青森          青森       大阪       熊本 2 大阪 3 熊本   シート1                       シート2 宜しくお願い致します。

  • 数値を分割したい

    関数初心者です。 セルにさまざまな桁数の数値が入っています。 これを一字ずつ分割して別のセルに入れたいと考えています。 A1に1000が入っていたら、F1に1、G1~I1に0を A2に25369だったら、E2に2、F2に5、G2に3、H2に6、I2に9 というように、 B~Iの各セルに、後ろ詰め(という表現が適切かどうかわかりませんが)に入れたいのです。 A列に入っている数値は上限8桁ですが、3桁のこともあれば、8桁のこともある、と バラバラです。 よい方法がありましたら、ぜひお教えください。 お願いします。

  • Excel 複数列を同じ条件で抽出・合計する方法

    Excelの抽出・合計について教えてください。 配列を用いた方法などいろいろ検索しましたが式が長くなるので、 もう少しわかりやすくできないかと思っていろいろ探した結果、 ここに辿り着きました。 作業対象のSheetは次のとおりです。 ・行数はその月によって可変です。 ・A~L列まであると仮定します。これは固定です。 ・合計を求めたいのはL列の値となります。 抽出条件(AND条件) ・A~E列とI列が0(ゼロ) ・F~H列が0(ゼロ)でない、つまり数値が入っている 上述の条件をともに満たすデータのL列の数値の合計を求めたいと いうのが、今回の作業です。 現在はSUMPRODUCT関数を使って1列ずつ条件を設定しています。 しかし、式がたいへん長くなるので、もう少し簡略化したいです。 できればピボットテーブルやデータベース関数は余分な列を使うので 避けたいと思っています。 アドバイス、よろしくお願いいたします。

  • Excelでセルの英字を取得する関数

    Excelでセルの英字を取得する関数を教えて下さい。  A B C D E F G 1 2 3 4 5 6 7 エクセルは 横のヘッダにアルファベットが並んでいます。 縦のヘッダに数値が並んでいます。 縦のヘッダは =ROW() で求まります。 1行目で書けば1 5行目で書けば5 と返ってきます。 同じ様に、 =COLUMN()は A列で書けば1 E列で書けば5 と返ってきます。 A列で書けばA E列で書けばE と返って来る関数が欲しいです。

専門家に質問してみよう