プロが教えるわが家の防犯対策術!

エクセルで上の行と同じ部分まで文字を抜き出したいのですが
うまいように思いつきません。

ぜひアドバイスお願いします!

 たとえば
A列に元データ B列に抜き出しということで
 
 A列           B列
 ABCマート柳沼店   ABCマート
 ABCマート朝霞店   ABCマート
 ABCマート朝霞店   ABCマート
 越後屋 新潟本店   越後屋 
 越後屋 燕店      越後屋 

A 回答 (6件)

こんにちは。


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キー』を押します。
    • good
    • 0
この回答へのお礼

お礼が遅れました、大変失礼しました!!
上記の式でやってみたらうまくいきました
配列式ですね。

しかし、、、素晴らしいです・・・!!
ここまで思いつきもしません。
このような式が立てられるのはやはり日々の使いこなしと
才能なのでしょうか。

お礼日時:2005/08/06 17:01

こんにちは。


#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
    • good
    • 0
この回答へのお礼

関数ならずとも、こちらまでご丁寧にアドバイスくださってありがとうございます。
自分でも判断したとおり条件が曖昧なのです。
関数式はうまくいきました。

こういったデータは何らか自分で加工も必要かと思いました。
VBAですが”はじめての”級の本で最近 勉強中です。

日常仕事をしていると思った通りのデータで渡されるわけではないので
データ処理は奥が深いと思いました。

◆すみません、お礼の言葉から外れてますね。

お礼日時:2005/08/06 17:06

私製関数をつくって見ました。


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)のように範囲指定してください。
先頭からの共通文字列を返します。
    • good
    • 0
この回答へのお礼

お礼のコメントが非常に遅くなり大変失礼しました。
VBEでオリジナルを作ってくださってありがとうございます。
これもまたうまく行きました。
ありがとうございます

エクセルには色々なやり方があるのですね
どこか必ず共通する法則が自分できちんと読めないと(事前に加工も)
関数もVBAもダメなんだと思いました。

お礼日時:2005/08/06 17:03

A列のデータを見ると“屋号”+“支店名”となってるようですが


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

大変失礼しました。お礼、相当遅くなりました!!(締め切り間違いしました)
お詫び申し上げます。

おっしゃるとおり屋号に決まりがないのです。

お礼日時:2005/08/06 16:59

#1のmshr1962です。


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

ABCマート 柳沼店


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

この回答への補足

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

補足日時:2005/07/08 11:43
    • good
    • 0
この回答へのお礼

早速のご返答 ありがとうございます!!
ご配慮のとおり スペース無しもあります

しかし 結果が#VALUE!となってしまいます。どうしてなんでしょうか

お礼日時:2005/07/08 11:35

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