- 締切済み
個数の抜き出しについて
- みんなの回答 (10)
- 専門家の回答
みんなの回答
- heisukewada
- ベストアンサー率58% (93/160)
- heisukewada
- ベストアンサー率58% (93/160)
うまくいくかどうかはわかりませんが、正規表現の関数を作ってみてはいかがでしょう。 ↓参考にしました。 https://blog.nekonium.com/vba-regexextract/ そのまま、標準モジュールにコピペします。 Option Explicit Public Function REGEXEXTRACT(str As String, pat As String) As String Dim reg As Object Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = pat .IgnoreCase = False .Global = True End With Dim Matches As Object Set Matches = reg.Execute(str) REGEXEXTRACT = "" If Matches.Count = 0 Then Exit Function REGEXEXTRACT = Matches(0).Value End Function そして、B2に =REGEXEXTRACT(A2,"[0-9]+[セット|パック|枚|本|個|組|冊]+") 数量のないところが空白になるのですが、だめですか? 1個 と表示するのなら =IF(REGEXEXTRACT(A2,"[0-9]+[セット|パック|枚|本|個|組|冊]+")<>"",REGEXEXTRACT(A2,"[0-9]+[セット|パック|枚|本|個|組|冊]+"),"1個")
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.5の内容の一部に誤りがありました。 「提示の数式はA2セルの文字列の中に"枚"、"本"、"セット"、"パック"、"組"、"冊"の文字が含まれているとき、最初に見つけた文字の位置をB2セルへ返すものです。」 "個"が抜けていました。 「質問の題意では数量の単位である"枚"、"本"、"個"、"セット"、"組"および"冊"の6種を検索したいようですが」 "パック"が抜けていましたので「6種」は「7種」になります。 下記は補足要請です。 A21セルの文字列に「5個セット」という情報が含まれておりB21セルには「51」という数値が表示されています。 あなたの目的は"5個"という文字列を抜き出すことでしょうか?、それとも"5個セット"という文字列を抜き出すのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
#6です。 #6と同じことを操作でやれば簡単。 ここの質問者はエクセル関数に、こだわる者が多いようだが、勉強の方角が適当でない。 エクセルは、第1義的には「操作の学(びの体系)」とおもう。 ーー #6のデータ例でA2:A11をB列にコピー貼り付け。 B2:B11範囲指定。 データーフィルターテキストフィルタ 「指定の値を含む」を選択ー箱など入力 これで「箱」を含む行がB列に残る。
- imogasi
- ベストアンサー率27% (4737/17069)
小生の、推測ばっかりで回答させているが、下記のような質問内容と違うか。 補足を読んも明確でない。 ーー データ例と結果を質問に上げない質問の仕方が、問題なんだ。 例データA1:A11 データ見出し 下記第1行 B,D、F列は作業列。 作業列を使うのは、比較的わかりやすいから(自称imogasi方式) ー グラム グラム 箱 箱 個 個 <ー手入力の見出し 1000箱 2000グラム 1 1000箱 20個 20個 20グラム 1500箱 1 234個 2000グラム 1 345グラム 23ケース 345瓦 1500箱 2 234個 2 20グラム 2 12瓦 345グラム 3 ーーー B2列の式 =IF(ISERROR(FIND(B$1,$A2)),"",MAX(B$1:B1)+1) 見つかったセルの行に何番目かを出している。 C2セルの式 =INDEX($A$1:$A$11,MATCH(ROW()-1,B$1:B$11),1) B列で1、2,3・・の見つかる行のA列の値を、C列の、2,3,4行・・に出している。 手抜きなのはB列の数字の最大値+1個以上の行を空白にする関数式を(IF関数を)手抜きで省いている。 D,EそしてF,G列もB,C列の関数を複写(手操作で)すればよい。 ーー 本来 Googleで「Excel n番目の一致を市得する方法」で照会すると出てくる記事のように IndexーMatch関数-さらに配列数式を使う、回答などが、出るが、質問者にはむつかしすぎて、なぜそれを使うか、何をやっているか判らないだろうから、あきらめざるを得ないだろう。 エクセル365ならFilter関数が使えるらしいので、検討もありかと思う。
お礼
参考にさせて頂きます。 ありがとうございます。
- bunjii
- ベストアンサー率43% (3589/8249)
質問の文言と提示の画像データに整合性が無いように思われます。 提示の数式はA2セルの文字列の中に"枚"、"本"、"セット"、"パック"、"組"、"冊"の文字が含まれているとき、最初に見つけた文字の位置をB2セルへ返すものです。 A2の例では3文字目に"日本製"の"本"が見つかりますのでB2に3が表示されています。 A3の例では"本体"の"本"が見つかりますが目視で確認困難な半角の空白文字を2個含む20番目としてB2セルへ20が表示されていると思われます。 また、A6の例ではA3セルと同様に空白も含めて"基本セット"の"本"が46文字目として検出されているようです。 質問の題意では数量の単位である"枚"、"本"、"個"、"セット"、"組"および"冊"の6種を検索したいようですが日本語文章の中には数値の単位と関係が無い使い方もありますのであなたの思惑通りに単純な方法で解決しないでしょう。
- imogasi
- ベストアンサー率27% (4737/17069)
以下回答ではないが、小生が大切だと思うことを述べておきたい。こういうタイプの質問が多いので。 (A)エクセルのセルの値で(本件では多分文字列だろう)でそう見えて居る、のと (B)表示形式の適用でそう見えて居る。 の区別を、質問者はついているのだろうか?質問表現ぶり(両者の別を明記してない)から判ってない段階ではないか。 (B)の場合は、エクセルの関数では、処理できないと思ったほうがよく、VBAならできそう。 エクセルの関数は、セルの値を対象に判別などしかできないのだ。 (普通は、セルの値は数値のみで、単位は表示形式で表示するのが流儀だ。その場合セルの値を探しても単位は何もつかめない) また検索(操作)の中に、標示形式に関するものがある。 ーーー >抜き出してたい (C)抜出しは、エクセル関数では、上級のテクニックが必要なのを知らないようだ。 (D)該当個数カウントならまだやさしい。 このままでは、回答は(D)のものが出るのではないか? >枚数や本数を はどちらのことを言っているのか、判らない。 ーー (D)なら回答丸写しは出来るかもしれないが、(D)なら式の意味も理解できないかもしれない。 この質問を出すレベルではないのではと思う。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19840)
非常に複雑な処理になるので、単純な関数では実現不可能です。 現状の問題点は「日本製」の「本」など、関係ない文字列にヒットしてしまう、単位の前の数字が何桁か判らない、など、複数の問題点があります。 ユーザー関数を作成して、以下のような、かなり複雑な処理を行う必要があります。 1.「1~9」の数字がある位置を見付ける。 2.数字の並びの直後に「枚」「本」「個」などの単位があるのを確認する。 3.単位文字があったら、1で見付けた位置から、単位がある位置まで切り出して返す。単位が無かったら、現在位置から処理をやり直す。 4.最後まで条件に合う物が無かったら「1個」を返す。 これで「日本製」などの文字列があっても無視しますし、「650mm」などの無関係な数字も無視します。
- kkkkkm
- ベストアンサー率66% (1721/2591)
セル内の該当する文字列を数える https://www.forguncy.com/blog/20180730_counttext こちらを参考にして試してみてください。
お礼
ありがとうございます。
- q4330
- ベストアンサー率27% (768/2786)
「抜き出してたい」とはどういう意味でしょうか? 枚、本、個を除いた数値だけの表示にしたいのですか? それなら、C4に =LOOKUP(10^17,LEFT(B4,COLUMN(1:1))*1) とすればB4の「1個」がC4には「1」と表示されます。
補足
ご連絡ありがとうございます。 言葉足らずですみませんm(_ _)m A列の中から「枚」「本」「個」「セット」「パック」「組」「冊」の枚数や本数などを抜き出してたいのですが 枚や本の場所の位置の数が表示されてしまいます。 「枚」「本」「個」「セット」「パック」「組」「冊」の文字が含まれないものは、1個と表示されるのはのぞみ通りです。
お礼
ありがとうございます。