• ベストアンサー

【Excel】MID&FINDの組み合わせ(改)

以前https://okwave.jp/qa/q9821654.htmlにてご教示いただき注文番号(アルファベット2桁+数字6桁)のみ抽出ができていたのですが、今回桁数が異なる新たな注文番号(アルファベット4桁+数字6桁)が増えてしまいました。 数字部分の桁数6桁は変更無しです。 以前のように注文番号だけ抜き出す方法はありますでしょうか? 列の追加は可能ですので、数式を複数回に分けていただいても構いません。 尚、Offoce365に変わりましたが、Excel2013でも正しく抽出できる数式を希望します。

  • KO1014
  • お礼率97% (536/551)

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.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がヒットします。

KO1014
質問者

お礼

ご回答ありがとうございました。 完璧です、すばらしいの一言です。 数式の内容はまったく理解できないので、そのままコピペさせていただきました。 他にも桁数の異なる注文番号が多々あり、そちらにも流用できることを確認しました。 大変助かりました。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>以前のように注文番号だけ抜き出す方法はありますでしょうか? 可能です。 >列の追加は可能ですので、数式を複数回に分けていただいても構いません。 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でも同様な結果になるはずです。

KO1014
質問者

お礼

ご回答ありがとうございました。 数字部分も必要となりますので、今回は№3の回答者様の関数を採用させていただきました。

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

これは関数では(配列数式を使っても)難しい(複雑になる)課題ではないか? 配列数式では、見つかった下記例なら、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

KO1014
質問者

お礼

前回に引き続き、ご回答ありがとうございました。 後任者がマクロに明るくない人ですと改造できない可能性がありますので、今回もマクロの使用は見送らせていただきました。 大変申し訳ありません。

関連するQ&A

  • EXCEL2000で(初心者です)

    EXCEL2000の事で質問です。初歩的な事だと思うのですが、、、(汗) 列番号がアルファベットではなく数字で表示されるようになってしまったのですが、どうやったら直りますか?誰か教えてください!! よろしくお願いします。

  • ExcelのMID,COLUMN関数について

    ExcelのMID,COLUMN関数について http://okwave.jp/qa/q6113613.html 以前こういう質問をして、 No.5の回答で教えてもらった関数を埋め込んでアンケートの入力をしています。 B列に数字50桁を入れて、C列に関数を入れてという感じです。 B2に数字50桁を入力してEnterを押すとC2からAY2までに1桁ずつ振り分けられるのですが B2の数字50桁はそのままです。 これは関数として、これはしょうがないそうなので 納得はしたのですが B2は実は問1を入力するセルだったんです。 なので、全部アンケートを入力し終わった後、B2を1桁に戻そうと思ったのですが そうすると、関数が効いているのでB2を1桁にするとC2からAY2まで入力されていた数字が消えてしまいます。 これはどうすればいいのでしょうか? 最終的なアンケートの入力データとして、50桁入っているセルは必要ありません(邪魔になってしまいます) なので、今B列の左隣に1列追加して これまでB列だったものがC列になったのですが この場合、B列に51桁を入れて(1桁目はブランクとして、2桁目からアンケートのデータ50桁を入れる) C列に関数を入れて、(C列が問1の回答を入力する) そうすると、1桁目をブランクにすることにより、 50桁入力したB列を直すことなくアンケートデータが完成します。 この場合入力し終わった後50桁入力しているB列を消しても C列以降の数字が消えることはありませんか? それとも消えてしまうのでしょうか? どうすればいいでしょうか?

  • excel2003で複数条件

    A列にA~Gのアルファベットかブランク、B列に数字(0~5)かブランクが入っています。 A列にアルファベット、B列に0が入っている行を抽出し、 A列とB列がAと0、BとO、CとO・・・の行がそれぞれABCごとに何個あるかカウントしたいのですが、 どのような論理式を作ればよいでしょうか? なおexcel2003を使用しておりますのでcountifとsumproductは使うことはできますが、countifsを使うことはできません。 よろしくお願い致します。。

  • Excel数式について

    Excel数式について Excel2003を使用しております。 sheet1からsheet4のA列からC列に1~100までの数字を入力しております。 sheet5のA1~A100にそれぞれの数字をカウントしたものを返したいのですが、 適した数式をご教示いただきたくよろしくお願い致します。

  • excel2003でifの活用法について

    excel2003でウインドウズXPを使っています 下記のような命令を出したいです 「もし、A1の数字が3桁ならば、B1に"三桁"と表示せよ」 桁数を読み取る関数が解れば、可能かと思ったのですが、ご存知の方お教え願います

  • 郵便番号 エクセル書式

    エクセルの書式を使って2つにわかれた郵便番号 をひとつ(3桁 ハイフン 4桁)にまとめたいのですが、どのような書式を組めばよいですか? お知恵をかしてください。 =CONCATENATE(A2,"-",B2)まではわかるのですが、 ハイフンの後の桁数を四桁にそろえる部分がわかりません。 A列         B列        D列 注文者郵便番号1 注文者郵便番号2  注文者郵便番号  152            2 152-0002

  • Excel2003で乱数を作る関数

    Excel2003上で任意でパスワードを作りたいのですが、 できれば関数のみで作る方法をお教えください。 条件は以下です。 ・同じシート内にパスワードを作り積み上げていく。 ・左から6ケタ ・左から 任意の大文字アルファベット1つ 任意の小文字アルファベット1つ 0~9の任意の数字4ケタ ・毎日、10個程度のパスワードを発行したい ・できれば重複は避けたい などです。 数字4ケタのみなら簡単な関数で乱数のようなものを作れたのですが、アルファベットも絡むと難しくて… ご教授いただけると幸いです。

  • Excel関数

    お世話になります。 Excelで、あるセル内の「~~Number○○~~」という文字列から、前後の不要な文字列を省いて「Number○○」部分だけを抽出する方法(関数?)はありますか。  注)○○の部分には様々な数字が入り、1桁の場合と2桁の場合があります。 また、「~~Number○○~~」という文字列から、自分で指定した特定の数字を含む場合のみ「Number○○」の文字列だけを抽出する方法もありますか。 ご教示いただきたく存じます。よろしくお願いします。

  • EXCEL2000について

    セルの列番号ってアルファベットですよね? 今、作業をしていて気がついたのですが、アルファベットではなく列番号も行番号も数字なのです。 っで、セルの位置を表す表示が左上にあると思いますが、A1のセルが「R1C1」と表示されています。 これって何が原因なのでしょうか? また元に戻す方法を教えてください。

  • Excel数式について

    Excel数式について Excel2010を使用しております。 sheet1からsheet10のA列からC列に1~400までの数字(コード)をランダムに入力しております。 中には欠番もあるので、入力される数字(コード)は全部で「97」になります。 sheet11のA1~A97にそれぞれの数字(コード)をカウントしたものを返したいのですが、 適した数式をご教示いただきたくよろしくお願い致します。

専門家に質問してみよう