• ベストアンサー

【Excel2013】MID&FINDの組み合わせ

指定した文字から8桁の文字を抽出したく、添付画像のような数式を組みましたが、うまく抽出してくれません。 ※エラーの非表示は後程IFERROR関数を付けますのでご教示不要です どうしたら抽出してくれるのでしょうか?

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

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.5

> う~ん、ダメですね。 > 画像と同じ結果でした。 Ctrl+Shift+Enterの配列数式にしたのに駄目なのですか? 数式バーの見た目が {=MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8)} になっていますか? A列もD列も全角で統一されていますか?

KO1014
質問者

お礼

再度のご回答ありがとうございました。 できました!! 「配列数式」というものを知らずそのままコピペしていました。 大変失礼しました。 僅かですが時間の短縮ができます。 ありがとうございました。

その他の回答 (10)

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

回答No.6&7のbunjiiです。 回答No.10でエラーの指摘を受けましたがExcel2010の検証ではエラーになりません。(勿論、Excel2013でも同様のはずです) 数式確定時はCtrlとShiftキーを押しながらEnterキーの打鍵して配列数式にしました。(回答No.6ではAltとShiftを間違えていますがNo.7で訂正しました) 他人の回答に対して不適切な批評は避けて頂きたい。

KO1014
質問者

お礼

何度もご回答ありがとうございました。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.10

No.9の方がご指摘のように,No.2の回答で問題ないように思います(添付画像は No.2の結果). =MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8) No.6の回答ではエラーが出ました. =MID(A2,MIN(FIND($D$2:$D$6,A2&$D$2:$D$6,A2)),8) 配列数式は普通の入力方法では入力できません. B2セルに =MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8) を入力し(ここで Enterや Tabを押さない),未確定の状態で Shift + Ctrl + Enter を同時に押す. そうすると,数式表示エリアに以下のように表示されるはずです. {=MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8)} あとは,B2セルを下にコピーすれば OKです. 普通の入力方法で B2セルに {=MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8)}と入力しても配列数式にはなりません.

KO1014
質問者

お礼

ご回答ありがとうございました。 はい、おっしゃるようにkkkkkmさんの数式で表示できました。 「未確定の状態でCtrl+Shift+Enter」なんですね。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.9

KO1014さん、 餘計な御丗話は合點承知之助です。 [No.1][No.2][No.3]のkkkkkmさんの囘答は懇切丁寧で、且つ、御見事な式ですよ。 チャンと試しましたか?! シャーシャーと「う~ん、ダメですね」と仰る樣じゃ、“配列數式”とは何ぞやを勉強されたし!

KO1014
質問者

お礼

再度のご回答ありがとうございました。 「配列数式」というものを知らずそのままコピペしていました。 今は本当に時間が無いので、時間のできた時に調べます。

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

#3です。 補足していた抱いたのだが、疑問の逐一の回答でなく、言い訳でしかない。 結局どうしたらよいかよくわからない。 こういう質問者が多い。 関数では、難しそうな課題だと思う。 それで質問者の参考になるかどうかわからないが、聞いていることは、こうだろう と想像して、VBAでやってみる。 質問表現に、文句を言った、お詫びの印だ。 ーー 小生(下記)では A列のデータ文字列の中に、D列の2文字のどれかに該当があれば その文字位置から8文字を抜出し、B列にセットする。 と考えた。 この点間違っていれば、無視して。 ーー 標準モジュールに下記貼り付け。 Sub test01() Dim bt(1000) lrA = Range("A100000").End(xlUp).Row MsgBox lrA '---テーブル作成 lrD = Range("D100000").End(xlUp).Row MsgBox lrD For j = 2 To lrD bt(j) = Cells(j, "D") Next j '----存在チェック For i = 2 To lrA '---セル検索 For j = 2 To lrD Set f = Cells(i, "A").Find(what:=bt(j), LookAt:=xlPart) '部分一致 If f Is Nothing Then Else Cells(i, "B") = Mid(f, InStr(f, bt(j)), 8) End If Next j '--- Next i End Sub ーー 例データ A列 A2:A11 数字は、本当は全角かもしれないが、下記では半角数字。 御社注文番号:BA300101 御社注文番号:BA300102 御社注文番号:BA300103 注文番号:AA100001 注文番号:AA100002 NO:'MA100001 NO:'MA100002 注文番号:ZZ600001 注文番号:ZA600002 注文番号:ZZ600003 ーー D列は 注文番号 AA BA MA ZA ZZ ーーー 実行後 B2:B11 BA300101 BA300102 BA300103 AA100001 AA100002 MA100001 MA100002 ZZ600001 ZA600002 ZZ600003

