• ベストアンサー

FIND関数の値が#VALUE!の場合の非表示

エクセルで、セルの値に「virus」の文字列がある場合、「virus」と書く関数をFINDとMID関数で作ってみました。 =MID(C3,FIND("virus",C3),FIND("virus",C3)+4) この式だけだと、FINDの結果が無いときに、「#VALUE!」の文字が出てきます。この「#VALUE!」の文字を非表示にしたいと思い、IF文や条件付書式を試すのですが、「#VALUE!」は、長さ0の文字列””でもNULLでもないため、数式になりません。 良い方法をご存知の方教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8518/19364)
回答No.1

古いEXCELの場合 =IF(ISERROR(FIND("virus",C3)),"",MID(C3,FIND("virus",C3),FIND("virus",C3)+4)) 2007以降の新しいEXCELの場合 =IFERROR(MID(C3,FIND("virus",C3),FIND("virus",C3)+4),"") ※IFERROR関数は、IF関数とISERROR関数を合体させた関数で、EXCEL2007以降で使用できます。

panacon
質問者

お礼

chie65535 さんへ バッチリできました。 ありがとうございます。

その他の回答 (1)

  • yumi0215
  • ベストアンサー率30% (1335/4411)
回答No.2

この式ではだめでしょうか? =IF(C4="virus",MID(C4,FIND("virus",C4),FIND("virus",C4)+4),"")

panacon
質問者

お礼

yumi0215 さんへ 回答ありがとうございました。 iferrorで解決できました。

