• ベストアンサー
  • 困ってます

EXCEL関数について

質問があります。 エクセルのA行に 定期点検 (月度検査) ラジオ修理 ボリューム つまみ 校正 視力検査 ボールペン 発注 替芯 購入 コピー用紙 経費 ポケットティッシュ配布用    ・    ・       ・  とあるのを、B行に下記の用に変換したいのですが、 検査 修理 検査 検査 購入 購入 購入 購入 その他 その他 その他    ・    ・       ・  下記のように関数をつくったのですが、うまく動きません =IF(A1="","",IF(ISNUMBER(FIND("点検",A1)),"検査",IF(ISNUMBER(FIND("修理",A1)),"修理",IF(ISNUMBER(FIND("校正",A1)),"検査",IF(ISNUMBER(FIND("検査",A1)),"検査",IF(ISNUMBER(FIND("発注",A1)),"購入",IF(ISNUMBER(FIND("購入",A1)),"購入",IF(ISNUMBER(FIND("経費",A1)),"購入,"IF(ISNUMBER(FIND("配布用",A1)),"購入","その他"))))) わかる方がいらっしゃいましたら、どうぞ教えて下さい。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数85
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.4

=IF(OR(ISNUMBER(FIND("検査",A1)),ISNUMBER(FIND("点検",A1)),ISNUMBER(FIND("校正",A1))),"検査",IF(OR(ISNUMBER(FIND("購入",A1)),ISNUMBER(FIND("発注",A1)),ISNUMBER(FIND("経費",A1)),ISNUMBER(FIND("配布用",A1))),"購入",IF(ISNUMBER(FIND("修理",A1)),"修理",IF(A1="","","その他"))))  或いは、 =IF(COUNTIF(A1,"*検査*")+COUNTIF(A1,"*点検*")+COUNTIF(A1,"*校正*")>0,"検査",IF(COUNTIF(A1,"*購入*")+COUNTIF(A1,"*発注*")+COUNTIF(A1,"*経費*")+COUNTIF(A1,"*配布用*")>0,"購入",IF(COUNTIF(A1,"*修理*")>0,"修理",IF(A1="","","その他"))))

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 とてもわかりやすかったです。 また、よろしくお願いします。

関連するQ&A

  • エクセルで文字列検索の関数

    エクセルのワークシート関数で質問です。 「A1セルに、文字列、A、B、Cの何れかを含み、かつCDを含まない」ことを調べる関数です。 素直に、 =AND(ISNUMBER(FIND("A",A1)),ISNUMBER(FIND("B",A1)),ISNUMBER(FIND("C",A1)),NOT(ISNUMBER(FIND("CD",A1)))) と長ったらしく書けば取得できることはわかるのですが、もっと簡潔なやり方がありそうな気がします。 どうか教えてください。

  • 文字列AかBを含むセル数をSUMPRODUCT関数で求める場合

    文字列AかBを含むセル数をSUMPRODUCT関数で求める場合 エクセル2000です。 A1:A10のセル範囲だとして =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1) とすると、同一セルにA、Bの両方があった場合、重複してカウントされてしまいます。 重複を除外するために、 =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1)-SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*ISNUMBER(FIND("B",A1:A10))) と、重複してカウントされた数から両方が存在するセルの数を減じて求めましたが、以下のようなより簡素な式でも求められことがわかりました。 =SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1) この式でなぜAB両方があるセルが重複カウントされないのかどうもわかりません。 ご教示いただければ幸いです。 なお、SUMPRODUCTではなく =SUM(COUNTIF(A1:A10,{"*A*","*B*"}))-SUM(COUNTIF(A1:A10,{"*A*B*","*B*A*"})) でもできることは存じておりますが、今回はSUMPRODUCTの疑問として質問いたしました。

  • セル内の文章から文字を抜出したいです

    セル内の文章から文字を抜出したいです。 文字の書き方は、本当にランダムな並び方をしています。 [例] A1セル あいうえお12345 ↓ B1セル ○○ A2セル かきくけこ456789 ↓ B2セル ■■ いま、下の関数式を入れていますが、5つしか文字を抜き出せません。 せめて倍の10個は抜出したいのですが、どうすればいいでしょうか? =IF(ISNUMBER(FIND("あいうえお",A2)),"OO",IF(ISNUMBER(FIND("さしすせそ",A2)),"■■",IF(ISNUMBER(FIND("かきくけこ",A2)),"□□",IF(ISNUMBER(FIND("たちつてと",A2)),"◇◇",IF(ISNUMBER(FIND("なにぬねの",A2)),"△△","その他"))))) よろしくお願いいたします。

