[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字列内の全角文字を置き換え』(かっぱ)
お世話になります
マンション名のリストがあり[A}列、全角文字と半角文字が混在しています。
この[A}列の全角文字をすべて[●]に変改して[B]列に吐き出せますか?
[A}列は事前にASC関数で半角に変換可能な文字は半角になっています。
[A] [B] [1]cube中央a cube●●a [2]town本町-24 town●●-24 [3]1998町営住宅4-5 1998●●●●4-5
過去に類似している問い合わせはありましたが、知識が足りておらず
対策を見つけることができませんでした。
できれば関数式を教えていただれば助かります。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
とりあえずvbaで
Sub test() Dim a, i As Long With Range("a1", Range("a" & Rows.Count).End(xlUp)).Resize(, 2) a = .Value With CreateObject("VBScript.RegExp") .Global = True .Pattern = "[一-龠〃々〆〇]" For i = 1 To UBound(a, 1) a(i, 2) = .Replace(a(i, 1), "●") Next End With .Value = a End With End Sub (seiya) 2018/03/07(水) 22:53
>全角文字をすべて ひらがな、カタカナも含むのなら
.Pattern = "[一-龠〃々〆〇]" を .Pattern = "[ぁ-んァ-ヶー一-龠〃々〆〇]" に差し替え (seiya) 2018/03/07(水) 22:59
例では全角文字は連続して1箇所だが飛び飛びなこともあるのだろうか? (ねむねむ) 2018/03/08(木) 07:00
数式だと長くなってしまった(汗) B1=SUBSTITUTE(A1,MID(A1,MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),)),MAX(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=2)*ROW(A$1:A$100),))-MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),))+1),REPT("●",LEN(MID(A1,MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),)),MAX(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=2)*ROW(A$1:A$100),))-MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),))+1)))) 飛び飛びだとダメです。 (ろっくん) 2018/03/08(木) 08:37
B1 =REPLACE(ASC(A1),MATCH(TRUE,INDEX(LENB(MID(ASC(A1),ROW($1:$100),1))=2,),0),LENB(ASC(A1))-LEN(ASC(A1)),REPT("●",LENB(ASC(A1))-LEN(ASC(A1))))
同じく飛び飛びNG。 (GobGob) 2018/03/08(木) 08:52
=REPLACE(A1,MATCH(1,INDEX((CODE(MID(A1,ROW($1:$100),1))>256)*1,0),0),LENB(A1)-LEN(A1),REPT("●",LENB(A1)-LEN(A1))) こちらも飛び飛びには対応せず。 (ねむねむ) 2018/03/08(木) 09:03
邪道でワード使う方法。飛び飛びでもOK
ワードにコピペする。 ワードで置換から →オプションボタンをクリック。 「ワイルドカードを使用する」にチェック →検索する文字に [、-鶴] を入力([]も全部入力) →置換後の文字列に ● を入力 →すべて置換ボタンをクリック
置換え出来たらエクセルの指定位置にコピペしてもどす。
(1111) 2018/03/08(木) 09:36
Dim c As Range, i As Long, comm As String For Each c In Range("A:A").SpecialCells(xlCellTypeConstants) For i = 1 To Len(c.Value) If Mid(c.Value, i, 1) = StrConv(Mid(c.Value, i, 1), vbWide) Then comm = comm & "●" Else comm = comm & Mid(c.Value, i, 1) End If Next i c.Offset(, 1).Value = comm comm = "" Next c End Sub (mm) 2018/03/08(木) 09:38
隠居じーさん定番、恐怖のユーザー定義関数 間違ってるかもエラー処理無しバージョン。
Option Explicit Function maruB(ByVal rr As Range) As Variant 'maruB(A1) Dim i As Long, j As Long, mstr As String mstr = rr.Text For j = 1 To Len(mstr) If LenB(StrConv(Mid(mstr, j, 1), vbFromUnicode)) = 2 Then Mid(mstr, j, 1) = "●" End If Next maruB = mstr End Function (隠居じーさん) 2018/03/08(木) 11:43
Option Explicit Function maruB(ByVal rr As Range) As Variant 'maruB(A1) Dim i As Long, mstr As String mstr = rr.Text For i = 1 To Len(mstr) If LenB(StrConv(Mid(mstr, i, 1), vbFromUnicode)) = 2 Then Mid(mstr, i, 1) = "●" End If Next maruB = mstr End Function (隠居じーさん) 2018/03/08(木) 11:55
お礼が遅くなり申し訳ございません
vbaも関数も試してみましたが最初にvbaを教えていただいた
(seiya)様のvbaで解決しました
応用として[英字]以外は[●]にするなどもトライしています。
(かっぱ) 2018/03/12(月) 23:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.