• ベストアンサー

スプレッドシー関数をExcel用に変換できますか?

=IFERROR(INDEX(TO_TEXT(SPLIT(INDEX(TO_TEXT(SPLIT(C4,"/")),COUNTA(SPLIT(C4,"/")))," ×(*xx(*:")),1),"") 関数の説明は下記URLをご確認ください。 https://okwave.jp/qa/q10066764.html?by=thanks_qalist Excelの関数も書いていただいてはいたのですが 作動しなかったため質問しております。 よろしくお願いします

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

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

回答No.6に対する補足に基いてExcelのMID関数による切り出しを提示します。 >文字の切り出し位置を決める文字は"×"、" "、"+" ” >でお願いいたします。 "×"は全角の乗算記号と解釈します。 「"×"、" "、"+" ”」は「"×"、" "、"+"、" ”」と解釈し、最後の" "は全角のスペースとします。 B2セルに次の数式を設定して下へ必要数コピーしてください。 =MID(A2,MAX(INDEX((MID(A2,ROW($1:$256),1)="/")*ROW($1:$256),0))+1,MIN(INDEX(FIND({"×"," ","+"," "},A2&{"×"," ","+"," "},MAX(INDEX((MID(A2,ROW($1:$256),1)="/")*ROW($1:$256),0))),0))-MAX(INDEX((MID(A2,ROW($1:$256),1)="/")*ROW($1:$256),0))-1) 数式が長いので作業用のセルを使うことをお薦めします。 D2セルに有効な切り出し文字"/"の位置を算出し、E2セルに末尾の不要文字の切り離し位置を算出します。 B2: =MID(A2,D2+1,E2-D2-1) D2: =MAX(INDEX((MID(A2,ROW($1:$256),1)="/")*ROW($1:$256),0)) E2: =MIN(INDEX(FIND({"×"," ","+"," "},A2&{"×"," ","+"," "},MAX(INDEX((MID(A2,ROW($1:$256),1)="/")*ROW($1:$256),0))),0)) 他の方法としてはD2セルに有効な切り出し記号である"/"以降の文字列を取り出してB2セルでD2セルから不要な文字列を切り離す方法も考えられます。 TEXTSPLIT関数のように1つの関数で複数の文字列へ切り分けた配列から目的の文字列を選べれば理解し易いと思いますが今回のような処理は高度な知識が無いと難しいと思います。

kuro0331
質問者

お礼

お世話になっております。 指定していただいた関数での品番抽出、 無事、成功しました。 多少タイトルに*などがついていたりするのですが、そこら辺の細かいことに関してはこちらでも修正ができますので問題ありません。 とても分かりやすく説明もしていただき本当に感謝しております。 今後は自分でも関数やVBAの勉強をしていきたいと思います。 ありがとうございました

その他の回答 (10)

回答No.11

回答No.9 です。 段ボール特大サイズ (省略) /gg4-20G-1/22-3 どういう条件で切り分けるのかが問題なのだと思います。 ”-”の前と後ろが数字であること が、条件になるのなら 4-20 も、22-3 も、同じ条件なので分けることができません。左から計算していきますので、4-20が選択されます。 先頭が ”/” であることを条件とすれば 一度 表示して、消してしまうという面倒なことになりますが =REPLACE(REGEXP(A11,"\/\d+\-\d+"),1,1,"") もっとスッキリするいい方法があるかもしれませんが、思いつくのはこのぐらいです。 13行目 10x28mm M/134-45/M2/M3/258-44 × 2 G-1 は、やはり、134-45 が選択されます。 それと、”/”の間に、文字や数字が入れば、上記の式は成り立たなくなります。 以前提示された表がわかれば、工夫できるかもしれませんが、回答を読んで拾い集めた条件では、このぐらいしか思いつきません。

kuro0331
質問者

お礼

お世話になっております。 商品によってはタイトルに一貫性がないので そこをちゃんと指定すれば「どの条件で切り分けるのか」 という点はかいけつできるのかな?と思いました。 ですが、ほぼ抽出の方はできましたので 全部手入力で抽出するよりかははるかに時短になると思います。 本当に感謝しております。 また、今後は私自身、関数やVBAの勉強もしていきたいとも思いました。 本当にありがとうございました。

