例えばA1セルに「ミズノ ランニングシューズ 」A2セルに「ニューバランス ランニングシューズ」とあるとします。この時「ミズノ」という文字が入っていた時は「001」、「ニューバランス」という文字が入っていた時は「002」をB1、B2セルに挿入したいです。実際にはA1からA1000くらいまであり、検索対象文字は10くらいあります。エクセルやCalcでどのような関数・数式と使えば導き出せるでしょうか。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

添付図参照


B1: =VLOOKUP(LEFT(A1,FIND(" ",A1)-1),D:E,2,FALSE)
「エクセルやCalcで特定の文字を検索しそ」の回答画像2
    • good
    • 0
この回答へのお礼

サンプルまで作っていただきありがとうございました。
当方の環境(calc)では以下のように修正したら動きました。ありがとうございました。感謝しますm(_ _)m
B1: =VLOOKUP(LEFT(A1;FIND(" ";A1)-1);D1:E2;2;0)

お礼日時:2017/04/17 09:56

1行目を別の使い方がしたいので、


A2セルに「ミズノ ランニングシューズ 」
A3セルに「ニューバランス ランニングシューズ」

A1000まであるとしましょう。

C1に「ミズノ」
D1に「ニューバランス」
といった具合に、1行目には検索対象文字を入れましょう。
L1まであるとしましょう。
C2~L1000には、該当するかどうかの判定を入れ、該当する場合はB1に表示させたい文字を、
該当しない場合は空白を表示させます。
C2=IF(COUNTIF($A2,"*"&C$1&"*")=0,"","001")
001の部分は個別に変えるのでもいいですが、2行目に表示させたい文字列を入れ、
データは3行目から。とするのでもいいです。その場合は
C3=IF(COUNTIF($A3,"*"&C$1&"*")=0,"",C$2)
となりますね。
個別に変えるのであれば、C2をL2までコピーし、それぞれ対応するものに書き直します。
2行目にそれぞれ入力したのであれば、C3をL3までコピーします。
B2(あるいはB3)にはC2~L2(あるいはC3~L3)を&でつないだものを表示させましょう。
B2~L2(あるいはB3~L3)を1000行目までコピーすれば完成です。

注意点としては、
①複数の検索文字列が含まれている可能性がないか?
②検索したい部分以外で一致する可能性がないか?
といったことでしょうか。
A列に入るデータ次第なので、何とも言えませんが、
メーカー(半角スペース)製品
といった感じで入力するのでしたら、
検索のときに"*"&C$1&"*"ではなくC$1&" *"で検索するのがよろしいかと。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございました。当方の環境ではなぜか動きませんでした。当方側の設定で何かミスがあると思われますので検証します。ありがとうございました。感謝しますm(_ _)m

お礼日時:2017/04/17 09:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QA1セルにAと入力すると、A2セルに3000A3セルに2000A4セルに1000と表示させたい。

A1セルに「A」と入力する1回だけで、
A2セルに「3000」
A3セルに「2000」
A4セルに「1000」
A5セルに「合計数字」を表示させたいのですが、
式をご教授願いたいです。

よろしくお願いします。

Aベストアンサー

D1:G3
A500030001000
B500300130
C1200800300
A1にA,B,Cのどれかを入れる。
A2に =VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE)と入れて、
A4まで(G-D-1列数だけの行数)式を複写する。
結果
A1がBの場合A1:A4は
B
500
300
130

A1の空白の場合に対処して
=IF(A1="","",VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE))
が良いでしょう。
(既回答とほぼ同じ式ですが、1箇所違うところがあります。)

Aベストアンサー

書式>条件付き書式

セルの値が 次の値より小さい を選択
値は$B1とし、書式を設定。
設定したセルをコピーすればできませんか?

Qエクセル初心者ですが、A2のセルに文字が書き込まれると、A1のセルに自

エクセル初心者ですが、A2のセルに文字が書き込まれると、A1のセルに自動的に15の数字が入るようにする関数をおしえて下さい。

Aベストアンサー

>A2には他のシートのセルに入力されると文字が表示されるように関数が入っています。
A2に定義した関数の結果は全て文字列でしょうか?
簡単な例では =Sheet2!A2 のようにSheet2の同一セルを参照している場合、対象が未入力の場合はA2に数値の0が反映され、文字列が入力されればその文字列になります。
倫理運算のif関数で =if(isblank(Sheet2!A2),"",Sheet2!A2) のように定義されたときは数値の入力時のみ数値で文字列入力と未入力の場合はA2に文字列が定義されます。

これらの条件を考慮しないと質問の用件を満足する関数を組み立てられません。
A2に定義された関数を提示して頂く必要があります。
また、他のシートのセルに入力されるデータの種類も必要になると思います。

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

QA01セル>B01セルだったら、C01セルに+1

A01セル>B01セルだったら、C01セルに+1と表示
A01セル<B01セルだったら、C01セルに-1と表示

この方法を、教えてください。

Aベストアンサー

ついでに
=IF(OR(A1="",B1=""),"",IF(A1>B1,1,IF(A1<B1,-1,0)))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報