• ベストアンサー

エクセル2003でのセル内文字列操作マクロ

あるセルにある文字列を置換し、その置換された文字列を別のセルに移すことをしたいと考えています。 <例> 0000.1111.2222.3333 ↓置換 00:00:11:11:22:22:33:33 (文字列3番目ごとににコロン挿入) 上記のように変換できるマクロメソッド、またロジックなどを教えていただけませんか?また可能でしょうか? (上記の例は逆のパターン(下の文字列から上の文字列への置換)でも結構です。) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hakone
  • ベストアンサー率54% (40/73)
回答No.3

ひとつのセルの文字列を変換して、右隣のセルに書き出す。 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

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

ユーザー定義関数を使う方法です。 書式: 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

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

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 は用済み後省くこと。

すると、全ての回答が全文表示されます。
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

文字列3番目ごとにコロン「挿入」としながら、例には「.」があるのに、置換後では「:」になっていますが? また、変換前の文字列の文字数は固定?不定? 固定なら関数一発でできますが、不定ならマクロで関数を作らないとダメかも。 ということで、補足をお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A