• ベストアンサー

【EXCELで文字抜出】上の行と同じ部分まで

エクセルで上の行と同じ部分まで文字を抜き出したいのですが うまいように思いつきません。 ぜひアドバイスお願いします!  たとえば A列に元データ B列に抜き出しということで    A列           B列  ABCマート柳沼店   ABCマート  ABCマート朝霞店   ABCマート  ABCマート朝霞店   ABCマート  越後屋 新潟本店   越後屋   越後屋 燕店      越後屋 

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 A1 に文字列があるとして、 このような式で、取り出せます。 =IF(MAX(IF(ISERROR(MATCH({"ト","屋"},MID(A1,ROW($A$1:$A$256),1),0)),0,MATCH({"ト","屋"},MID(A1,ROW($A$1:$A$256),1),0)))=0,A1,LEFT(A1,MAX(IF(ISERROR(MATCH({"ト","屋"},MID(A1,ROW($A$1:$A$256),1),0)),0,MATCH({"ト","屋"},MID(A1,ROW($A$1:$A$256),1),0))))) 配列数式ですから、一旦式を入力したら、目的の式にF2を押して、『ShiftとCtrlを押しながらEnterキー』を押します。

noname#65723
質問者

お礼

お礼が遅れました、大変失礼しました!! 上記の式でやってみたらうまくいきました 配列式ですね。 しかし、、、素晴らしいです・・・!! ここまで思いつきもしません。 このような式が立てられるのはやはり日々の使いこなしと 才能なのでしょうか。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 #4 のWendy02 です。果たして、マクロという解決方法が有効なのかはわかりませんし、質問者さんが、ここをフィードバックするかは分かりませんが、ちょっとかんがえてみました。これは、条件的には「並び替え」が済んでいないと、何の役にも立ちません。 データのある列の一番上に、セルポインターを持ってきてから、マクロを実行します。そのセルから下に範囲を選択して実行します。 現在のところ、例えば、右隣のセル A列にあるのなら、B列に出力するように作られています。 '<標準モジュール> Sub SamePickup()  Dim myCol As Range, c As Range, i As Long, j As Long  Dim myData() As String, buf As Variant  '元のデータの一番上の場所にマウスポインターを置くこと  Set myCol = Range(ActiveCell, ActiveCell.End(xlDown))  If myCol.Count = 1 Then Exit Sub  For Each c In myCol.Cells   ReDim Preserve myData(1, i)   buf = SameAbove(c) 'ユーザー定義関数へ   If c.Value <> buf Then    myData(0, i) = buf    If buf <> "" Then     myData(1, i) = Application.CountIf(myCol, buf)    End If   End If   i = i + 1  Next  For Each c In myCol.Cells   For j = LBound(myData, 2) To UBound(myData, 2)    If myData(1, j) <> "" Then     If InStr(1, c.Value, myData(0, j)) > 0 Then      '右隣のセルに出力する      c.Offset(, 1).Value = myData(0, j)      End If     ElseIf myData(1, j) = "s" Then      c.Offset(, 1).Value = myData(0, j)    End If   Next j  Next End Sub Private Function SameAbove(ByVal myRng As Range)  Dim i As Integer, num As Integer, Ret As Variant  Set myRng = myRng.Cells(1, 1)  If myRng.Row <> 1 Then   i = 1   Do    num = InStr(1, myRng.Offset(-1).Value, Mid(myRng.Value, 1, i))    If num = 0 And i = 1 Then     i = Len(myRng.Value): Exit Do    ElseIf num = 0 And i > 1 Then     i = i - 1: Exit Do    End If    i = i + 1   Loop Until i > Len(myRng.Value)   Ret = Mid(myRng.Value, 1, i)   Else   Ret = myRng.Value  End If  SameAbove = Ret End Function

noname#65723
質問者

お礼

関数ならずとも、こちらまでご丁寧にアドバイスくださってありがとうございます。 自分でも判断したとおり条件が曖昧なのです。 関数式はうまくいきました。 こういったデータは何らか自分で加工も必要かと思いました。 VBAですが”はじめての”級の本で最近 勉強中です。 日常仕事をしていると思った通りのデータで渡されるわけではないので データ処理は奥が深いと思いました。 ◆すみません、お礼の言葉から外れてますね。

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

私製関数をつくって見ました。 VBEの標準モジュールに Function samea(a) Dim cl As Range fst = "y" For Each cl In a If fst = "y" Then b = cl fst = "n" Else k = 0 For i = 1 To WorksheetFunction.Min(Len(cl), Len(b)) If Mid(cl, i, 1) = Mid(b, i, 1) Then k = k + 1 Else GoTo p01 End If Next i p01: b = Mid(b, 1, k) End If Next samea = b End Function をおきます。 結果を出したいセルに=samea(A6:A8)のように範囲指定してください。 先頭からの共通文字列を返します。

noname#65723
質問者

お礼

お礼のコメントが非常に遅くなり大変失礼しました。 VBEでオリジナルを作ってくださってありがとうございます。 これもまたうまく行きました。 ありがとうございます エクセルには色々なやり方があるのですね どこか必ず共通する法則が自分できちんと読めないと(事前に加工も) 関数もVBAもダメなんだと思いました。

回答No.3

A列のデータを見ると“屋号”+“支店名”となってるようですが “屋号”のみ抜き出したいと言うことでよろしいでしょうか? おそらく指定の形式に抜き出すのは無理です。 仮に抜き出す条件を“上または下のデータと同じ部分があれば抜き出す”としたとして  A列         B列  ABCマート柳沼店   ABCマート  ABCマート朝霞店   ABCマート  ABCマート朝霞店   ABCマート朝霞店  越後屋 新潟本店   越後屋  越後屋 燕店     越後屋 となってしまうはずです。 つまりA列にまったく同じデータが連続してあった場合、 A列のデータをそのままB列に代入してしまいます。 でてくる屋号が決まってるならやりようはあると思いますが。

noname#65723
質問者

お礼

大変失礼しました。お礼、相当遅くなりました!!(締め切り間違いしました) お詫び申し上げます。 おっしゃるとおり屋号に決まりがないのです。

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

#1のmshr1962です。 すみません。コピーする数式を間違えました。 =IF(ISERROR(FIND(" ",ASC(A2))),A2,LEFT(A2,FIND(" ",ASC(A2),1)-1)) が正解です。

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

ABCマート 柳沼店 越後屋 新潟本店 のようにスペースで分けられているなら =LEFT(A2,FIND(" ",ASC(A2),1)-1) ただし、スペースがない場合、元の文字列を表示なら =IF(ISERROR(FIND(ASC(A2),"* *")),LEFT(A2,FIND(" ",ASC(A2),1)-1),A2)

noname#65723
質問者

お礼

早速のご返答 ありがとうございます!! ご配慮のとおり スペース無しもあります しかし 結果が#VALUE!となってしまいます。どうしてなんでしょうか

noname#65723
質問者

補足

すみません!! 勘違いしていたようです うまくできました! ありがとうございました

関連するQ&A

専門家に質問してみよう