オンライン健康相談、gooドクター

いつもお世話になっております。
下記のコードの書き出しのところで
おしえてくれませんでしょうか
A列に数値と文字列が混じっている
セルを数値だけをB列に
文字列をC列にやりたいのですが、

エラーになります。
Dim re As Object
Set re = CreateObject("VBScript.RegExp")

Dim mc As Object, str As String
Dim m As Object


For Each m In Range("A1:A10")
re.Pattern = "\d*"
re.ignorecase = False
re.Global = True
Next

str = m.Value

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

  • B列には数値
    C列には文字列

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/02/17 09:04
  • うーん・・・

    データ群
    A001
    bB002
    A002
    bB003
    A003
    bB004
    A004
    bB005

    できれば日付の月日以外も取り出したい。
    2月25日
    2月26日
    2月27日
    2月28日
    3月1日
    3月2日
    3月3日

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/17 09:05
  • うれしい

    まぁ~、数字か否かで良いのかな?と感じます。
    こちらで大丈夫です。
    すみませんです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/02/17 09:16
  • うれしい

    2月25日 →225 としてたです。
    2021年02月25日の場合➔20210525

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/02/17 09:32
gooドクター

A 回答 (7件)

No6です。


B列の初期設定を文字列にしないと1になってしまいます。

B列の書式設定を文字列にしないと1になってしまいます。
の誤りでした。(次の初期設定も同様)訂正します。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。

お礼日時:2021/02/17 10:35

以下のようにしてください。


A001か数字をとりだすと001になりますが、
B列の初期設定を文字列にしないと1になってしまいます。
001を表示するために、意図的にB列の初期設定を文字列にしています。

Sub Macro1()
Dim m As Range
Dim str1 As String
Dim str2 As String
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
str1 = "\D"
str2 = "\d"
RE.Global = True
For Each m In Range("A1:A10")
RE.Pattern = str1
m.Offset(0, 1).NumberFormatLocal = "@"
m.Offset(0, 1).Value = RE.Replace(m.Text, "")
RE.Pattern = str2
m.Offset(0, 2).Value = RE.Replace(m.Text, "")
Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
難しいですね
一筋縄ではいかないんですね

お礼日時:2021/02/17 09:51

補足の



>できれば日付の月日以外も取り出したい。

って受け取れる内容はいくつかありますけど?
・年月日から〇年と〇月〇日にする
・文章内から『数字』『数字以外』『〇月〇日』に分ける
など。
    • good
    • 0

2月25日は


B列:225
C列:月日
となれば良いのでしょうか。

又、これは、実際にはシリアル日付(2021/2/25)が設定され、
書式設定で2月25日と表示していると理解しましたが、あってますか。
この回答への補足あり
    • good
    • 0

No.1です。



私が気になるデータとしては
AAA123AAA123AAA
をどう振り分けるのかな?って感じです。

PS.
文字列をC列にってのはちょっと・・・
数字も文字列ですしデータ全部をC列に移動ってなります。
ちょっと細かすぎましたかね。
まぁ~、数字か否かで良いのかな?と感じます。
この回答への補足あり
    • good
    • 0

添付図のような場合、B列とC列はなにが設定されますか。


B1:
B2:
B3:
B4:
C1:
C2:
C3:
C4:
はどうなりますか。
「VBA 数値のみ取り出す」の回答画像2
この回答への補足あり
    • good
    • 0

どのようなデータを扱うのかわかりませんので、Patternをどう決めるかはその内容次第ではあります。



ところで、

For Each m In Range("A1:A10")
re.Pattern = "\d*"
re.ignorecase = False
re.Global = True
Next

ループ内で正規表現の設定を何度もおこなっても意味ないですよね?
設定の書き換えが繰り返されるだけで、目的としている事には一切触れてませんし。

まずはどんなデータ群があり得るのかで変わるかも?
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング