[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルマクロ 文字置換のワイルドカードについて』(noro)
文字の置換を一括で行うために次のマクロを教えていただきました。
Sub 置換()
Dim i As Long With ThisWorkbook.Sheets("sheet2") For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row Cells.Replace What:=.Range("A" & i).Value, Replacement:=.Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Next End With End Sub
sheet2(例)
A列 B列
検索 置換後
東京 日本
ここにワイルドカードを使用したいのですが、次の例の場合がうまくゆきません
平成23年度(置換前) [23](置換後)
平成6年度 [06]
としたくて
平成??年度 [??]
平成?年度 [0?]
としたところ
[]
[0]
となってしまいました。
よい方法を教えてください。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
そら置換先の文字がないからねぇ。 大量にあるならともかく、おそらく年度が入力されているセルなんて、1セルくらいでしょう? そこだけ置換ではなく、指定してあげればいかがでしょうか? (稲葉) 2015/02/04(水) 08:39
ワイルドカードで検索した結果を、置換文字列で利用したいというのは Replace 関数では 難しそうです。
今回の例だけだったら、関数でもでできそうですけれど、VBAでやるのであれば正規表現が 利用できますので、なれないと敷居が高いかもしれませんが、挑戦してみてはどうでしょうか。
http://officetanaka.net/excel/vba/tips/tips38.htm
http://www.happy2-island.com/vbs/cafe02/capter02104.shtml
平成を年にする例(一桁数字を二桁で0パディングしたい場合は、セルの書式でどうでしょうか)。
Sub Samle() Dim objRegExp Set objRegExp = CreateObject("VBScript.RegExp")
With objRegExp .Pattern = "平成(\d{1,2})年" .IgnoreCase = True .Global = True End With
Dim r As Range Dim sMatch For Each r In Range("A1:A22") Set sMatch = objRegExp.Execute(r.Value) If sMatch.Count > 0 Then r.Value = sMatch(0).SubMatches(0) End If Next End Sub (Mook) 2015/02/04(水) 10:17
シート内の色々な箇所にあるなら処理に時間が掛かり無理かもしれませんが、ある一定の 範囲に固まっているなら、その範囲を選択した状態で下記コードを実行なんて方法でも いいのかな。
Sub 置換2()
Dim r As Range
For Each r In Selection If r.Value <> "" Then r.Value = "[" & Format(Replace(Replace(r.Value, "平成", ""), "年度", ""), "00") & "]" Next
End Sub (se_9) 2015/02/04(水) 10:28
検索条件を部分一致にして 平成 空白 年度 空白 で置換 かな? (seiya) 2015/02/04(水) 10:31
ん、 平成6年度 → 平成06年度 にしたいってことだと思っていたのですが、違うのかな? (稲葉) 2015/02/04(水) 10:32
平成23年度→[23] 平成6年度 →[06] ではないのか? 追記 数値は固定ではなく書式文字で表せば 平成e年度→[ee] では? (ねむねむ) 2015/02/04(水) 10:35
>平成??年度 [??] >平成?年度 [0?] ここちゃんと読んでませんでした 済みません。 (稲葉) 2015/02/04(水) 10:42
Dim i As Long Dim j As Long Dim Sout As String Dim S As String Dim A As String With ThisWorkbook.Sheets("Sheet2") For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row A = .Range("A" & i).Value For j = 1 To Len(A) S = Mid$(A, j, 1) If S Like "[0-9]" Then Sout = Sout & S End If Next .Range("B" & i).Value = "[" & Format(Sout, "00") & "]" Sout = "" Next End With End Sub ともできる (デイト) 2015/02/04(水) 10:51
検索条件を部分一致にして 平成 空白 昭和 空白 年度 空白 で置換
セルの書式 "["00"]" (seiya) 2015/02/04(水) 12:30
それじゃ
Sub test() Dim r As Range With CreateObject("VBScript.RegExp") .Pattern = "(平成|昭和|大正|明治)([\d0-9]+)年度" For Each r In ActiveSheet.UsedRange If .test(r.Value) Then r.Value = Format$(.Replace(r.Value, "$2"), """[""00""]""") End If Next End With End Sub (seiya) 2015/02/04(水) 13:07 "00" を忘れてた...
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.