• ベストアンサー

エクセルの検索関数

エクセルのVlookup関数など検索方法で、例えば、 「赤白黄緑」のうち一番多く連続して一致している色があるセルを検索したい場合なのですが。。 1 白黄青     白黄の2つが一致 2 黄緑桃赤    黄緑の2つと赤1つが一致 3 紫赤      赤の1つだけが一致 4 緑黄白赤    順番が違う為それぞれ1つが一致 5 赤紫黄     連続してない為赤と黄の1つづつが一致 となってた場合2行目が一番多く一致しているので、検出させる方法はないでしょうか? あるいは1行目、2行目の両方を検出させる方法でもいいと思います。 Vlookは普通は一番最初に検索された値を返しますが、一致するものが2つ以上ある場合、全てを返す方法はないでしょうか? なかなか説明しづらかったのですが、宜しくお願い致します。

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.5

失礼しましたm(_ _)m 念の為。 【手順】 1)目的のシートをActiveにして、[Alt]キー+[F11]キー同時押し。  VisualBasicEditor(VBE)が起動します。 2)そのVBE画面で[Alt]キー → [i]キー → [m]キー の順押し。  標準モジュールが挿入され、マウスカーソルが無地シートのようなものにフォーカスします。  (コードウィンドウといいます) 3)そこに先ほどの Sub try1() や Sub try2() をコピーペーストします。 Sub try1() : (略) : End Sub 4)上記コード内のどこでも良いので、マウスカーソルを置いて、[F5]キーで実行です。 (もしくは、Excel側[ツール]-[マクロ]-[マクロ]からでも実行できます) もし、マクロ、VBAに興味を持たれたら、 http://www.sanynet.ne.jp/~awa/excelvba/kouza.html http://excelvba.pc-users.net/ http://www.asahi-net.or.jp/~ef2o-inue/top01.html など、Netだけでも結構勉強できます。

bluresky
質問者

補足

色々教えていただいてどうも有り難うございますm(__)m 是非参考にさせていただきたいと思います。

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

その他の回答 (4)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.4