その他の回答 (3)

  • 回答No.3
  • tom04
  • ベストアンサー率49% (2537/5117)

こんばんは! 一例です。 ↓の画像のように表示したい項目(黄色いセル)の表を作成しておきます。 そしてB1セルに =IF(A1="","",IF(OR(ISNUMBER(FIND($D$2:$D$5,A1))),$D$1,IF(OR(ISNUMBER(FIND($E$2:$E$5,A1))),$E$1,IF(OR(ISNUMBER(FIND($F$2:$F$5,A1))),$F$1,"その他")))) これは配列数式になってしまいますので、この画面からB1セルにコピー&ペーストする場合はB1セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これをオートフィルで下へコピーすると画像のような感じになります。 尚、この数式で空白セルを範囲指定してしまうと正確な表示ができませんので、敢えて表内にアスタリクス(まず使用することはないであろう文字)を入れて範囲指定しています。 これは余計なお世話かもしれませんが、アスタリクスの代わりに他の項目を入れれば同じ表示をしてくれます。 以上、参考になれば良いのですが・・・m(__)m

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 配列数式なんて、はじめて知りました。 また、教えて下さい。よろしくお願いします。

  • 回答No.2

要するに、A1の値に 「点検」「校正」「検査」のどれかを含む → 「検査」 「修理」を含む → 「修理」 「発注」「購入」「経費」「配布用」のどれかを含む → 「購入」 上記以外 → 「その他」 (空白の場合は空白を返す) ということでしょうか。 部分一致しているかどうかの判定は、COUNTIF関数でもできます。 例えば、 =COUNTIF(A1,"*点検*") とすれば、A1の値に「点検」を含む場合は1、含まない場合は0を返します。 これを応用して =IF(ISBLANK(A1),"",IF(COUNTIF(A1,"*修理*")<>0,"修理",IF(COUNTIF(A1,"*点検*")+COUNTIF(A1,"*校正*")+COUNTIF(A1,"*検査*")<>0,"検査",IF(COUNTIF(A1,"*発注*")+COUNTIF(A1,"*経費*")+COUNTIF(A1,"*購入*")+COUNTIF(A1,"*配布用*")<>0,"購入","その他")))) のような式にすれば可能かと思います。 なお、上記の式では優先順位が「修理」「検査」「購入」となりますので 例えばA1に「修理」と「経費」の両方が含まれている場合は「修理」を返します。 この順番を変えたい場合は、IFの入れ子の順番を変えてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 IF関数についての知識が増えました。 また、よろしくお願いします!

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

