- ベストアンサー
【Excel】MID&FINDの組み合わせ(改)
以前https://okwave.jp/qa/q9821654.htmlにてご教示いただき注文番号(アルファベット2桁+数字6桁)のみ抽出ができていたのですが、今回桁数が異なる新たな注文番号(アルファベット4桁+数字6桁)が増えてしまいました。 数字部分の桁数6桁は変更無しです。 以前のように注文番号だけ抜き出す方法はありますでしょうか? 列の追加は可能ですので、数式を複数回に分けていただいても構いません。 尚、Offoce365に変わりましたが、Excel2013でも正しく抽出できる数式を希望します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
B2: =MID(A2,FIND(LOOKUP(0,0/FIND($D$2:$D$11,A2),$D$2:$D$11),A2),LEN(LOOKUP(0,0/FIND($D$2:$D$11,A2),$D$2:$D$11))+6) 下へコピペ。 注文番号リストは必ず長いものが下に来るようにして下さい。 例えば SSAA AA の順に並べると、下のAAがヒットします。
その他の回答 (2)
- bunjii
- ベストアンサー率43% (3589/8249)
>以前のように注文番号だけ抜き出す方法はありますでしょうか? 可能です。 >列の追加は可能ですので、数式を複数回に分けていただいても構いません。 B列へ注文番号を切り出す。 C列は注文番号の開始位置、D列は注文番号の先頭2文字、F列は注文番号の文字列部分 C2: =MIN(INDEX(FIND(F$2:F$11,A2&F$2:F$11),0)) D2: =MID(A2,C2,2) B2: =MID(A2,C2,IF(D2="SS",10,8)) B2~D2を選択して下へ必要数オートフィルでコピーしてください。 Excel 2010でテストしましたのでExcel 2013でも同様な結果になるはずです。
お礼
ご回答ありがとうございました。 数字部分も必要となりますので、今回は№3の回答者様の関数を採用させていただきました。
- imogasi
- ベストアンサー率27% (4737/17069)
これは関数では(配列数式を使っても)難しい(複雑になる)課題ではないか? 配列数式では、見つかった下記例なら、F列のどの語句で見つかった、か判りにくいので、難しくなるように思う。 関数だけ、での別の回答を待つなら、待ってください。 ーー そこでVBAでやって見た。 注文番号 F1:F4 BBC23403 BCC23404 BA23401 BB23402 ーー 例データ A1:A4 注文番号BA23401あああ 本注文番号は:BB23402あああ 特注文番号:BBC23403あああ 注文番号:BCC23404あああ ーーー F1:F4 BBC23403 BCC23404 BA23401 BB23402 実は、ここでの並べ順で、上からの降順が重要です。 注文番号の文字列で、 長いもの順にする。 またセルの、上からの(文字での)降順が重要。 理由は、最長一致を優先するため。 配列数式でも、「最長一致を優先」の式は、難しかろう。 ーー 標準モジュールに Sub test01() For i = 1 To 5 For j = 1 To 4 p = InStr(Cells(i, "A"), Cells(j, "F")) If p <> 0 Then MsgBox p: Cells(i, "I") = p: Cells(i, "J") = j l = Len(Cells(j, "F")) Cells(i, "k") = Mid(Cells(i, "A"), p, l) GoTo p1 ’最長一致を優先するため1度見つかったらそこで打ち切り、下の注文番号語句はあえて検索しない。 End If Next j p1: Next i End Sub 結果 その行での、その行のA列から抜き出した、指定注文番号 k1:K4 BA23401 BB23402 BBC23403 BCC23404
お礼
前回に引き続き、ご回答ありがとうございました。 後任者がマクロに明るくない人ですと改造できない可能性がありますので、今回もマクロの使用は見送らせていただきました。 大変申し訳ありません。
お礼
ご回答ありがとうございました。 完璧です、すばらしいの一言です。 数式の内容はまったく理解できないので、そのままコピペさせていただきました。 他にも桁数の異なる注文番号が多々あり、そちらにも流用できることを確認しました。 大変助かりました。