回答No.9

前回の質問の 画像サイト https://d.kuku.lu/b36c18875 が、確認できませんでしたので、質問内の画像を辿ってみました。 Googleスプレッドシートで、記載の式を挿入しても、思うような結果が出なかったのではないかと思います。検証したところ /258-4410x28mm M1/M2/M3JX2 G-1 の、結果は M3JX2 でした。 Googleスプレッドシートで、結果を求めるなら、 =REGEXEXTRACT(A2,"\d+[-]\d+") ではないかと思います。ただ、これでも 10x28mm M/134-45/M2/M3/258-44 × 2 G-1 の、結果が 134-45 に、なってしまいます。これの正解が 258-44であるなら、もうひとつ条件が必要かと思います。 Excelの場合であれば、excelアドインを作って、正規表現の関数を作成すれば、可能かと思います。 ↓ ここを丸写しさせていただきました。 https://qiita.com/ktyubeshi/items/74228f18498224c7427d =REGEXP(A2,"\d+\-\d+") で、スプレッドシートと同様の結果が得られます。

kuro0331
質問者

補足

お世話になっております。 正規表現の関数なんていうものがあるなんて知りませんでした。 実際にURL先の説明を見ながら作業の方を行ってみたところ ほぼ完ぺきに抽出を行ってくれました。 画像2行目のように複数の-を使用していた場合 品番手前の文字列が抜き出されてしまいます。 よろしくお願いいたします。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.8

画像上げて置けは良かった。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.7

本当にこの数式を入れましたが? ・他の人とほぼ同じなの同じだと思い試さなかった ・コピペせず手入力した とかしませんでしたか、 テスト制/tesutoボルト /123-45 後ろに空白が無いので、#VALUE! になるはずです。 それを防ぐには、 =MID(C4,FIND(" /",C4)+2,FIND(" ",C4,FIND(" /",C4)+1)-FIND(" /",C4)-2) 上げておきます。 https://1drv.ms/x/s!AnfEM367OeSdiGtqhtygvrA_TUav?e=T04czx C列が入力可になっています。この数式で対応できないパターンがあれば入力して下さい。

kuro0331
質問者

補足

お世話になっております。 数式入力の間違いはありませんでした。 エクセルオンラインを使用した説明ありがとうございます。 読み取れていなかった文字列入力してみました、 ご確認をお願いいたします。

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

>「ボルト/tesuto製 125_458 /123-45」のように/を複数使用していた場合、正常に読み取ることができな勝手です。 複数の/を含む場合は文字列の末尾に最も近い位置でよろしいでしょうか? また、対象の文字列長は最大256文字と考えて良いでしょうか? 少々面倒な数式になりますが希望の処理は可能と思います。 尚、文字の切り出し位置を決める文字は"×"、" "、"+"の3種のみでしょうか? 上記の要件を補足して頂ければ代案を提示できます。

kuro0331
質問者

補足

お世話になっております。 複数の/があった場合、123-45のように文字列の末尾に最も近い位置のものになります。 文字数に関してですが最大256文字で問題ありません。 文字の切り出し位置を決める文字は"×"、" "、"+" ” でお願いいたします。 改めてよろしくお願いいたします。

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

