• ベストアンサー

関数について

例えば「A1:D10」の範囲の所々に入力されている文字列等を検索する関数と「HLOOKUP」関数を組み合わせて使うのにはどうしたらいいのでしょうか。(下の数字を返したいのです)  (例)○○費      5,000           ××費           10,000                △△費                 8,000

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

ご提示の関数ではありませんが、次の方法は如何でしょうか。 =OFFSET($A$1,SUMPRODUCT(("文字列"=$A$1:$D$10)*ROW($A$1:$D$10)),SUMPRODUCT(("文字列"=$A$1:$D$10)*COLUMN($A$1:$D$10))-1)

minonomamusi
質問者

補足

早速の回答有り難うございます。 内容的には大変に難しく、力不足の私には理解することはできないくらいです。 でも、この通りに入力すれば実行できます。 あと、もう少し教えてください。 1:OFFSET($A$1 この部分の「A1」は例えば「C1」にすると    「0」表示になります。なぜでしょう。 2:範囲の中に同じ文字列があるとやはり「0」表示になります。    解決方法はありますか?

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 1:OFFSET($A$1 この部分の「A1」は例えば「C1」にすると    「0」表示になります。なぜでしょう。  ⇒表の基準値ですので、A1を行0,列0としていますので列相対が合いません。OFFSET関数のHELPでご確認下さい。 2:範囲の中に同じ文字列があるとやはり「0」表示になります。    解決方法はありますか?  ⇒行列値をSUMPRODUCT関数で求めていますので、複数有る場合、抽出した行列値を合算するのでこの関数では対応できません。   解決方法は、元表の重複部分を取り除くぐらいでしょうか。

minonomamusi
質問者

お礼

いろいろ有り難うございました。 重複部分を取り除く訳にはいきませんので解決方法を考えてみます。 また機会がありましたら教えてください。

関連するQ&A

  • Excel関数

    Eccel2003を使用して以下のような入力作業を行っております。 A列~C列のセルに「1~10」いずれかの数字を入力して行きます。 入力パターンは (1)A列だけ入力 (2)A列とB列に入力 (3)A列~C列全てのセルに入力 の3パターンです。 複数の列に数字を入力する場合((2)及び(3))、同じ数字を入力することはありません。 【例】     A B C D  1  5  4  1  2  6  3   1 2  4   2 4 5  ・  ・  ・ このとき、A~C列に一つでも該当の数字(ここでは2と4と5)が入力されていた場合に、 ある文言(30文字くらい)をD列に反映させたいのですが、何か良い関数等ありますでしょうか?    ※ 上記例の場合、1,3,4行目のD列に文言を反映 例の4行目のように全ての列に該当の数字を入力することもあります。 ご教示頂きたく何卒宜しくお願い致します。

  • エクセルでIF文とHLOOKUP関数の合わせ技で。。。

    エクセルで関数について質問です。 HLOOKUP関数で検索した先が空欄なら空欄、値があるならHLOOKUP関数で検索した値が入るようにしたいのです。 たとえば、私が作成した関数は =IF(HLOOKUP($A$1,Sheet1!$A$1:$D$10,2,0)="","",HLOOKUP($A$1,Sheet1!$A$1:$D$10,2,0)) この場合、同じ内容のHLOOKUP関数を2度入力しなくてはなりません。 そうではなく、もっとスマートに出来る方法がありましたら教えていただきたいのです。

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • 【EXCEL】関数について

    初心者のため、きちんと説明できるか不安ですが、上手に伝われば幸いです。 例えば、 範囲をA1~A50にし、検索条件がD1にあった場合 =COUNTIF(A1:A50, D1) でOKですが・・・ 検索条件がD2~D6までの複数だった場合 =COUNTIF(A1:A50, D1:D6) だとエラーまたは0になってしまうのですが 何が原因でしょうか。 ※ちなみに、入力されているデータは数字ではなく「あ」や「A」などの単体の文字です。 もし、COUNTIF関数で出来ない場合は、どの関数を使えばよいでしょうか? SUBPRODUCT関数なども試したのですが、上手く正しい数字が返ってきません。 よろしくお願いします。

  • Excel関数

    Eccel2003を使用して以下のような入力作業を行っております。 A列~C列のセルに「1~10」いずれかの数字を入力して行きます。 入力パターンは (1)A列だけ入力 (2)A列とB列に入力 (3)A列~C列全てのセルに入力 の3パターンです。 複数の列に数字を入力する場合((2)及び(3))、同じ数字を入力することはありません。 【例】     A B C D  1  5  4  1  2  6  3   1 2  4   9 1 3  ・  ・  ・ このとき、A~C列に一つでも奇数が入力されていた場合に、 ある文言をD列に反映させたいのですが、何か良い関数等ありますでしょうか?    ※ 上記例の場合、1,3,4行目のD列に文言を反映 例の4行目のように全ての列に奇数を入力することもあります。 ご教示頂きたく何卒宜しくお願い致します。

  • ■エクセル■ PRODUCT関数で「~ではない」。

    早速ですが、例えば、 ・A1~A10の範囲に1~5が入っている。 ・B1~B10の範囲に文字列「あ」~「お」までが入っている。 ・C1~C10の範囲に個数が入っている(1~99の数字)。 この場合で、D1のセルに「A1~A10の数字が5で、「お」以外の個数の合計」を求めるときはどういった関数を使えばいいのでしょうか?? =SUMPRODUCT((A1:A10=5)*(B1:B10<>"お")*(C1:C10)) と、入力してもエラーが出てしまうので、困ってます。どうしたらできますか?? よろしくおねがいします。

  • SUMIF関数で、「ブランク以外を合計」を指定したい

    SUMIF(範囲,検索条件,[合計範囲]) の、検索条件部分に、 「セル内に数字、文字をとわず、とにかく何か入力されていたら合計する」 といった意味合いの条件を指定したいのですが、その方法がわかりません。 画像で説明させていただくと、 A2のセルにSUMIF関数を用いて、 文字が入力されているc,d,e列の数値を合計し、 90という結果が欲しい、ということです。 どなたかご教授をお願いいたしますm(__)m

  • 表のばらばらの文字列をまとめるマクロ 関数

    以前、同じ内容の質問を聞いたのですが、少し条件を変えて質問です。 (1)左の表には数式が入っていて、この他にもう一つある表のデータに該当すると1列ごとにSMとかNPとか表示されるようになっています。 (2)この左の表は実際には136列あるので、結果を印刷すると一枚に収まりきらないのです。なので、右の表のように、最短の列に表示したいのです。 (3)この例ではたまたま1行に1個ずつしか文字列が入ってないので右の表は1列ですが、1行に付き2個以上文字列が入ることもあります。5個以上はほとんどないです。 (4)関数でできませんか? またはマクロでもいいです。 以前、回答でいただいた関数は =IFERROR(HLOOKUP("*?",$A1:$D1,1,FALSE),"") 又は =IF(COUNTIF($A1:$D1,"*?"),HLOOKUP("*?",$A1:$D1,1,FALSE),"") でしたが、これだと1行につき1個文字列があるときのみ可能です。 1行に付き2個以上文字列がある場合に、例えば空欄を削除して左に詰めるような感じでマクロでできないでしょうか?

  • 関数等使ってできますか??

    エクセルもしくはAccessを使用して以下のことできますか? エクセルのA~D列に数字もしくは、文字が入力されているとします。 それを、B列に上からデータを並べたいのです。 関数などでできる方法がありましたら教えてください。 よろしくお願いします。 ●イメージ図 【加工前】 _A__B__C__D__ 1|a|b|c| 2|a|d| | 3|b|d|a| 4|c| | | ※A~Dはセル列 ※a~dは数字もしくは文字 ※一番左の数字は通し番号   ↓↓ 【加工後】 _A__B__C__D__ 1|a| 2|a| 3|b| 4|c| 1|b| 2|d| 3|d| 4| | 1|c| 2| | 3|a| 4| |

  • EXELで条件抽出をしたい…

    教えて下さい。EXELで作った下のような表(データ)がありその条件に合う人を抽出したいんですが…       A   B   C   D 1 Aさん 1234  2345  3456  4567 2 Bさん 6788  1234  5556  7778 3 Cさん 7788  7778  5443  7789 A~Dのセルにランダムに並んだ数字を入力している(ここでは、番号(1234)と入力している)人を関数を使い一発表示したいんですが。  A列だけに1234という数字を入力している人を抽出し、条件にあえば「○」という表示をできるようにはIF関数を使いできましたが、 AさんのA列、B列、C列全てを検索範囲に入れた、(たとえば「1234」と入力しているなら「○」等で表示(抽出)したいんですが…それができる関数を教えて下さい。列ごとしかできないのか…??? 分かりにくいですか? (^_^; 宜敷お願いします。