• ベストアンサー

EXCELで企業名を検索し、フラグを立てたい。

EXCEL2000を使用しています。 つかぬ事をお伺い致しますが、 1.sheet1に企業名や、担当者名、住所等々が入ったデータがあります。 2.行いたい作業は、企業名に例えば、<NTT***>や<SONY****><NEC**>と入った企業名の隣の列にフラグを立てたいのです。 3.2.であげた企業のグループ会社にフラグを立てたいのです。 4.その他には、中小企業も入っており、1社しか社名がないものをもちろんあります。これにはフラグは立ちません。 5.検索する名称がはっきりとわかっていれば、 (=IF(OR(COUNTIF(A1,"*NTT*"),COUNTIF(A1*NTT*")),"1",""))でいいのですが、1万件程のデータがあり、条件に一つ一つの企業名を入れて計算式を完成させるのではなく、「左から何文字目かが同じ文字であれば、フラグが立つ」ようにしたいのですが、このような事は可能でしょうか? 解りにくくて恐縮ですが、ご回答の程、よろしくお願い致します。

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

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

#04です。マクロをちょっと改変します .Cells(idxB, 3) = "*" の行を  .Cells(idxB, 3) = .Cells(idxA, 1).Value に変更して下さい。そうすれば結果は以下のようになり、後で検索しやすいと思いました。 A列   B列    C列 検索企業 企業リスト グループ nec   aaaaaa sony  bbbbbb ntt   eenecee   nec      ffffSONY  sony      hhhhhh      ntt-comgg  ntt      以下続く

nene99
質問者

お礼

無事に作業が出来ました。 どうもありがとうございました。 またよろしくお願い致します。

その他の回答 (5)

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

>解りにくくて恐縮ですが 4,5が判りにくい。例示が不十分。 で回答者側でこうですかと聞かねばならない。 文字列の中にその「文字連」が見つかれば、どこでもということで やってみます。 A1に会社名・文字列を入れる A2以下に 会社名データがあるとする。 例データA1とA2:C6(c2:C6は後記関数式の結果) SONY NTTコミニ コミNTT マリンSONY 1 NTTメンテナンス SONYミュジック 2 C2に =IF(ISERROR(FIND($A$1,A2)),"",MAX($C$1:C1)+1) と入れて下方向に式を複写。 E2に =IF(ROW()-1>MAX($C$2:$C$100),"",INDEX($A$2:$A$100,MATCH(ROW()-1,$C$2:$C$100,0),0)) と入れて下方向に式を複写。 結果 マリンSONY SONYミュジック こんなのでよいですか。 フラグだけならE列は不要。 自称imogasi方式というとき方で、OKWAVEに沢山載せている。

nene99
質問者

お礼

無事に作業が出来ました。 どうもありがとうございました。 またよろしくお願い致します。

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

COUNTIFの条件が *NTT* となっているところをみると企業名の途中に文字列があってもヒットさせたいのかな? と思いました。 このマクロはA列(A2から下)にヒットさせたい企業名、B列(B2から下)に企業リストを入れて動かすと、C列にフラグが立つようにしたものです。nttなどの文字列が先頭になくても良いですし、大文字、小文字は区別しません。 A列   B列    C列 検索企業 企業リスト nec   aaaaaa sony   bbbbbb ntt   eenecee   *      ffff      以下続く Private Sub リスト突合() Dim Kekka Dim idxA, idxB As Long  Application.ScreenUpdating = False  With ActiveSheet  For idxB = 2 To .Range("B65536").End(xlUp).Row   .Cells(idxB, 3) = ""   For idxA = 2 To .Range("A65536").End(xlUp).Row    Kekka = Application.Search(.Cells(idxA, 1).Value, .Cells(idxB, 2).Value)    If IsNumeric(Kekka) Then     .Cells(idxB, 3) = "*"     idxA = .Range("A65536").End(xlUp).Row + 1    End If   Next idxA  Next idxB  End With  Application.ScreenUpdating = True End Sub 最初はfunctionにしようかとも思いましたが件数が多いとのことなのでマクロにしました。文字列検索で配列関数が使えないため、マクロでも時間がかかると思いますがちょっと我慢して下さい

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

#2です。 >入力した結果、「値の更新:Sheet2」のウインドウが出てきて、今式を入れたシートを選択した結果、「#N/A」という値が全てに返ってきました。 NTT,SONY,NECを入力したのはSheet2ですよね。 その範囲を選択した状態で「挿入」「名前」「定義」で 名前を検索企業にして「追加」を押してください。 これで上手くいきませんか?

nene99
質問者

お礼

無事に作業が出来ました。 どうもありがとうございました。 またよろしくお願い致します。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

上記2をSheet2に記入(例 検索企業=Sheet2!$A$2:$A$100) =TEXT(SUMPRODUCT((検索企業=LEFT(A1,LEN(検索企業)))*1),"#")

nene99
質問者

補足

ご回答いただき、ありがとうございます。 入力した結果、「値の更新:Sheet2」のウインドウが出てきて、今式を入れたシートを選択した結果、「#N/A」という値が全てに返ってきました。 何が問題なのでしょうか? 申し訳ありませんが、ご回答の程、よろしくお願い致します。

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

左からn文字取り出し、それにあった企業リストを検索する方法ですが如何でしょうか。 =IF(SUMPRODUCT((LEFT(A1,3)=3文字企業名リスト)+(LEFT(A1,4)=4文字企業名リスト)),1,"") ※企業名リストは絶対参照範囲で指定(例えば、A1:A10なら$A$1:$A$10)して下さい。

nene99
質問者

お礼

無事に作業が出来ました。 どうもありがとうございました。 またよろしくお願い致します。

nene99
質問者

補足

解りやすいご回答をいただき、ありがとうございます。 入力したのですが、ひとつもフラグが返ってきません。 何が原因なのでしょうか? 考えられる理由で結構ですので、ご回答頂ければ助かります。 よろしくお願い致します。

関連するQ&A

専門家に質問してみよう