EXCEL2002で、セルから特定の文字を抜く連続作業の簡単な方法を教えて下さい。
状況は、セル内に[3枚]という文字があり、また、別のセルには[5個]や[6缶/ケース],[3本/P],[100枚]等の情報が大量に有ったとします。ここから、「数字以外の文字」の部分を抜き出して数字だけのセルにする作業をしたいのです。
文字列の長さが不統一なので、困っています。簡単な方法はあるでしょうか?
当方は、マクロやVISUAL BASICなどの知識は或る程度は持っていますが、出来たら関数を使用して出来ないでしょうか?
なお、この質問は以下の質問を参考に致しました。nkndisk 様、お許し下さい。
http://okweb.jp/kotaeru.php3?q=541611
No.1ベストアンサー
- 回答日時:
下記ページに書かれていますが、
数字が常に先頭に来る場合は、
=LEFT(A1,LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},))))
先頭に文字列が入る可能性がある場合は、=MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},))))
で抜き出すことができます。
【数字+文字列から数字のみを取り出す】
http://www2.odn.ne.jp/excel/waza/function.html#S …
ただし、上記式はいずれも半角数字にしか対応していませんので、数字に半角全角が混じっている場合は、ASC関数を使って、半角に統一してやる必要があります。
=LEFT(ASC(A1),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},))))
または
=MID(ASC(A1),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},))))
なお、上記で出力される数字は文字列になりますので、計算結果を他の計算に使用したい場合は、さらにVALUE関数を使って文字列を数値に変換して下さい。
=VALUE(LEFT(ASC(A1),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},)))))
または
=VALUE(MID(ASC(A1),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},)))))
参考URL:http://www2.odn.ne.jp/excel/waza/function.html#S …
この回答への補足
すみません。
上の数式をそのままコピー&ペーストで貼り付けると、大丈夫なんですが、自分のシートに合うように改良しようとすると、エラーが出てしまいます。
在庫管理をするシートを作っており、C4に単位あたりの価格、E4に単位、F4に現在の在庫数を打ち込むと在庫品の価格が出るようにしたいのです。
たとえば、”6缶/ケース”で”900”円の缶ビールが”10”本有る時の値段を出したいのです。
とりあえず今は、下記の式を使っていますが....
=IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)-1))*$F4)
これと先ほどの式を組み合わせるとエラーになってしまいます。
よろしくお願いします。
No.4
- 回答日時:
#1です。
補足に書かれている式
>=IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)-1))*$F4)
を拝見しましたが、
>LEFT(ASC($E4),LEN($E4)-1)
の部分は、E4に入力されている文字列の、左から「LEN($E4)-1」の長さ分を取り出してしまいます。(例えば、”6缶/ケース”であれば、6文字のうちの5文字を取り出して”6缶/ケー”(「ケー」は半角)となります)
もし左から1文字を取り出すのであれば、
LEFT(ASC($E4),1)
とすべきでしょう。
ただ、
>これと先ほどの式を組み合わせるとエラーになってしまいます。
ということですが、#1の式を今回のケースに当てはめるのであれば、
=IF($E4="",$C4*$F4,$C4/[参照セルを変更した#1の式]*$F4)
でいいはずで、上記の部分は関係が無いと思われます。
具体的には、
=IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))*$F4)
または、
=IF($E4="",$C4*$F4,$C4/VALUE(MID(ASC($E4),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC($E4)&1234567890)),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))*$F4)
でいいはずです。
上記の式で万が一予想と違う結果となった場合、「これと先ほどの式を組み合わせ」されたその数式と、エラーの種類(「#VALUE」など)を補足してもらうと、何らかのアドバイスはできると思います。
たびたび申し訳有りません。
元々の数式は、単位が”1個”とか、”10本”しかないと想定して作ったのですが、例のような物が出てきたので困っていたものです。
エラーが出たのは、私の勘違いで、
=IF($B4="","",IF($E4="",$C4*$F4,$C4/”VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))”*$F4))
上記の””で囲まれた部分にもう一つ閉じ括弧が加わっており、
=IF($B4="","",IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},))))))*$F4))
となってしまっておりました。今は正常に動いています。
ただ、SUBSTITUTE()関数を数式入力ウィザードで入れようとすると、『関数の引数が足りません』といった意味のメッセージが出るのですが、気にしなくて良いですよね。正常動作していますから.......
勉強になりました。ありがとうございます。
No.3
- 回答日時:
数字で始まる場合は、
以下の様なユーザ定義関数を使うのが簡単・簡明です。
public Function Nvalue(x)
Nvalue = Val(x)
End Function
全角で始まる場合は、ASC関数を使って半角数字にしてから関数を使います。
No.2
- 回答日時:
「その他(コンピューター [技術者向け]) 」に投稿されたことから「エクセル内部で」解決しなくても良いと理解しました。
このような「規則性はあるがバラツキがある」対象を扱うには「正規表現:regular expression」が適当であると悪寒がえます。御存知なければ
http://www.mnet.ne.jp/~nakama/
に解説が。御存知であれば失礼しました(^^;
で、エクセルをcsv形式で保存し、文字列として正規表現で処理する。
このような処理だと、古典的なものでは awk、良く使われるのは、Perl ruby などでしょうか。
この方針であれば、カテゴリーをかえて Perl で問合わせれば、山のようにレスがつくかと。
参考URL:http://www.mnet.ne.jp/~nakama/
ありがとうございました。
正規表現、ツールによって微妙にルールに違いが有るようなのですが、次の機会に使うために勉強しておきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/04/21 08:59
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列から、null値を除去する方法
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
VB6のテキストボックスに入力し...
-
【ExcelVBA】値を変更しながら...
-
VBA 変数名に変数を使用したい。
-
他のMDBのテーブルに追加したい
-
Dir関数で読み取り順を操作でき...
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
vba フィルター 複数条件 3つ以...
-
グラフの「項目軸ラベルに使用...
-
Redim とEraseの違いは?
-
Excelのメモリ(配列)の上限は2G...
-
16進をASCIIコードに変換する...
-
COBOL数値転記の仕様
-
『列名 '担当者CD' があいま...
-
【ADO】「Execute」を使うと...
-
【緊急】インクルードファイル...
-
Accessで別mdbのテーブルをコピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CString型 全角半角を意識せず...
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
文字列から、null値を除去する方法
-
TextFieldParserの固定長桁数を...
-
StrConvでUnicodeに変換出来な...
-
一番右のスペース以降の文字列...
-
【Excel VBA】セル内テキストの...
-
VBScriptで半角カナと半角英数...
-
アクセス ステータスバーの文...
-
「シフトJIS X 0213」形式の文...
-
WSTRINGとは?
-
エクセルで13,410円を数値の134...
-
VBからID3タグをいじる方法
-
VB6のテキストボックスに入力し...
-
指定バイト目を取り出すにはど...
-
HEX
-
C言語とWin32APIで全角かなの...
-
vb2008 MIDB関数
-
ASC関数
おすすめ情報