
セル内の文字から金額のみを抜き出して、別のセルに表示させたいと思っています。
以下の条件の時に旨く抽出できないのでご教授ください。
[条件]
・セル内の文字列には他の数字が前後に含まれることがあります。
・文字列は定型の内容ではありません。
・一つの文字列に入力される金額は必ずひとつだけです。
・金額には必ず「円」が付きます。
・金額の桁数は一定ではありません。
[実現したい事]
以下のようにA列に入力されている文字列の中から、金額のみを抽出してB列に表示させたい
※実際のセル内の文章は定型のモノではありません。
A1:30分の金額は1,000円(いつでも)
A2:10分の金額は500円(2人で10分)
A3:1時間の金額は9,500円(30分で1回休憩)
B1:1,000
B2:500
A3:9,500
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんばんは。
>10分の金額は500円(2人で10分)
金額は、2番目の位置にありますが、この順番が替わるようですと、ワークシート関数では無理ではないかと思います。
#1さんとは別のスタイルで、#2さんの「負がなく小数点や桁区切り含め」をいただき、回答とさせていただきました。以下のように正規表現を使いますと、いろいろな対応が可能になります。
百千万億兆 などか入ったものは、以下の正規表現パターンを替えなくてはなりません。
"(([△\-+]?[\d,]+[百千万億兆]*)+)円" 'アラビア数字と漢数字混じりの時
'//
Sub PickNumbers()
Dim c
If TypeName(Selection) = "Range" Then
For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))
c.Offset(, 1).Value = WhichNumYen(c) '右隣のセルに記述 c.Offset(,1)の1が右隣セル1個 B列に出力
Next c
End If
End Sub
Function WhichNumYen(ByVal rng As Variant)
Dim Matches
Dim n As String
Dim m As Variant
Dim buf As String
If TypeName(rng) = "Range" Then
n = rng.Value
Else
n = rng
End If
n = StrConv(n, vbNarrow)
With CreateObject("VBScript.RegExp")
.Pattern = "([△\-+]?[\d,\.]+)円" '正規表現パターン
.Global = True
.IgnoreCase = False
Set Matches = .Execute(n)
If Matches.Count > 0 Then
For Each m In Matches
buf = buf & "+" & m.SubMatches(0)
Next m
End If
End With
WhichNumYen = Mid(buf, 2)
End Function
'///
No.2
- 回答日時:
負がなく小数点や桁区切り含め9文字以内(変更可)で
=-LOOKUP(1,-RIGHT(LEFT(A1,FIND("円",A1)-1),{1,2,3,4,5,6,7,8,9}))
No.1
- 回答日時:
こんばんは!
数日前にも似たような質問がありました。
関数でやると結構厄介だと思いますので、
この質問専用の関数(ユーザー定義関数)を作ってみてはどうでしょうか?
「円」から数値もしくはカンマが連続する間遡って検索するようにしています。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペーストします。
Function kingaku(myRng As Range) 'この行から//
Dim k As Long, myEnd As Long
Dim str As String
myEnd = InStrRev(myRng, "円")
k = myEnd
Do
k = k - 1
str = Mid(StrConv(myRng, vbNarrow), k, 1)
If Not str Like "[0-9,]" Then Exit Do
Loop
kingaku = Mid(myRng, k + 1, myEnd - k - 1) * 1
End Function 'この行まで//
Excel画面に戻り(VBE画面を閉じて)通常の関数のような使い方をします。
B1セルに
=kingaku(A1)
という数式を入れフィルハンドルで下へコピー!
(セルの表示形式は桁区切りスタイルもしくはユーザー定義で調整してください)
※ エラー処理は行っていませんので、IF関数などと併用しエラー処理を行います。
=IFERROR(kingaku(A1),"")
こんな感じでしょうかね。
尚、保存時は「マクロ有効ブック」として保存します。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
- Excel(エクセル) 文字列を数式として変換する事はできますか? 6 2022/06/23 10:38
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) エクセルで日付が入っているセルを一定の法則に従って違うセルに表示したい 2 2022/04/04 17:16
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルのことで教えてください。 A1セルに、 別シートのA1セルが1のときは「A」、2のときは「B 4 2023/02/24 23:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelで、空白を除いてデータを...
-
文字列から英数字のみを抽出す...
-
自分の左隣のセル
-
SUMIF関数で、「ブランク以外を...
-
条件付き書式の色付きセルのカ...
-
セルを結合した時のエクセル集...
-
エクセルで特定のセル内にだけ...
-
エクセル1行おきのセルを隣の...
-
エクセルのセルにある同じ値が...
-
EXCELのcountif関数での大文字...
-
excelの条件付統計?について
-
Excelで飛んだ値を合計する方法
-
excelで年休管理をするには
-
週の労働時間を計算するエクセル
-
エクセルで、A2のセルにA3...
-
エクセル関数またはVBAについて
-
この関数に対して、多すぎる引...
-
エクセルで最下行の値を表示さ...
-
【Excel】複雑な関数式を連続入...
-
エクセルで、指定の値よりも大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自分の左隣のセル
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
excelで、空白を除いてデータを...
-
セルを結合した時のエクセル集...
-
EXCELのcountif関数での大文字...
-
エクセルで特定のセル内にだけ...
-
エクセルで、指定の値よりも大...
-
エクセル1行おきのセルを隣の...
-
同一セル内の重複文字を削除し...
-
EXCELでマイナス値の入ったセル...
-
エクセルで、A2のセルにA3...
-
エクセルで年月日から月日のみへ
-
条件付き書式の色付きセルのカ...
-
週の労働時間を計算するエクセル
-
エクセルに入力後、別シートの...
-
【Excel】4つとばしで合計する方法
-
Excelで大量のセルに一気に関数...
-
エクセル関数またはVBAについて
-
エラー「#REF」の箇所を置き換...
おすすめ情報