こんにちは。 『一番多く連続して一致している色があるセルを検索したい場合』 作業列に =SUM(ISNUMBER(FIND({"赤","白","黄","緑","赤白","白黄","黄緑","赤白黄","白黄緑","赤白黄緑"},A1))*{1,1,1,1,2,2,2,3,3,4}) こんな式だと、連続一致優先で点数が高くなるので、その結果のMAXを得れば良いです。 マクロで、一気に選択させるまで持っていくには、上記式の考え方を流用して Sub try1()   Dim r As Range   Dim s As String   Dim s1 As String   Dim s2 As String   Dim x As Long   Dim mx As Long   s1 = "{""赤"",""白"",""黄"",""緑"",""赤白"",""白黄"",""黄緑"",""赤白黄"",""白黄緑"",""赤白黄緑""}"   s2 = "{1,1,1,1,2,2,2,3,3,4}"   For Each r In Range("A1", Range("A1").End(xlDown))     x = Evaluate("SUM(ISNUMBER(FIND(" & s1 & ",""" & r.Value & """))*" & s2 & ")")     If x >= mx Then       If x > mx Then s = ""       s = s & "," & r.Address       mx = x     End If   Next r   If mx > 0 Then Range(Mid$(s, 2)).Select End Sub "赤白黄緑"の条件が変動するなら Sub try2()   Dim arg As String   Dim ad As String   Dim s  As String   Dim r  As Range   Dim i  As Long   Dim j  As Long   Dim k  As Long   Dim n  As Long   Dim x  As Long   Dim mx As Long   Dim vi      arg = "赤白黄緑" 'Range("B1").Value 'など任意   n = Len(arg)   ReDim v(1 To (n + 1) * n / 2)   For i = 1 To n     For j = 1 To n - i + 1       k = k + 1       v(k) = Mid$(arg, j, i)     Next j   Next i   For Each r In Range("A1", Range("A1").End(xlDown))     x = 0     s = r.Value     For Each vi In v       If s Like "*" & vi & "*" Then x = x + Len(vi)     Next vi     If x >= mx Then       If x > mx Then ad = ""       ad = ad & "," & r.Address       mx = x     End If   Next r   If mx > 0 Then Range(Mid$(ad, 2)).Select End Sub

bluresky
質問者

補足

回答有難うございました。 ちょっと私には難しいので、勉強してみます。 有難うございました。 また理解して、返信します。

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

VBAではお世話になっている立場ですが、頭の体操で取り組んでみました。 質問者の意図されている様な、すっきりしたものではありませんが。 A1:A5に検索対象のデータを置いて実行すると、B,C列に中間結果、D列に該当する最大の並び、E列に並びの合計を表示します。 ご参考になれば幸いです。 ※インデントが投稿時に消えてしまい、見難いですがご容赦下さい。 Sub test() Dim i As Integer, j As Integer Dim oneChar As String, nextChar As String Dim tempString As String Dim charPos As Integer Dim tempArray As Variant Dim maxSeries As Integer, sum As Integer Const lastRow As Integer = 5 Const delimiter As String = "@" '並び順に応じた数字、該当しない場合はデリミタ(ここでは@)に置換 For i = 1 To lastRow tempString = Cells(i, 1).Value For j = 1 To Len(Cells(i, 1).Value) oneChar = Mid(tempString, j, 1) Select Case oneChar Case "赤" tempString = Replace(tempString, oneChar, "1") Case "白" tempString = Replace(tempString, oneChar, "2") Case "黄" tempString = Replace(tempString, oneChar, "3") Case "緑" tempString = Replace(tempString, oneChar, "4") Case Else tempString = Replace(tempString, oneChar, delimiter) End Select Next j Cells(i, 2).Value = tempString Next i '数字の並びが、一つ増加になっていない場合、間にデリミタを入れる For i = 1 To lastRow tempString = Cells(i, 2).Value charPos = 1 For j = 1 To Len(tempString) oneChar = Mid(tempString, charPos, 1) nextChar = Mid(tempString, charPos + 1, 1) '両文字が数字の時 If Val(nextChar) * Val(oneChar) <> 0 Then If Val(nextChar) - Val(oneChar) <> 1 Then tempString = Replace(tempString, oneChar, oneChar & delimiter) charPos = charPos + 2 End If Else charPos = charPos + 1 End If Next j Cells(i, 3).Value = tempString Next i 'デリミタにより文字列を分割して、最大の長さ及び長さの合計を求める For i = 1 To lastRow maxSeries = 0 sum = 0 tempString = Cells(i, 1 + 2).Value tempArray = Split(tempString, delimiter) For j = 0 To UBound(tempArray) If Len(tempArray(j)) > maxSeries Then maxSeries = Len(tempArray(j)) End If sum = sum + Len(tempArray(j)) Next j Cells(i, 4).Value = maxSeries Cells(i, 5).Value = sum Next i End Sub

bluresky
質問者

補足

回答有難うございました。 ちょっと私には難しいので、勉強してみます。 有難うございました。 また理解して、返信します。

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

関数はセルの値として1つの値しか返しません。ですからVLOOKUPやMATCH関数やFIND関数を 考えても無駄です。配列数式というのも、1セルの値は1つです。 この課題は難しい質問かなと思います。 同じことをVBAでやるほうが素直な構想でプログラムが組めます。 ーー 例データ A1:A5 A列  B列 白黄青 2 黄緑桃赤 3 紫赤 1 緑黄白赤  4 赤紫黄  2 ーー B1に =SUM(IF(ISERROR(FIND({"赤","白","黄","緑"},A1)),0,1)) ト入れてSHIFT,CTRL,ENTERを同時押しします(配列数式) その式をA5まで複写します。 ーー 結果 上記の通り。 これは”赤","白","黄","緑"のうち、そのセルの文字でで見つかった個数を出してます。 ーー 別の式で =SUMPRODUCT(IF(ISERROR(FIND({"赤","白","黄","緑"},A1:A5)),0,1)) としてした方向に式を複写しても同じです。 ーー このB列での=MAX(B1:B5) の4が最多です。 これを一発で出そうとやってますが、現状うまくいってません。 とりあえず、挙げます。

bluresky
質問者

補足

回答有難うございました。 ちょっと私には難しいので、勉強してみます。 有難うございました。 また理解して、返信します。

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

大学の課題のようだ。 使えるかなという機能を上げておきます。 match, count, rank, 配列数式

bluresky
質問者

お礼

返信有難うございます。 やってみます。

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

関連するQ&A

  • 警報用電線(AE1.2-3P)の配線色の組合せを教えてください!

    警報用電線(AE1.2-3P)の配線色の組合せを教えてください! 工事用の資料を作成しており、警報用電線の配線が色別にどこに刺さっているかの結線図を作成しています。 線の番号はわかるのですが、実際の色がわかりません。 (現場にいけばわかるのですが、現場からは遠く、近くに部材もありません。) 1P=白赤 2P=白赤、青黄 5P=白赤、白青、白黄、白若葉、白茶 10P=白赤、白青、白黄、白若葉、白茶、白灰、白うす青、赤青、赤黄、赤若葉とわかりました。 では3Pは? 白赤、青黄、若葉茶? 白赤、白青、白黄? カタログを見てもいまいち理解できません。どなたか教えてください。

  • エクセルで、特定の文字が含まれるとき、値を返す

    エクセルで、特定の文字が含まれるとき、値を返す方法が知りたいです。 たとえば、C15のセルに、「赤い」「黄色い」「白い」という文字や それらが合わさったりした「赤、黄色い、白」といった文が入るとします。 その際、「赤」「黄」「白」という文字が一つでも入っていれば 別のセルに「色あり」という文字が表示されるようにしたいです。 (検索条件が「赤」または「黄」または「白」ということです) そのような場合はどのような関数がありますでしょうか。 宜しくお願いします!

  • エクセルの関数・計算式を教えてください。

    いつもお世話になります。 下記のようにある場合(A~Cは列です) 例えば、A列が”白”でB列が”い”の場合のC列の数の合計と件数 を出したい場合、どのような計算式にすればいいのでしょうか? よろしくお願いします。  A  B  C    白 あ  3  黄 い  1  赤 う  2  白 い  5  赤 あ  4  ・ ・  ・  ・ ・  ・  ・ ・  ・

  • Excelの関数で

    お願いします。 Index関数とMatch関数を使用して表の中の値を求めようとしましたが、 検索行が複数あるため、うまくいきません。 検索する列は1列(a,b,c)ですが、検索行(あ、い、う~)が複数になっています。 更に空白もあります。 こんな感じ↓です。 ---------------------   あ  い   う   え      お   か ---------------------    a  10  20  30 b  40  50  60 c  70  80  90 --------------------- こういった場合にはどんな関数を使って一致する値を求めたら良いのでしょうか? 大変困っております。よろしくお願いします。

  • エクセルの検索

    エクセル2000を会社で使用しています。 ある顧客一覧をエクセルで作成していて、ある行が データ抽出時、使い勝手が悪くなり、 もともと1つだったセルのデータを2セルに分けて 入力するようにしたところ、編集→検索ツールで ひらがなやカタカナでも文字が検索できたのに、 セルを分けたとたん、完全一致でなければ検索ヒット しなくなってしまいました。 もちろん、検索のオプション項目の完全一致には チェックはいれておりません。 検索できるように、改善する方法はないでしょうか?

  • エクセルの突き合わせ方法について

    同じシート内でC列にあるキーワードを[A列]と[B列]から検索して、結果を[D列]に返す。完全一致は’○’、一部一致は’△’、見つからない場合は’×’とする。 また、結果文字を色分け(検索キーワード含め)できると助かります。 ’○’は青、’△’は黄色、’×’は赤色。 よろしくお願いいたします。 <条件> ・[A列]は[C列]から検索したい一部のキーワード。見つかれば’△’ ・[B列]は[C列]と完全に一致した場合のみ’○’ ・[B列]の一部が[C列]に見つかっても’×’ ・[B列]と[C列]が完全一致すれば、その一部は必ず[A列]に存在する  が結果は’○’で返す。 <具体例1> [A列]  [B列]     [C列] [D列] 111(赤) 222AAA(青)  222AAA ○(青)    222(黄) 110AAC(青)  999AAC ×(赤) 333(赤) 111aaa(赤)  110AAC ○(青) 444(赤) 112bbb(赤)  110zzz ×(赤) 555(赤) 113ccc(赤)  222yyy △(黄)

  • エクセルの関数での処理方法

    下記のようなデーターベースがあります  列 A   B   C  D   E    F 行  4/1 4/10 4/20 1   青  100 青 1100 青 11000 2  黄色  200 黄色 1200 黄色 12000 3 緑  300 緑 1300 緑 13000 4  赤  400 赤 1400 赤 14000 5  紫  500 紫 1500 紫 15000 6  黒  600 黒 1600 黒 16000 7  白  700 白 1700 白 17000 8  茶  800 茶 1800 茶 18000 9  水色  900 水色 1900 水色 19000 10 朱色 1000 朱色 2000 朱色 20000 上の図では分かりにくいかも知れませんが、 A列には上から4/1、青、黄・・・ B列には上から空白、100、200・・・  C列には上から4/10、青、黄・・・ D列には上から空白、1000、2000・・・  E列には上から4/20、青、黄・・・ F列には上から空白、10000、20000・・・と並んでます。 4/1の項目は4/9までの値段 4/10の項目は4/19までの値段 4/20の項目は4/30までの値段になります。 4/5、4/10/、4/15、4/25の白の値段を調べるにはどのようにすればいいでしょうか? 4/5、4/10、4/15、4/25のそれぞれに VLOOKUP関数の式を入れて調べるんではなく ひとつの式を入れて調べる日付のセルの値だけが 変わるだけで 全部同じ式で反映されるようにしたいんですが・・・ できますか? VOOLUP関数やIF関数を組み合わせてやってるんですが うまくいきません。 それともマクロでないとできないですか? よろしくお願いします。

  • エクセルで合致する数字の検索

    エクセルで合致する数字を素早く検索したいです。 例えば、A2~A50000に重複していない数字(桁数色々)が入っている場合、B1にA列の数字をどれか1つ入力すると、その一致する一行だけ表示するような方法はありますか? フィルタを使うには検索数が多すぎて大変なので、このような検索ができるか教えて下さい。

  • 納品書の宛名を簡単入力する方法

    顧客シートの電話番号下4桁が一致した行の名前を検出しリストボックスに表示したいのですが設定の仕方がわかりません。 電話番号下4桁ですので一致するセルが複数になり関数vlookでは対応できません。 初心者です。簡単な方法ご伝授ください。よろしくお願いいたします。

  • 任意の文字列を検索して文字を追加する。

    マクロについてご質問します。 宜しくお願い致します。 <質問> A列…すべてのデータが入っています。 B列…検索したいデータが入っています。 C列…検索結果のデータを出力します。 過去に教わったIF関数を使用した「=IF(ISNA(MATCHを組み合わせた式)」方法ですとA列の文字とB列の文字が一致しているものは そのままC列に表示で、B列に含まれないA列の文字はC列に"その他"として出力することができました。 今回は、A列の文字とB列の文字が一致している場合は C列に文字を加え、A列B列ともに一致していない場合は そのままの表示を行いたいのですがどなたかご助言していただけると助かります。 A列   B列  C列 ------------------------ 赤   白   赤   白   緑   白組 黄       黄 緑       緑組 青       青 IF関数で行うことは可能なのでしょうか? 宜しくお願い致します。

このQ&Aのポイント
  • プリンターを長期間使わない場合、インクカートリッジは取り外しておいた方がいいでしょう。
  • 長期間プリンターを使用しない場合、インクカートリッジの乾燥や詰まりが発生する可能性があるため、取り外しておくことをおすすめします。
  • インクカートリッジは長期間使わないと乾燥しやすくなりますので、プリンターを使用しない期間が長くなる場合は取り外すことを検討してください。
回答を見る

専門家に質問してみよう