- ベストアンサー
A列の行のセルに出てくる一番右の値だけを複数置換
A列の行のセルに出てくる一番最初、右の値だけを複数置換する式、マクロを教えて下さい 値は連続しており一番最初右であれば1文字とは限りません 行数は100000行 置換する対象の値は約30個です
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「右の値だけ」と書いてあったので、置換 文字が右端にあった場合のみ置換すると、解釈しました。これば図と文章で説明してあります。 説明が、抽象的すぎます。 具体的に、置換前、置換後を上げて下さい。 ろくな説明もしないくせに、クレームだけは一人前。 こちらに答えておきました。 https://okwave.jp/qa/q9839455.html
その他の回答 (4)
- SI299792
- ベストアンサー率47% (773/1617)
使い方を書いていませんでした。 C2~C31 に検索文字一覧を D2~D31 に痴漢文字一覧を入力して実行して下さい。
補足
回答ありがとうございます マクロを実行しても置換できません Sub test01() Fr = Range("A1").End(xlDown).Row LR = Range("A100000").End(xlUp).Row For i = Fr + 1 To LR If Cells(i, "A") Like " *" Then Cells(i, "A").Replace What:="", Replacement:="", LookAt:=xlPart, MatchCase:=True End If Next i End Sub ""の中には置換前後の値が入る このマクロは一度に一値しか置換できませんが一度にできるだけ多くの値を置換したいです
- SI299792
- ベストアンサー率47% (773/1617)
最初1番右の意味が解りませんでした。 画像のような事だと思います。 30ある、痴漢対象をどうするか。セル上に置くのが一番いいと思います。 C2~D31 に検索文字と痴漢文字を置いて下さい。 Option Explicit ' Sub Macro1() Dim Cell As Range ' Set Cell = Cells(Rows.Count, "A").End(xlUp) ' For Each Cell In Range("A2", Cell) Cell = RightReplaceM(Cell.Value, [C2:D31]) Next Cell End Sub ' Function RightReplaceM(Expression As String, FindArea As Range) Dim Row As Integer Dim Find As String Dim Length As Integer ' For Row = 1 To FindArea.Rows.Count Find = FindArea(Row, 1) Length = Len(Expression) - Len(Find) ' If Expression Like "*" & Find Then RightReplaceM = Left(Expression, Length) & FindArea(Row, 2) Exit Function End If Next Row End Function RightReplaceM はユーザー定義関数としても使えます。
補足
回答ありがとうございます マクロを実行しても作動しません Sub test01() Fr = Range("A1").End(xlDown).Row LR = Range("A100000").End(xlUp).Row For i = Fr + 1 To LR If Cells(i, "A") Like " *" Then Cells(i, "A").Replace What:="", Replacement:="", LookAt:=xlPart, MatchCase:=True End If Next i End Sub ""の中には置換前後の値が入る このマクロは一度に一値しか置換できませんが一度にできるだけ多くの値を置換したいです
- imogasi
- ベストアンサー率27% (4737/17069)
#1です。補足は、有難うございます。 小生は、書き間違いの問題を、主に言っている、のではない。 そうではなくて、最低、A列の1セル分(どこかの行)でも(1例でなく、数例が望ましいが)、データの入力されいる、実例(文字列か?)と、 検索する語句の数例を挙げてくれないかな。 ーー VBAにはReverseFindのロウなもの、はなかったと思うのが、InstrRev 関数が使えるかな。 InstrRevの説明一例 https://www.sejuku.net/blog/31263 の中程以下。 ーー 検索には、正規表現まで使わなくても済む課題と思うがどうかな。?
補足
Sub test01() Fr = Range("A1").End(xlDown).Row LR = Range("A100000").End(xlUp).Row For i = Fr + 1 To LR If Cells(i, "A") Like " *" Then Cells(i, "A").Replace What:=" ", Replacement:="", LookAt:=xlPart, MatchCase:=True End If Next i End Sub このマクロは一度に一値しか置換できませんが一度にできるだけ多くの値を置換したいです
- imogasi
- ベストアンサー率27% (4737/17069)
質問の課題の状況がよくわからない表現だ。 補足すべきだろう。 VBAをやっている人が、これでは困るよ。VBAで、Range.Findと置換(Replace)はやった経験あるのか。 (1)A列 -->A列1列だけの、セルの値に注目すればよいのだね。 セルの値は、数値か文字列か。 文字列の場合、最後の語句とかになると、意味的な切り出しは難しい。 スタート位置と文字列の長さと内容を頼って探さないといけない。 (2)「1番最初」と言えば、普通は1番左側では? 「右の値」と書いてあるが、どういうデータの状況か? (3)「複数置換」とは、1セルあたり、置換前(置換元)の(候補=検索)語句が複数、約30個あるということだね。 (4) 100000万行ある。30の置換前の語句を、舐めて繰り返すのは、少し時間がかかるかな。 ーー 結局、少数のデータ実例を挙げてないから、こういうことになるのだ。他人に説明したり、聞くときは、データ例を挙げるは必須だろう。エクセルのWEBの説明記事でも皆データ例をまず挙げてをあげて、説明しているのを知らないのかな。
補足
一番左の値です 失礼しました
補足
一番左です 失礼しました