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

エクセル マクロ教えて下さい。 

2桁以上の数字をカンマで区切りたいです。
0→0
1→1
12→1,2
123→1,2,3
12345→1,2,3,4,5
35214→3,5,2,1,4

1桁はそのままです。

ただし選択した範囲だけを変えたいです。

コードを解説付きでお願いします。

A 回答 (4件)

こんにちは!



そのセル内で処理したいのでしょうか?
一例です。

Sub Sample1()
Dim k As Long, c As Range, myStr As String
For Each c In Selection
If IsNumeric(c) And c > 9 Then
If InStr(c, ",") = 0 Then
For k = 1 To Len(c)
myStr = myStr & Mid(c, k, 1) & ","
Next k
c = Left(myStr, Len(myStr) - 1)
myStr = ""
End If
End If
Next c
End Sub

※ コードの説明は割愛させてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
コードを調べてなんとなくは理解できました。
まだまだこういうときには、このコードを使うってのが思いつきません。
もっと経験値を上げていきます。

お礼日時:2017/04/07 10:02

#2さんの数式をみて、VBAで作ろうとしましたが、同じようにはいかず、不格好なコードになったので、やめました。

以下はいわゆる正規表現というものです。
でも、解説付きというのは、ややこしくするだけのように思うのです。
分からない時は、再度人に聞くか、諦めるかどちらかです。

'//
Sub reSplitFigures()
Dim c As Range
Dim buf As Variant
Dim RegEx As Object
Dim Ms
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
  .Global = True
  .Pattern = "(\d)"  ''"(\d\D*)" '後者は#3様の条件です
 For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))
  If Len(c.Value) > 1 Then
   buf = RegEx.Replace(c.Value, "$1,")
   c.Value = Left(buf, Len(buf) - 1)
  End If
 Next
End With
End Sub
    • good
    • 0

補足要求です。


セルの中が
abc1234xyzのときも
abc1,2,3,4xyz
のようになさりたいのでしょうか?
    • good
    • 0

> コードを解説付きでお願いします。


自分で調べる前に説明を求める人は プログラミングを諦めた方が
いいと思います。

=SUBSTITUTE(TRIM(TEXT(A1&"",REPT("# ",9)&0))," ",",")
    • good
    • 0

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