関連するQ&A

  • エクセルのFIND関数について

    エクセルの関数でFINDというのがあります。文字ストリングの中に 指定する文字列があれば、最初から何番目かを返す関数です。 質問は、もし見つからない時は式をいれたセルに「#VALUE!」 と表示されますが、IF文の中で使うような時、何と言う値で聞けば良いのでしょうか。””やNULLやNOTHINGやFALSEや-1でやって見ましたが上手く行きません。 =IF(FIND(”市”、A1、1)=○○、A1、” ”)の○○は何でしょう。(A1セルの文字列に「市」がなければA1を持ってきて、あれば ブランクとする.)

  • mid関数/find関数:一つのセルに同一の値がある場合

    mid関数、find関数について教えてください。 1つのセルに同一の値が入っていて、2個目の値から、何文字もしくは2個目の値を探したい場合どのようにしたら良いのでしょうか。 例)1つのセルに、1-A0001-A0002 と値が入っていて、"A0002"だけを別のセルに表記させたい場合、開始位置を9文字目と指定し、解を求めることができますが、2つ目の"A"から5桁というような指定の方法ができるのでしょうか。 RIGHT関数という方法もありますが、セルによっては、1-A0001-A0002○○○というように別の文字が続いているため、上記のような設定で解を求めたいと考えます。 アドバイスを宜しくお願いいたします。

  • ExcelのFIND関数について

    A->(1) B->(2) C->(3) という変換は,IF関数を使えばOKかと思います。 ですが、好みで次のように・・・。 =IFERROR(cutStr("(1)/(2)/(3)","/", FIND(Y4,"ABC",1)), "") cutStr()は、文字列を切り取る自作関数です。 ? cutStr("A/BB/CCC","/",1) A ? cutStr("A/BB/CCC","/",2) BB ? cutStr("A/BB/CCC","/",0) で、冒頭の式は Y4=A ---> (1) Y4=B ---> (2) Y4=C ---> (3) と、Y4に値があれば確かに間違いなく変換します。 しかし、 Y4=null ---> (1) と、誤変換します。 原因は、=FIND("","ABC",1) の値が1だからです。 これも、IF関数を使えばOKかと思います。 が、好みでこれも避けたい。 そこで、 =IFERROR(cutstr("(1)/(2)/(3)","/", findChar(Y4,"ABC")), "") と、合致しない場合は0を戻す findChar()を自作しました。 これで、一応は目的は達成しましたが、どうにも腑に落ちません。 そこで、質問します。 質問:FIND関数は、第一引数がnullの場合に1を返す仕様なのでしょうか?

  • エクセル。行を挿入すると、関数が反映されない

    とても困っているのでどうかお願いします。 たとえば、ある列にエクセル関数を挿入したとします。 今回私が挿入したのはIF関数でした。=IF(C1="","",10)をC1に入れて、それより下は、C2,C3,,とドラッグしていきました。 その途中に行を挿入したとき、たとえば15行目に挿入したとき、理想は勝手に 。=IF(C15="","",10) となってくれることです。しかしやってみると、実際にはそうなっていません。 関数は全く入っておらず、空欄になっています。 これでは、行を挿入するたびに関数をまた入れなおししないといけないということでしょうか? マクロなどでしか解決できないのでしょうか?(それとも条件付書式などで、列そのものに挿入するのでしょうか?) ちなみに条件付書式の場合、どこかからセルを貼り付けするとき、値のみにしないと、そのセルの書式も変更されてしまいますよね?だからあまり使いたくないのですが、、、 どなたかご存知の方はどうかお願いいたします。

  • Find関数内にFind関数をかける場合

    エラー91が発生し、手詰まりです。 どなたかご教授お願いいたします。 Find関数でDo~lppoを行い、初期の検索結果アドレスでLoopを抜けようと思ったのですが。。 エラーしてしまいました。 Find関数内にFind関数を用いることが出来ない と目にしたのですが。 下記のようなVBAの場合 どのように対処したらいいでしょうか? また、VBA初心者のため VBA文が見づらかったり、おかしなところがあると思います。 その部分についても教えて頂けたらと思います。 Sub SAMPLE() Dim TargetDE As String '文字列型 Dim TargetNo As String '文字列型 Dim PODate As String '文字列型 Dim FoundCell As Range ' Dim FoundDate As Range Dim FoundCellNo As Long '長整数型 Dim FoundDateNo As String Dim SearchArea As Object 'オブジェクト型 Dim tar_obj(1) As Object 'オブジェクト型 Dim Addr As String '文字列型 Dim Lastrom As Long ' Dim POLEFT As Range '検索文字列入力(DE) TargetDE = Application.InputBox("Fill in a DE:??", "DE:??", Type:=2) If TargetDE = "False" Then Exit Sub '検索対象範囲 Set SearchArea = Workbooks("Sample sample.xlsx").Sheets("Sample") Set tar_obj(1) = Workbooks("INPUT FORMAT.csv").Sheets("INPUT FORMAT") '表示先をクリア tar_obj(1).Cells(1, 1).CurrentRegion.ClearContents '検索実行 Set FoundCell = SearchArea.Range("C:C").Find(What:=TargetDE, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列(DE)を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub '検索文字列入力(DE Number) TargetNo = Application.InputBox("Fill in DE nomber", "Nomber", Type:=2) If TargetNo = "False" Then Exit Sub '最初の検索結果の行数を格納 Addr = FoundCell.Address '検索文字列入力(PO Date) PODate = Application.InputBox("Fill in Sample Date", "Date", Type:=2) If PODate = "False" Then Exit Sub Do '検索Cell右横の値がTargetNoと同じ場合 If FoundCell.Offset(0, 1).Value = TargetNo Then '行番号を代入 FoundCellNo = FoundCell.Row '検索の下限値を変数に代入 F_LAST = FoundCellNo + 50 '検索実行 Set FoundDate = SearchArea.Range(SearchArea.Cells(FoundCellNo, 1), SearchArea.Cells(F_LAST, 1)).Find(What:=PODate, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundDate Is Nothing Then 'MsgBox "Find is mistake" '検索文字列を含むセルがある場合 Else '変数に行番号代入 FoundDateNo = FoundDate.Row If FoundDate.Offset(1, 1).Value = "" Then MsgBox "The position of the cell is not correct. Please coordinate macro. " Else POLEFT = FoundDate.Offset(1, 1) For i = 2 To 13 If FoundDate.Offset(1, i) <> 0 Then If FoundDate.Offset(1, i) <> "." Then If IsNumeric(FoundDate.Offset(1, i).Value) = True Then '表示先(INPUT FORMAT)の行数をカウントアップ cnt = cnt + 1 PORIGHT = FoundDate.Offset(1, i).Value tar_obj(1).Range("E" & cnt) = POLEFT & PORIGHT End If End If End If Next i End If End If ElseIf FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Find is mistake" End If '次の検索を実行 Set FoundCell = SearchArea.Range("C:C").FindNext(After:=FoundCell) Loop While Not FoundCell Is Nothing And FoundCell.Address <> Addr ' If FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Not Find Number" ' End If End Sub

  • IF関数を算出した値を合計する

    こんにちは。 IF関数を使用した値を合計することができない為、お力を下さい。 IF関数で=IF(A1<B1,C,D)と組んだ式ででた値を合計したいのですが 上手くできません。 文字列かと思いセルの書式設定を数値にしたのですができませんでした。 エラーメッセージも出ないため、何が問題なのかがわかりません。 わかることがあれば教えてください。 宜しく御願い致します。

  • エクセルのFIND関数の複数セル参照について

    C4=LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称])  「テーブル1」の「アドレス」列を部分一致で検索し、「B4」セルの文字列に該当する項目があったら、「テーブル1」の「名称」列のデータを「C4」セルに表示するよう、インターネット上の情報を参照しながら数式を組んでいます。  ところが、「B4」セルの文字列に該当する項目があるときはいいのですが、該当項目がない場合は「#N/A」と表示されるため、「IF」関数を追加し、以下のようにしたところ、うまく動きませんでした。 C4=IF(COUNT(FIND(B4,テーブル1[アドレス])),LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用")  「数式の検証」で調べたところ、「LOOKUP」関数内の「FIND」関数は「テーブル1」の「アドレス」列の各セルをそれぞれ参照しているのに対して、「COUNT」関数内の「FIND」関数は同じ行(C4の場合は4)の「テーブル1」の「アドレス」列しか参照していませんでした。 「LOOKUP」関数内の「FIND」関数のテーブル1[アドレス]: {"アドレス1";"アドレス2";"アドレス3"} 「COUNT」関数内の「FIND」関数のテーブル1[アドレス]: "アドレス4"  参照内容が異なるのはなぜでしょうか。  この場合、どのようにすればよろしいのでしょうか。  また、「LOOKUP」関数は「旧バージョンとの互換性を維持するためのもの」となっており、代わりに「VLOOKUP」や「HLOOKUP」、「MATCH」関数などで代用はできないのでしょうか。  何卒ご教示よろしくお願いいたします。

  • エクセルのif関数で

    エクセルのif関数でこれができるのかわかりませんが、 C1~C10の中の文字列の中にA1と同じ文字列があればB1に「1」を入れ、なければ「2」を入れるということをやりたくて B1のセルに IF(OR(C$1:C$10=A1),1,2) という計算式を入れました。 関数の引数の中の数式の結果では、正しい結果が表示されてるのですが、B1のセルには間違った結果が表示されます。 また、B2以下B20まで計算式をコピーするとB11以下は#VALUE!になってしまいます。 一つ一つを見てみると、どうやらセルに正しく表示されるのはAの行とCの行が=だった場合のみのようです。 #VALUE!が表示されているセルも含めて、数式の結果では正しい結果が出ているのにセルの表示が違っているのが納得できませんが、おそらく何かが間違っているのでしょう。 間違いを教えてください。 よろしくお願いします。

  • エクセルの関数を使用して、文字と数字を判別するには・・・

    条件付書式を使用しセルの値が、文字なら色を付け、数字なら書式を変えない設定にしたいのですが、判別するための関数がわかりません。 文字が入っているので、数式で条件付けをする方法だと思います。 よろしくお願いいたします。 エクセル2002

  • Excelの日付表示について

    470622と文字列で入力されているA1のセルを西暦で1972/6/22と表示させたい場合は、まずB1のセルにMID関数でS47/06/22と変換させてからC1のセルにVALUE関数で数値に変換し、セルの書式設定で日付の西暦表示に変えるしか方法はないのでしょうか?他にいい方法があれば教えてください。

専門家に質問してみよう