もしエクセルのフルバージョン(古いバージョン)でSPLIT関数があればよいのに、という場合なら、 エクセルのVBEの標準モジュールに Function splitB(a As Range, b As String) Dim x As Variant MsgBox a MsgBox b x = Split(a, b) splitB = x(2) End Function を定義(私製関数)すれば、普通のエクセル関数式の中で、「=splitb(セル指定、セパレータ)」で使えます。MsgBox a、MsgBox b は確認後は省くこと。 例データ A1 aa/dd/ccc/f/g/hj 関数 =splitb(A1,"/") 結果 ccc 3番目の区画が返ります。3番目の3は、上記プログラムのsplitB = x(2)の()内の2の、2+1番目なのです。  さらにn番目という指定を、引数部分で指定するようにして、取り出す部分を、第何番目かを指定し、セルによって、可変指定するようにできます。 ーーー >スプレッドシート関数をExcel用に変換できますか どういう意味で言っているか判らないが、開発者側で、仕組みとして、そういうもの(変換)は作られないでしょう。 ーー ユーザーが自分で勉強して、代替の他の関数の組み合わせによる式を工夫するしかないでしょう。 でも初心者にはむつかしいケースがほとんどでしょう。 「あきらめなはれ!」。VBAなら自由が利くので、組んでもらって、まる写しで済ます、しかないでしょう。 == でも詳しい(=数の多い、いろんなケースを含んだ)データ例を挙げてくれ、と言ったが無視しているようだが、態度がおかしい。 前の質問では、出た回答で解決して、お礼で有難うと言ったのではないのか。

kuro0331
質問者

補足

お答えいただきありがとうございます。 まず、 >でも詳しい(=数の多い、いろんなケースを含んだ)データ例を挙げてくれ、と言ったが無視しているようだが、態度がおかしい。 前の質問では、出た回答で解決して、お礼で有難うと言ったのではないのか。 というご指摘に関しまして imogasi さんのおっしゃる通りで 本当に申し訳ないと思います。 こちらもなかなか時間を取ることができなく 週1で確認してまとめて返信していこうと決めておりましたが、その考えよくありませんでした。 重ね重ね、申し訳ありませんでした。 前回の回答で問題は解決し「スプレッドシート」での 活用をしていましたが、Excelでの作業も出てきたことにより今回の質問をさせて頂きました。

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

GogleスプレットシートのSPLIT関数に代わるExcelのシート関数はTEXTSPLIT関数ですがOffice 365のみ利用可能な新規関数のようです。 他のバージョンでは対応していないと思われますのでMID関数で代用することをお薦めします。 当方でA2セルの文字列を"/"の右から始まり、区切り記号3種("×","," ","+")の左までを切り出す数式を下記に提示します。 B2: =MID(A2,FIND("/",A2)+1,MIN(INDEX(FIND({"×"," ","+"},A2&{"×"," ","+"},FIND("/",A2)),0))-FIND("/",A2)-1)

kuro0331
質問者

補足

お答えいただきありがとうございます Office365のみでしか動作しないのでエラーが出ていたわけなんですね。 MID関数でのお答えをいくつかいただいておりますが 「ボルト/tesuto製 125_458 /123-45」 のように/を複数使用していた場合、正常に読み取ることができな勝手です。 よろしくお願いいたします。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.3

どんな値かくらいは説明したほうがいいと思いますが > 作動しなかったため質問しております。 Excelのバージョンは?

kuro0331
質問者

補足

ご回答いただきありがとうございます。 また、説明を省いてしまったこと申し訳ありません。 値内容に関しては 「テスト ボルト55mm/123-45」 という風な商品タイトルから最後の123-45のみを抽出する関数となっております よろしくお願いいたします。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.2

見た所、 /~ブランクを抽出しているようですが、 D4: =MID(C4,FIND(" /",C4)+2,FIND(" ",C4,FIND(" /",C4)+1)-FIND(" /",C4)-2) 下へコピペ、ではだめですか?

kuro0331
質問者

お礼

お答えいただきありがとうございます 上記関数を使用しExcelへあててみたところ [テスト制/tesutoボルト /123-45] などのばあいに 品番前の/では反応せずにtesutoボルト前の/に反応してしまいました。 よろしくお願いします

  • t_hirai
  • ベストアンサー率28% (222/788)
回答No.1

変換できるか?ということでしたら、スプレッドシートで使っている関数をエクセル用に書き換えていけば動くと思います。

kuro0331
質問者

お礼

お答えいただきありがとうございます。 関数変換をするにあたって知識がなく そもそもできるのかな?と思い 質問をさせて頂きました。 よろしくお願いします。

関連するQ&A