プロが教えるわが家の防犯対策術!

Excelにて、セルに入力してある文字の中から文字と最後の数字をコピー
となりのセルに貼り付ける事は可能でしょうか。特殊記号があります

現状
sheet1のA2からA300の中で、"10選別¥100" とか "1→先出00べんきょして1@200" のように
入力されていて
それを "選別"を隣のセル、"100"をその隣のセルにコピー
”1→先出001@200”の場合は、”先出"を隣のセル、"200"をその隣のセルにコピーというように
したく、ネットなど参考に数字だけ消すとか記号だけ消すとか試みたのですが、何分力ぶそくで
出来ません

本来であれば、自分で勉強してやらないといけないのですが、体調を崩している状態で
時間がなくすご教授願いただければありがたいです

「Excelにて、セルに入力してある文字の」の質問画像

質問者からの補足コメント

  • 補足要求です。
    1.数字は必ず半角ですか。
    全角の数字100があったとき、数字と判定するのでしょうか。
    それとも文字と判定するのでしょうか。
    回答⇒数字は全て半角です。
    2.文字列の最後は、必ず数字になってますか。
    "10選別¥100ABC" のようなケースもありますか。
    もし、あるなら、その場合、どのような結果を望みますか。
    回答⇒最後は必ず半角数字です。¥100 後ろには文字等は付きません

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/27 16:22
  • No1です。補足要求の追加です。
    3.文字列の中に漢字がないパターン、もしくは漢字が2つ以上のパターンはありますか。
    AAA000BBB123
    1→先出000後出@300
    のようなケースです。
    もし、あった場合、どのような結果になることを望みますか。

    回答⇒文字列の中に漢字がないパターンがあります
    *123 時は 後ろの123をC列へ、AAA000BBB123場合は123をC列へ数字のみ
    の時も123をC列へ貼り付けB列は空欄。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/12/27 16:31

A 回答 (5件)

以下のマクロを標準モジュールに登録してください。



Option Explicit
Public Sub 漢字数字振り分け()
Dim wrow As Long
Dim maxrow As Long
Dim ws As Worksheet
Dim kan As String
Dim num As String
Dim str As String
Dim RE1 As Object
Dim RE2 As Object
Set RE1 = CreateObject("VBScript.RegExp")
Set RE2 = CreateObject("VBScript.RegExp")
RE1.Pattern = "([あ-ヶ亜-腕丐-熙纊-黑]+)"
RE1.Global = True
Set RE2 = CreateObject("VBScript.RegExp")
RE2.Pattern = "([0-9]+)$"
RE2.Global = True
Set ws = ActiveSheet
maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row
For wrow = 1 To maxrow
str = ws.Cells(wrow, 1).Value
Call mysplit(RE1, RE2, str, kan, num)
ws.Cells(wrow, 2).Value = kan
ws.Cells(wrow, 3).Value = num
Next
End Sub

Private Sub mysplit(RE1 As Object, RE2 As Object, ByVal str As String, kan As String, num As String)
kan = ""
num = ""
Dim mcs1 As Object
Dim mc1 As Object
Dim mcs2 As Object
Dim mc2 As Object
Set mcs1 = RE1.Execute(str)
Set mcs2 = RE2.Execute(str)
If mcs1.Count <> 0 Then
Set mc1 = mcs1(0)
kan = mc1.submatches.Item(0)
End If
If mcs2.Count <> 0 Then
Set mc2 = mcs2(0)
num = mc2.submatches.Item(0)
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
動作確認しました
思い通りです。
お忙しいところ対応していただき
感謝申し上げます。

お礼日時:2022/12/27 17:25

No4です。


マクロの補足です。
1.漢字列が2つ以上あった場合は、最初の漢字列をB列へ設定します。
例 10先出20後出AAA300 の場合、 先出 を設定
2.最後が数字でない場合、C列は空白になります。
例 10先出20後出AAA300A の場合、C列は空白を設定
3.最後の数字列が0から始まる場合、その0は削除されます。
例 *123\012345 の場合、C列は12345を設定。
もし、0を付加したい場合は、C列の書式を文字列にしてから、マクロを
実行してください。そうすると、0が削除されずに設定されます。
    • good
    • 0
この回答へのお礼

説明していただき ありがとうございます。
そして丁寧な対応に感謝いたします
今年も残すところあと3日
体調に注意して、良いお年をお迎えください

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

お礼日時:2022/12/28 01:57

No1です。

補足要求の追加です。
3.文字列の中に漢字がないパターン、もしくは漢字が2つ以上のパターンはありますか。
AAA000BBB123
1→先出000後出@300
のようなケースです。
もし、あった場合、どのような結果になることを望みますか。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。

説明不足、言葉足らずですみません

お礼日時:2022/12/27 16:37

関数でもできます。


例えば
B2に=COUNTIF(A2,"*選別*")
C2に=COUNTIF(A2,"*先出*")
とすると、それぞれの文字が含まれていれば1、なければ0となります。
D2に=IF(B2=1,"選別",IF(C2=1,"先出",""))
とすると文字表示の列ができます。
B列とC列を非表示にすると2列目が抽出した文字列に見えます。
抽出する数字が常に末尾の3桁ならRIGHT関数、そうでなければ指定文字以降を抽出すれば良いです。
https://blog-tips.sekenkodqx.jp/2019/10/09/excel …
    • good
    • 0
この回答へのお礼

ありがとうございます
参考にさせて頂きます

お礼日時:2022/12/27 16:36

補足要求です。


1.数字は必ず半角ですか。
全角の数字100があったとき、数字と判定するのでしょうか。
それとも文字と判定するのでしょうか。

2.文字列の最後は、必ず数字になってますか。
"10選別¥100ABC" のようなケースもありますか。
もし、あるなら、その場合、どのような結果を望みますか。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます
説明不足で、すみません

お礼日時:2022/12/27 16:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!