プロが教える店舗&オフィスのセキュリティ対策術

Excel カンマ付けについて
12345であれば、1,2,3,4,5
134であれば、1,3,4
となるように、
数式 もしくは VBAがありましたら
ご教示いただけますでしょうか。。
どうぞ宜しくお願い致します。

A 回答 (4件)

こんにちは!



VBAになりますが、一例です。
元データはA列にあり、B列に表示するとします。

Sub Sample1()
Dim i As Long, k As Long, myStr As String
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Len(Cells(i, "A")) > 1 Then
For k = 1 To Len(Cells(i, "A"))
myStr = myStr & Mid(Cells(i, "A"), k, 1) & ","
Next k
Cells(i, "B") = Left(myStr, Len(myStr) - 1)
myStr = ""
Else
Cells(i, "B") = Cells(i, "A")
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

ユーザー定義関数になります。


標準モジュールへ以下のマクロを追加します。
-------------------------
Public Function AddComma(ByVal str As String) As String
AddComma = ""
Dim i As Long
For i = 1 To Len(str)
AddComma = AddComma + Mid(str, i, 1)
If i <> Len(str) Then
AddComma = AddComma + ","
End If
Next
End Function
-------------------------------------
使用方法の例です。
A1セルへ 12345 を入力
B1セルへ
=ADDCOMMA(A1)
と入力します。
B1セルに 1,2,3,4,5 が表示されます。
    • good
    • 0

本当は、Perl系の正規表現なら、一回で済むのですが、VBAの中でそのまま使える正規表現を利用しました。

一応、ユーザー定義関数にはなっていますから、関数は単独でも利用できますが、いずれ、こういうVBAスタイルのユーザー定義関数はなくなるものだと思います。

'//
Sub Test1()
 Dim c As Variant
 For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))
  If c.Value <> "" Then
   c.Offset(, 1).Value = BetweenComma(c.Value)
  End If
 Next
End Sub

'以下は、正規表現パターンだけを外に出す方法で、Perl系正規表現に少しでも近づけるように考えています。

Function BetweenComma(arg1 As Variant)
 Dim Re As Object
 Dim Ms As Object
 Dim i As Long, n As Variant
 Dim buf
 If IsNumeric(arg1) = False Then BetweenComma = arg1: Exit Function
 Set Re = CreateObject("VBScript.RegExp")
 With Re
  .Global = True: .IgnoreCase = False: .MultiLine = True
 End With
 Re.Pattern = "(\d)"
 Set Ms = Re.Execute(arg1)
 i = Ms.Count
 If i > -1 Then
  For Each n In Ms
   buf = buf & Re.Replace(n, "$1,")
  Next
 End If
 BetweenComma = Mid(buf, 1, Len(buf) - 1)
End Function
    • good
    • 0

数式です。

A1セルに数字が入っている前提です。

=SUBSTITUTE(TEXT(A1,"0"&REPT("a0",LEN(A1)-1)),"a",",")
    • good
    • 0

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