• ベストアンサー

エクセル 点在する ある文字列の8文字目を置換する方法について

エクセルで表を作っています(A4サイズ) ここには、いくつか不規則に TRC-000400-L という文字列が、点在しています。 この文字列の8桁めの4を8に変えたいとき、どうしたらいいのでしょうか。 ただし、0の部分は、数値がいろいろ入りますので、 頭にTRC-がついている場合に、8桁目の4を8に変えたいのです。 自分で、記録のマクロを加工して Cells.Find(What:="TRXS-*").Activate 'REPLACE(ActiveCell,8,1,5) Cells.Replace What:="TRXS-*", Replacement:=(LeftActiveCell, 8) = 5) などと作ってみましたが、FALSEの値が帰ってきました。 どのようにするといいのでしょうか どうかお知恵をおかしください よろしくお願いいたします

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

基本的にはこんな感じで行けるはずです。 Sub CONV_F() Dim DAT As Range Dim CAR As String For Each DAT In Selection CAR = CStr(DAT) If Right(CAR, 4) = "TRC-" Then CAL = Right(CAR, 8) & "8" & Left(CAR, 4) DAT.Value = CAR EndIf Next End Sub これで、選択した範囲のみ処理します。 文字列の変換は"Then"以下に入ります。ここ、やっつけで作ってます ので、適宜作り直してください。あなたの実力なら可能だと思います。 こういうときに使うのが For Each です。

dengennao
質問者

お礼

For Each In、 新しい技を知ることができて勉強になります 利用させていただきます ありがとうございました

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

こんな感じですかね。 Sub 変更() Dim 片, 前, 字$, 正, 集, 素 '★正規表現で"TRC-"+数字×3+"4"+数字×2+"-L" Set 正 = CreateObject("VBScript.RegExp") 正.Global = True 正.Pattern = "TRC-\d{3}4\d{2}-L" '★先頭のセルを検索 Set 片 = Cells.Find(What:="TRC-*", After:=Cells(1, 1)) Do Until 片 Is Nothing   '★検索したセルを記録   Set 前 = 片   字 = 片.Value   '★セルの中から正規表現に一致する集団を取得   Set 集 = 正.Execute(字)   For Each 素 In 集     '★先頭から8番目の字を"8"に代える     Mid(字, 素.FirstIndex + 8, 1) = "8"   Next   片.Value = 字   '★次のセルを検索   Set 片 = Cells.FindNext(After:=前)   '★検索位置が前回より前なら終了する   If 片.Row < 前.Row Then Exit Do   If 片.Row = 前.Row Then     If 片.Column <= 前.Column Then Exit Do   End If Loop End Sub

dengennao
質問者

お礼

すごい… これをきちんと理解できれば、とても面白い! のですが、書き忘れていましたが、ヨチヨチ程度の私には 変数の理解さえも混乱してしまいました…。おはずかしい。 でも、正規表現の部分など興味深く思いましたので この仕事が落ち着いたら、復習させていただきます ありがとうございました

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

細かな条件が不明ですが、こんな感じ? Sub test() Dim c As Range, faddress As String, st As String Const key = "TRC-" Set c = Cells.Find(What:=key, LookIn:=xlValues, LookAt:=xlPart) If Not c Is Nothing Then  faddress = c.Address  Do   st = c.Value   If Left(st, 4) = key And Len(st) > 7 Then    c.Value = Left(st, 7) & "8" & Right(st, Len(st) - 8)   End If   Set c = Cells.FindNext(c)  Loop While c.Address <> faddress End If End Sub

dengennao
質問者

お礼

次回からは、きちんと条件を表現できるよう気をつけます LeftとRightを組合わせて一つの文字列にできるんですね 勉強になります ありがとうございました