KO1014
質問者

お礼

再度のご回答ありがとうございました。 今は本当に時間が無いので、VBAに関しては時間のできた時に勉強します。

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

回答No.6の一部訂正です。 数式確定時にalt+ctrl+enterの同時打鍵が必要。       ↓ 数式確定時にshift+ctrl+enterの同時打鍵が必要。

KO1014
質問者

お礼

ご回答ありがとうございました。

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

>どうしたら抽出してくれるのでしょうか? 提示の数式はFIND関数の戻り値が配列になりますので数式の組み立て方に工夫が必要です。 下記数式で試してください。(数式確定時にalt+ctrl+enterの同時打鍵が必要。但し、動作確認をしていませんので悪しからず。) =MID(A2,MIN(FIND($D$2:$D$6,A2&$D$2:$D$6,A2)),8) ダメなときは結果を補足してください。

KO1014
質問者

お礼

ご回答ありがとうございました。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.4

添附圖から判斷するに、單に =MID(A2,FIND(":",A2)+1,8) 又は =MID(A2,FIND(":",ASC(A2))+1,8) でも良ささうだけど、駄目なら其の理由を明記されたい。 其れならさうと最初から其れに見合った添附圖にして措けば無駄骨を省けたものを!

KO1014
質問者

お礼

ご回答ありがとうございました。 注文番号リスト2桁+6桁=8桁が注文番号でして、その注文番号のみを抜き出したいのです。 注文番号のみの可能性もありますし、”:”や”:”は無い場合もあります。

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

補足すべきだ。 画像だけ挙げて、やりたいことを文章でも説明せず。読者や回答者に推測させるなんて、おかしいと思う。 各行で、「注文番号:」に続く、8ケタの文字を抜き出すのではだめか。 「注文番号リスト」ごとに分けて出したいのか? それでも、注文番号を抜出し後、結果をソートすればよいのでは。 ーー 注文番号らしきものが、「注文番号:」がない行にも出ているようだが、それは抜き出したくないのか? 少なくとも結果のデータを、手書きしてでも、質問に書くべきでは。 回答者も時間をかけるのだから、質問者もよく考えてほしい。

KO1014
質問者

お礼

ご回答ありがとうございました。 言い訳になってしまいますが、仕事が多忙になってしまい昼休みも無い状態でこの質問をさせていただきました。 今も始業開始前に返答しています。 注文番号リスト2桁+6桁=8桁が注文番号でして、その注文番号のみを抜き出したいのです。

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.2

No1の訂正です。 15行目の式をコピペしたのでA15になってますがA2で =MID(A2,MAX(IFERROR(FIND($D$2:$D$6,A2),0)),8)

KO1014
質問者

お礼

ご回答ありがとうございました。 う~ん、ダメですね。 画像と同じ結果でした。

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.1

=MID(A15,MAX(IFERROR(FIND($D$2:$D$6,A15),0)),8) でCtrl+Shift+Enterの配列数式にして試してみてください。

