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

あるセルにある文字列を置換し、その置換された文字列を別のセルに移すことをしたいと考えています。
<例>
0000.1111.2222.3333
↓置換
00:00:11:11:22:22:33:33
(文字列3番目ごとににコロン挿入)

上記のように変換できるマクロメソッド、またロジックなどを教えていただけませんか?また可能でしょうか?
(上記の例は逆のパターン(下の文字列から上の文字列への置換)でも結構です。)

よろしくお願いします。

A 回答 (4件)

文字列3番目ごとにコロン「挿入」としながら、例には「.」があるのに、置換後では「:」になっていますが?


また、変換前の文字列の文字数は固定?不定?
固定なら関数一発でできますが、不定ならマクロで関数を作らないとダメかも。
ということで、補足をお願いします。
    • good
    • 0

Sub test01()


Dim s As String
Dim sh As String
a = "0000.1111.2222.3333"
Cells(1, "A") = a
'-------セルから値取得-
a = Cells(1, "A")
'--.を取り除く
s = Replace(a, ".", "")
MsgBox s
'--2バイトごとに:を挿入
sh = ""
For i = 1 To Len(s) Step 2
sh = sh & Mid(s, i, 2) & ":"
Next i
'---最後の:を取り除く
sh = Mid(sh, 1, Len(sh) - 1)
MsgBox sh
'-----セルに値設定
Cells(2, "A") = sh
End Sub
MsgBox は用済み後省くこと。
    • good
    • 0

ひとつのセルの文字列を変換して、右隣のセルに書き出す。



Sub sample()
 Dim t As String
 Dim i As Long

 t = ActiveCell.Text
 t = Replace(t, ".", "")
 For i = Len(t) - 1 To 3 Step -2
  t = WorksheetFunction.Replace(t, i, 0, ":")
 Next i
 ActiveCell.Offset(0, 1).Value = t
End Sub


選択範囲の文字列を置換して、右に書き出す。

Sub sample2()
 Dim t As String
 Dim i As Long
 Dim rng As Range

 For Each rng In Selection
  t = rng.Text
  t = Replace(t, ".", "")
  For i = Len(t) - 1 To 3 Step -2
   t = WorksheetFunction.Replace(t, i, 0, ":")
  Next i
  rng.Offset(0, 1).Value = t
 Next
End Sub


んで、逆。

Sub sample3()
 Dim t As String
 Dim i As Long
 Dim rng As Range

 For Each rng In Selection
  t = rng.Text
  t = Replace(t, ":", "")
  For i = Len(t) - 3 To 3 Step -4
   t = WorksheetFunction.Replace(t, i, 0, ".")
  Next i
  rng.Offset(0, 1).Value = t
 Next
End Sub
    • good
    • 0

ユーザー定義関数を使う方法です。



書式: StrSprit(文字列式1,数値1,文字列式2)

引数1:「文字列式1」には、置換する文字列を含む文字列式を指定します。
引数2:「数値1」には、何文字おきに区切るかを数値で指定します。
引数3:「文字列式2」には、挿入する区切り文字列を文字列式で指定します。

戻り値: 「文字列式1」を既存区切り文字を除き、「数値1」で指定した文字数ごとに
     「文字列式2」で指定した区切り文字を挿入します。

使用例1:
 StrSprit("0000.1111.2222.3333",2,":") ----> 00:00:11:11:22:22:33:33

使用例2: セルA1に "0000.1111.2222.3333" が入力されているとき、
 =StrSprit(A1,2,":") -------> 00:00:11:11:22:22:33:33 が表示されます。

コードの設定方法

1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
  (必要により、コードの5行目で「既存区切り文字」を追加/変更します。)
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

こんな感じで如何でしょうか?

Function StrSprit(Org As String, N As Integer, S As String) As String
Dim Ar
Dim C As Integer
Dim ResStr As String
Ar = Array(".", ",") ' <---- 既存区切り文字(複数指定可)
For C = 0 To UBound(Ar)
  Org = Replace(Org, Ar(C), "")
Next C
For C = 1 To Len(Org)
  ResStr = ResStr & Mid(Org, C, 1)
  If C < Len(Org) And C Mod N = 0 Then ResStr = ResStr & S
Next C
StrSprit = ResStr
End Function
    • good
    • 0

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