関連するQ&A

  • EXCEL VBAでの 文字列検索

    セル内の文字列を部分一致で検索したいのですが、 下記の構文だと、検索対象シートを選択しなくてはならないため、 PGの動きが堅くなってしまいます。何かいい方法をご存知の方、 教えてください。 Selection.Find(What:=key, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate Cells.FindNext(After:=ActiveCell).Activate

  • Excel2003 VBA 「*」を含む文字列の置換方法は?

    セルに「あいうえお あい*うえお」という文字列がある場合 そのセルに対して Cells.Replace What:="あい*うえお", Replacement:="" の処理を実行するとすべて消えます この場合「あいうえお」だけを残すには どのようにすればいいのでしょうか?

  • エクセル2003で特殊文字の置換方法

    エクセル2003、XPを使用しています。 エクセルのマクロで置換をしているのですが、 置換対象がCHAR(160)です。 セル上に上のを打ち込むと、実際は違いますが半角スペースに見えます。 特殊文字であっているのでしょうか。 それで、この文字を消したいと思い、以下の通りマクロで記述しているのですが、成功しません おわかりになる方いらしたらよろしくお願いします。 Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

  • Excelの置換で書式が変わる現象の回避策

    下記のようなマクロで複数の置換をしています。 Cells.Replace What:="★", Replacement:="☆", MatchCase:=True Cells.Replace What:="◆", Replacement:="◇", MatchCase:=True Cells.Replace What:="■", Replacement:="□", MatchCase:=True ・ ・ ・ セル内で改行して文字サイズや色を変えている箇所では置換後1行目の書式に変わってしまいます。 文字だけを置換をしたいのですがこれを回避する方法はあるのでしょうか教えてください。

  • 文字列変換(置換)方法について

    Selection.Replace を利用して単体の文字を置換することはできるのですが、 例えば とあるセルに りんご+みかん+めろん っていう文字列が入力されていた場合、 Selection.Replace what:="りんご" , replacement:="" をすることによって、結果、 +みかん+めろん にすることはできますが、 ++だけにするようにはできませんでしょうか。 りんご+みかん+めろん+なし+・・・・・っと 20パターンぐらいあるので、 Selection.Replace では難しいのではと思っております。 該当の文字列だけ消す処理をしたいです。 すいませんがお願いします

  • VBで作成したアプリからExcelを開き文字列を検索・置換したい

    環境:OS.Win2000、Excel2000、VB6 VBで作成したアプリからExcelを開き文字列を検索・置換し保存して閉じる という流れの処理をしたいのですがエラーが発生してしまいます。 Private Sub Command1_Click() Dim xlApp As Object Dim xlBook As Object Dim ret As Object 'OPEN Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("c:\aaa.xls") xlApp.Application.Visible = True '置換 xlApp.ActiveCell.Replace what:=TextBox1.Value, _ replacement:=TextBox2.Value, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set ret = xlBook.Application.Cells.Find(what:=TextBox1.Value, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) ret.Activate '終了 xlApp.Quit '開放 Set xlBook = Nothing Set xlApp = Nothing End Sub 上記の状態だと ”指定された文字列に置換” の所で ”オブジェクトが必 要です”とエラーが出てしまいます。エラーNOは424です。ちなみに検索 では”Rangeクラスのfindプロパティを取得できません”(1004)となりま す。どうすればエラーが出ないように出来るのか分かりません。また、外部 のアプリでオートメーションを利用する際に気おつけなければいけない事が あれば教えてください。ちなみにExcelのVBA上で実行すると置換までは動作 します。検索の所でエラー1004が発生します。さっぱり理解できません。で きればこの違いも教えてください。続けての質問ですがよろしくお願いします。

  • 置換のVBA

    エクセルのあるシート内の「abc」という文字列を「abc20」に置換するには以下で可能ですが、 Sub chikan() Cells.Replace What:="abc", Replacement:="abc" & "20", _ LookAt:=xlPart,SearchOrder:=xlByRows, MatchCase:=False End Sub 「abc」という文字列を連番で「abc20」「abc21」「abc22」・・・・・というふうに置換するにはどうすればいいでしょうか?

  • エクセル 特定文字列のある列の削除と保存

    こんにちは いつもお世話になっています。 エクセル2010です 1行目に文字列が入力されています。 (1)1行目に特定文字列を含む列を削除するマクロ。 (2)1行目に特定文字列を含む列だけを残して、他はすべて削除するマクロ を教えてください。 2つ質問するのが不適当ならどちらか一方でも構いません。 指定したい文字列は複数ありますので「文字列A、文字列B、・・・」等で追記できる形だと助かります。フォーマットが決まっているので指定文字列を頻繁に変えることはありません。 特定行を削除するマクロはネット上でヒットしたんですが、列は見つかりませんでした。 マクロ記録で、文字列検索、列削除をしましたが、連携のさせ方がわかりません。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Rows("1:1").Select Selection.Find(What:="あ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Columns("A:A").Select Selection.Delete Shift:=xlToLeft End Sub

  • excelのvbaを使って日付を置換したいのです

    こんにちは。いつも質問ばかりですみません。 今、excell の VBAの勉強をしているのですが、たとえば、B列に2004/5/3 とか、2004/5/5とか、5月の日付ばかりはいっていたとして、その2004/5の部分を2004/6に置換したいとします。 それを、マクロでやらせてみて、VBAを見ると Sub Macro9() Cells.Replace What:="2004/5", Replacement:="2004/6", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のようになるのですが、このプロシージャーを実行しても、うまく置換できません。 どのように記述したら、できるのか、教えていただけるとうれしいです。 よろしくお願いいたします。

  • 置換した文字色の変更

    シートが2枚あって、sheet(1)の内容を変更するとsheet(2)の内容を検索して置換するマクロを作っています。 sheet(1)で変更された文字を検出して(検出は文字色で判断しています。)sheet(2)にある文字を置換した後。文字色を変更しようとしています。 Sheet(2)の文字は例えばこのように並んでいます。 各文字はsheet(1)のA,B列の内容を合せたものやユーザーが任意に入れた文字を含みます。 A1 上側 右側 A2 下側 左側 A3 両側 A1:A3を選択して、A1の「上側」を「上面」に置換した後、文字色変更したいのです。 ユーザーの入力値が含まれるため、書式や文字列のコピペは出来ません。 なお、文字数は一定では有りません。また、この範囲の検索が終了すると次ぎの範囲を選択し同様の処理を行っています。 現在使っているのはマクロの記録を行ったものを使っています。 a="上側" b = "上面" Selection.Find(What:=a・・・・・・) ActiveCell.Replace What:=a, Replacement:=b, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False この中でReplaceFormatで書式設定を行っているのは判るのですが、ここをどの様にするば希望の文字色(例えば赤)にする事が出来るのでしょうか? また、その方法だとA1セル全ての書式が変わってしまいます。欲を言えば置換後の”上面”だけを変更したいのですがそれは可能でしょうか。 宜しくお願い致します。

専門家に質問してみよう