KO1014
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

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

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

  • Excel関数

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

  • Excelで#N/Aエラーの対策

    Sheet1の表の一部をSheet2に抜粋して表示したくて =IFERROR(INDIRECT(A1),"") と抜粋を表示するSheet2のセル範囲に配列数式として入力しました。 式内の参照先A1には、「Sheet1!A1:E5」「Sheet1!G1:D7」等を示す範囲の名前を記入しています。 画像では「範囲1」となっています。その名前を変更することで、抽出する範囲も変更されます。 「A1:E5」なら5行5列、「G1:D7」なら6行7列のように抽出する範囲の大きさが異なるので 上記の配列数式はその最大の範囲6行7列の大きさに合わせて入力しています。 ここで5行5列分を抽出すると、画像の様に最大範囲に満たない部分に#N/Aエラーが出るため、 その対策として IFERROR関数を使用したわけですが、エラー対策前後で変化がありません。 IFNA関数や、IF関数とISERROR関数のネストでも同様です。IS関数ではエラーかどうかは判別できているようです。 このケースではエラー対策の関数は無効なのでしょうか。 尚、条件付き書式で「エラーなら文字色を背景色に同じ」としてごまかすことはできますが、 その値を別の引数として使用するため、可能なら根本的にエラー対策したいところです。

  • mid関数/find関数:一つのセルに同一の値がある場合

    mid関数、find関数について教えてください。 1つのセルに同一の値が入っていて、2個目の値から、何文字もしくは2個目の値を探したい場合どのようにしたら良いのでしょうか。 例)1つのセルに、1-A0001-A0002 と値が入っていて、"A0002"だけを別のセルに表記させたい場合、開始位置を9文字目と指定し、解を求めることができますが、2つ目の"A"から5桁というような指定の方法ができるのでしょうか。 RIGHT関数という方法もありますが、セルによっては、1-A0001-A0002○○○というように別の文字が続いているため、上記のような設定で解を求めたいと考えます。 アドバイスを宜しくお願いいたします。

  • Excel2007 IFERROR 他のバージョンで開くとどうなりますか?

    Excel2007になって、IFERRORというとても便利な関数ができました。 でも、他のバージョンでは使えないとのこと。 もし、IFERRORを使ったExcelを他のバージョンで開いた場合、どのようになってしまいますか? エラー表示がでるのですか?

  • Excel関数みたいに画像を抽出するには

    とある化学物質を別容器保管する時に使用するラベルを作成しようとしています。 Excelで製品のマスターデータに格納(セルサイズに合わせて配置した画像)を別シートで抽出関数(VLOOKUPやINDEX関数など)で値を抽出するように、格納した画像を抽出してセルサイズに合わせて配置する方法はないでしょうか。 画像以外の値はINDEX関数とMATCH関数を組み合わせて抽出しています。 ネットの文献で数式を使って画像を表示させる方法を参考にしたところ、名前の定義がうまくできませんでした。 〇ttps://k-ohmori9616.hatenablog.com/entry/2019/05/13/153347 Sheet構成は添付画像の通りです。 関数またはVBAで画像を抽出する方法はないでしょうか。 詳しい方いましたらご教授ください。 バージョンはExcel2016 です。

  • IFERROR関数の入力のしかたについて

    IFERROR関数の入力のしかたについてお聞きします。 VLOOKUP関数などで、検索値が未入力のときに表示されるエラーを非表示 にしたいので IFERROR(VLOOKUP(A1~),"")という関数にしたいです。 このとき、IFERRORの入力は手入力(1文字ずつ打つ)で行うしかないのでしょうか。 (まずVLOOKUPの関数を作成してその外側にIFERROR関数を置きたいのですが・・・)

  • Excel2010 マクロ Findで日付の検索

    質問です。 Findで日付の関数をしているのですが、ダイレクトで入力した個所は成功するのですが、数式で表示している箇所は失敗します。”実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていません” ネットで調べて、色々試したのですが、上手くいかなくて困っています。ダイレクト入力・数式のどちらでもいける方法はないのでしょうか?よろしくお願いいたします。

  • 【Excel2007】VLOOKUP

    関数結果がエラーになってしまい困っています。 65000行分の商品リストシートに、別シートで作成したその商品に該当する区分を VLOOKUP関数で抽出しようとしたのですが、上手くいきません。 検索して欲しいJ2(文字列)と合致した情報は シート「データ」C列にあり、C列をもとに抽出して欲しい情報は選択した範囲の 左から5番目の列にあります。(全て文字列) ということで下記の関数を作成しましたが検索結果が空白で出てきません。 =IFERROR(VLOOKUP(J2&"",データ!$C$3:$G$12048,5,FALSE),"") 文字列前後に余分な空白・全角半角に相違はないのですが、 他に対処しなければならないことは何があるかお教えいただけないでしょうか。 とても困っています、恐れ入りますがどうぞ宜しくお願い申し上げます。

  • Excel2010重複しないカウントとフィルタ結果

    Excel2010で、重複しない文字をカウントしつつ、オートフィルターで 抽出をかけた時には表示したデータをカウントする関数を作成したいのですが うまくできません。 作成しているExcelの表には、オートフィルターが設定されています。 A列には複数名の人の名前が入っていて、名前には重複もあります。 オートフィルターでの抽出条件が指定されていない状態で A列の重複しない人数を下記数式で出しています。  =SUMPRODUCT(1/COUNTIF(A1:A100,A1:A100)) オートフィルターで、例えばA列で3人の名前を抽出した場合に、 上記数式が入っているセルに「3」と表示をさせたいのですが できますでしょうか? できれば作業列を使用することなく、ダイレクトに該当セルに算出できる方法が あれば知りたいです。 お分かりの方いらっしゃいましたらご教示頂けると助かります。 どうぞよろしくお願いいたします。

専門家に質問してみよう