Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


62233 / 76732 ←次へ | 前へ→

【19107】Re:置換方法について教えてください。
回答  かみちゃん  - 04/10/21(木) 21:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ですが、CC123CA01から5バイトととって”,(カンマ)”を”,CC123”に置換しても途中でCA588という文字列の集合にかわるため、どのようにプログラムを書いたらいいのか分かりません。

置換というよりは、まず途中で変わる文字列があるのかないのかを検索します。
途中で変わる文字列があるならば、置換処理を2回する。
途中で変わる文字列がなければ、置換処理を1回する。
という方法になるかと思います。

また、

>Cells.Replace What:=",", Replacement:=",CC123", LookAt:=xlPart, _

では、セル全体を指定していますので、iとかjとかで、For〜Nextの繰り返し処理は意味がなさないです。

また、セル指定の入力ボックスも2回出ますが、1回でセル範囲を指定したほうがスマートではないでしょうか?

このあたりを踏まえて、以下修正したコードです。
WinXP(Home) + Excel2002(SR-3)で動作確認済みです。

Sub replace7()  '文字列の変換
  Dim a As Range
  Dim b As Range
  'エラー時も処理を続けます
  On Error Resume Next
  '処理したいセル範囲をaとする。
  Set a = Application.InputBox("処理したいセル範囲を選択して下さい", "セルの指定", Type:=8)
  'キャンセル時は終了します
  If a Is Nothing Then
    Exit Sub
  End If
 
  For Each b In a
   '途中で変わる文字列"CA588"を探す。探す文字列は「途中の文字列」なので、",CA588"とカンマ付きとする。
   If InStr(b, ",CA588") <> 0 Then
    b = Replace(Mid(b, 1, InStr(b, ",CA588") - 1), ",", ",CC123") & "," & _
       Replace(Mid(b, InStr(b, ",CA588") + 1, Len(b) - InStr(b, ",CA588")), ",", ",CA588")
   Else
    b = Replace(b, ",", ",CC123")
   End If
  Next
  MsgBox "処理が完了しました。"
End Sub

1 hits

【19105】置換方法について教えてください。 まり 04/10/21(木) 18:26 質問
【19107】Re:置換方法について教えてください。 かみちゃん 04/10/21(木) 21:44 回答

62233 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free