方法1:IF(IF(方式。ただし重ねられる数に限界有り =IF(A1="","",IF(OR(ISNUMBER(FIND({"点検","検査","校正"},A1))),"検査",IF(OR(ISNUMBER(FIND({"修理","調整"},A1))),"修理",IF(OR(ISNUMBER(FIND({"発注","購入","経費","配布"},A1))),"購入","その他")))) 方法2:IF(IFで重ねきれないほどカテゴリが増えた場合で,「その他」のキーワードがちゃんと定義できる場合 =IF(OR(ISNUMBER(FIND({"点検","検査","校正"},A1))),"検査","") & IF(OR(ISNUMBER(FIND({"修理","調整"},A1))),"修理","") & IF(OR(ISNUMBER(FIND({"発注","購入","経費","配布"},A1))),"購入","") & IF(OR(ISNUMBER(FIND({"その他","に該当する","キーワード"},A1))),"その他","") 方法3:IF(IF(で重ねきれないほどカテゴリが増え,さらに「その他」のキーワードも調べたくない場合 =IF(OR(ISNUMBER(FIND({"点検","検査","校正"},A1))),"検査","") & IF(OR(ISNUMBER(FIND({"修理","調整"},A1))),"修理","") & IF(OR(ISNUMBER(FIND({"発注","購入","経費","配布"},A1))),"購入","") & IF(OR(A1="",ISNUMBER(FIND({"点検","検査","校正","修理","調整","発注","購入","経費","配布"},A1))),"","その他")

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 とても参考になりました。 また、よろしくお願いします!

関連するQ&A

  • エクセル2002でIF関数を使用して特定の文字列を検索しそれを数字で別のセルに表記する方法

    名に「女子」の文字があれば1の女子。 「短期大学」の文字があれば2の短期大学。「短期」としか書いてないところは3の短期、それら以外は、4のその他。また、女子と短期大学の両方書いてある場合は、最初に出てくる方を採用(例えば○○女子短期大学とあれば1の女子、○○短期大学女子というのであれば、2の短期大学)。このような場合最初の3つの条件であれば=IF(ISNUMBER(FIND("女子",A1)),"1",IF(ISNUMBER(FIND("短期大学",A1)),"2",IF(ISNUMBER(FIND("短期",A1)),3,4))) と考えたんですがその先がわからず。(これもあってるかどうか・・・)もしもわかる方がいましたらぜひぜひ教えてください。

  • EXCEL関数使用で結果が理解できません

    OS:WindowsXP EXCEL2000 以下の表が既に作成されています。 行 :O(英文字オーです) ------------------ 列 6 | 96 7 |216 8 |216 9 |185 10 |(空欄) 11 |(空欄) ここで、セルR6に以下の式が入力されています。 =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) セルR6には185が表示されているため、空欄でない最後の行の数値を 出力させる式のようなのですが、よく理解できません。 ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? ROW(O6:O11)は6でした。 IF(ISNUMBER(O6:O11),ROW(O6:O11))はFALSEです。 MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))は0です。 COLUMN(O6:O11)は15です。 どなたか知恵をお貸しください。

  • エクセルで検索し別シートに抽出したい。2007

    http://okwave.jp/qa/q6798171.html                                       上記のベストアンサーの方法で試してみましたが上手く行かなかったので、ご教授お願いします。                                                          Sheet1のAからAMにそれぞれ各項目があり、Sheet2はURLベストアンサーの画像と同様になっています。Sheet2の検索項目はO列とP列ですが、後々検索したい項目が増えた時に追加しやすい方法だと助かります。O列は仮名+数字(あ1234)P列は漢字です。                                                              Sheet1のAM2へは下記のようにしました。  =IF(COUNTA(Sheet2!$A$2:$B$2)=0,"",IF(Sheet2!$B$2="",IF(ISNUMBER(FIND(Sheet2!$A$2,B2)),ROW(),""),IF(Sheet2!$A$2="",IF(ISNUMBER(FIND(Sheet2!$O$2,P2)),ROW(),""),IF(AND(ISNUMBER(FIND(Sheet2!$A$2,B2)),ISNUMBER(FIND(Sheet2!$O$2,P2))),ROW(),"")))) Sheet2のA5には下記のようにしました。 =IF(COUNT(Sheet1!$AM:$AM)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$AM:$AM,ROW(A1)))) お手数ですがご教授よろしくお願いします。

  • Excel で初歩的なんですが。

    例えば演算した結果をA列は "○" B列には "×" が表示されています、両方表示されることはありません。該当が無ければどちらも" " 空白になります。 例えば A1:B1 を参照して ○か×か空白 の値をC1に返すにはどうすれば良いでしょうか? =IF(ISNUMBER(FIND とか使っていろいろやってますがエラーばかりで先に進めません。。。 よろしくお願いします。

  • エクセル関数の読み方を教えてください。

    よわい70歳弱のもうろくジジーです 教えてください 郵便番号付き住所とついてない住所の列から郵便番号を取りだす式を調べているうちに次のような式が見つかりました。 =IF(ISNUMBER(LEFT(A1,1)*1),LEFT(A1,8),"") このうち、 ISNUMBER(LEFT(A1,1)*1)の意味を教えてください。 ISNUMBER関数は、対象の文字列が数値の場合にTRUEを返し、それ以外の時はFALSEを返すと言うことまではわかったのですが 左に数値?(郵便番号は数値か?)を含むセルから数値を判定する時に 引数として「LEFT(A1,1)*1」すなわち「A1セルの左から1文字」に「1」を乗じると「TRUE」を返し、乗じない場合「FALSE」を返すのかを教えてください。 説明不十分の場合補足しますよろしく御願いします

  • エクセル関数の書き換えについて教えてください。

    次のようなエクセル関数を使用していますが、 =INT(IF(ISNUMBER(S52),S52,S50)*0.67) 小数点が切り捨てになるようになっています。 そこで、小数点を切り上げるようにするにはどのように関数に 書き換えればよいか、教えてください。 宜しくお願いします。

  • エクセル IF式について、

    先日からこちらで=IFとisnumberの使い方を教えていただき、次のような式を作りました。 =IF(isnumber(C2),B2+C2+F2+G2+J2+K2,"") これで(C2)に数値がある時のみ計算結果を打ち返し、文字その他は空欄で、が出来ました。 次にやりたいことは、(C2)と(G2)と(K2)のいずれかに数値がある時に計算させる式はどのようにすればよろしいでしょうか? 以下の4つを試しましたがNGでした。 =IF(isnumber(C2,G2,K2),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)*(G2)*(K2)),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)OR(G2)OR(K2)),B2+C2+F2+G2+J2+K2,"") =IF(ISNUMBER((C2)*OR(G2)*OR(K2)),B2+C2+F2+G2+J2+K2,"") よろしくお願いします。

  • EXCEL関数の配列の考え方について

    EXCEL関数の配列について、ご教授願います。 具体的には、集計作業で条件を絞り込む時、例えば、列Aでは文字列「あ」又は「い」を含み、列Bでは文字列「う」、「え」、または「お」を含むデータ数を集計する場合、 =SUMPRODUCT((A1:A100={"あ","い"})*(B1:B100={"う","え","お"}))・・・(1) 私はいつもこの方法を使用しています。この場合、列Aでの条件数(「あ」「い」の2つ)と列Bでの条件数(同3つ)が異なっている場合でも、特に問題は起こりません。 但し、これを下記のように書き換えます。 =SUMPRODUCT(ISNUMBER(FIND({"あ","い"},A1:A100))*ISNUMBER(FIND({"う","え","お"},B1:B100)))・・・(2) (2)式は(1)式と同じ意味を示すはずですが、こちらは#N/Aでエラーとなります。調べてみたところ、列Aの条件数(2つ)と列Bの条件数(3つ)が異なる場合(どちらかの条件数が1の場合を除く)、エラーになるという事実は判明しましたが、計算式内部でどのような処理が行われた結果、そうなったのか、全く分かりませんでした。恐らく、EXCELの配列や行列式の考え方が両者で異なっているからだと思うのですが、ネットで調べてもその答えらしきものを見つけることができませんでした。  これについて、ご存知の方、どうぞご教授下さいます様、お願い致します。

  • エクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

    エクセル関数 → VBAへの変換 現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。 理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の 式を入れたいからです。 なので、エクセル関数を以下のようにVBAにいれていました .Cells(7, 51).Formula = "C6&E6" しかし、これを以下のようにすると、エラーになってしまいました。 .Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため 同様に、以下のものがすべてエラーになります。 .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" どうすればよろしいでしょうか?

  • VBAのCodeModule.Linesの記入方法

    Set Target = ThisWorkbook With Target.VBProject.VBComponents("Module2").CodeModule For i = 1 To .CountOfLines If .Lines(i, 2) = Range("AE77").FormulaArray = _ "=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)" Then .ReplaceLine i, Range("AE77").FormulaR1C1 = _ "=ROUNDDOWN((SUMIF(R11C19:R72C19,""*1号施設*"",範囲1)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲2)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲3)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲4)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲5)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲6))/8,0)" End If Next i End With の If .Lines(i, 2) =     以下の Range("AE77").FormulaArray = _ "=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)"  Then 記入方法が解りません。 605行目からは2行にわたるコードを記載してるのですが、Range("AE77").FormulaArray = 以下>=8)*1)"まで(605行以外にもあるのでForで廻してます) 文字列として””で括るるんだろうなと思ってトライしましたが、””で括る場所が多すぎてどこに付ければいいのやらです。最初と最後を””付けるだけでなく元々("AE77")のようになっている場所には更に””を付けたりするのでしょうか?それも試しましたが、途中の:にも何かしなくてはならないような‥ どなたかご教示願います。