- ベストアンサー
Excelでセル内の数字だけ取り出したい。
1セル内に最大40文字程度の半角英数カナが混在しています。 例:1234abcdアイウ3456efghijk これが数千行あるのですが、集計のため数字にしたく、 しかも数字連続と次の数字連続の間にスペースを入れたいです。 例:1234 3456 かなり調べましたが、関数では数字を取り出すだけでも40文字は不可能のように思います。 マクロで置き換えを連続させて文字を消すのは思いつくのですが、 今少しスマートな方法はありますでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
VBAの一例です。 仮にA列にデータがある事で数字に上書きしますので元データは他シートにサーブして下さい。 対象シートのタブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キー押下 Sub sample() Set RE = CreateObject("VBScript.RegExp") With RE .Pattern = "[A-zア-ンア-ン]+" .IgnoreCase = True .Global = True For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 1) = Trim(.Replace(Cells(i, 1), " ")) Next End With End Sub
その他の回答 (5)
- tom04
- ベストアンサー率49% (2537/5117)
No.3です! たびたびごめんなさい。 投稿した後、気づきました。 >数字連続と次の数字連続の間にスペースを入れたいです・・・ の部分を見逃していました。 前回の投稿は無視してください。 どうも失礼しました。m(_ _)m
お礼
ご丁寧にどうも(^^)
- keithin
- ベストアンサー率66% (5278/7941)
ALT+F11でVBE画面を出し 標準モジュールを挿入し 下記をコピー貼り付ける public function getnums(byval a as variant) as variant dim i, res for i = 1 to len(a) if isnumeric(mid(a, i, 1)) then res = res & mid(a, i, 1) else res = res & " " end if next i getnums = application.trim(res) end function A1セルに「1234abcdアイウ3456efghijk」のようにあるとすると, =getnums(A1) のようにする。
お礼
ご丁寧にありがとうございました。 とりあえずNo2の方のマクロが簡単で採用させていただきました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
#1です。計算速度改良版、C1セルに =IF(B$1="","",IF(B$1>LEN(A1),TRIM(C1),IF(ISNUMBER(MID(A1,B$1,1)*1),C1&MID(A1,B$1,1),C1&" "))) 文字数分検査すればよいですからね。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! すでに回答は出ていますので、参考程度で・・・ A列のデータをB列に表示するようにしてみました。 データは1行目(A1セル)からあるとします。 Sub test() Dim i, k As Long Dim str, buf As String Application.ScreenUpdating = False For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For k = 1 To Len(Cells(i, 1)) str = Mid(Cells(i, 1), k, 1) If str Like "[0-9]" Then buf = buf & str End If Next k Cells(i, 2) = buf buf = "" Next i Columns(2).AutoFit Application.ScreenUpdating = True End Sub ※ 一文字ずる舐めるように検索していますので、若干時間がかかるかもしれません。 参考になれば良いのですが・・・m(_ _)m
お礼
ありがとうございました。 とりあえずNo2の方ので一発でした。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
お礼
完璧でした。 ありがとうございます。