(初めて質問させていただきます。失礼がありましたら申し訳ございません。)
ExcelのVBAで以下のことができないか模索しております。
(1)4文字以上の数字(整数)を”X”に変換する
⇒意図としては、セル内に含まれる電話番号の一部をマスキングしたいです。
(2)”様”の前の2文字を”X”に変換する
⇒意図としては、セル内に含まれる氏名の一部をマスキングしたいです。
マスキングツールの利用なども検討しましたが、職場PCの制限上できないことが多く、
ExcelのVBAで解決できるのではないかと思い始めました。
いずれもReplaceとForとIfを使うのかと思いますが、初心者のためうまく使いこなせません・・・
うまく適用する方法をご存じの方がいらっしゃいましたらご教示いただけないでしょうか?
No.8ベストアンサー
- 回答日時:
No7です。
連投失礼します。
No7だと
1234-01234567
等の様な、後ろに前出のものを包含するようなものがあると、一部ミスりますね。
Replaceの回数を制限しておけばよさそうなので、以下に訂正しておきます。
Sub Sample()
Dim reg, match, m
Dim s As String, c As Range
Set reg = CreateObject("VBScript.RegExp")
reg.Global = True
For Each c In Range(cells(1, 1), cells(Rows.Count, 1).End(xlUp))
s = c.Text
reg.Pattern = "[^\n]{2}様"
s = reg.Replace(s, "XX様")
reg.Pattern = "\d{4,}"
Set match = reg.Execute(s)
For Each m In match
s = Replace(s, m.Value, String(Len(m), "X"), 1, 1)
Next m
c.Offset(, 1).Value = s
Next c
End Sub
遅れてしまいまして大変申し訳ございません、ご回答いただきありがとうございました!!ご教示いただいた内容で解決いたしました、本当に助かりました。ありがとうございました!!
No.7
- 回答日時:
こんにちは
横から失礼します。
単純な置き換えで良いとのことのようなので別案です。
・連続する4文字以上の数字は、その文字数分の「X」に置き換えます。
・「〇〇様」はセル内改行を含まない文字列を「XX様」に置き換えます。
対象はA列とし、結果をB列に表示するのはNo6様と同様にしてあります。
以下ではいかがでしょうか?
Sub Sample()
Dim reg, match, m
Dim s As String, c As Range
Set reg = CreateObject("VBScript.RegExp")
reg.Global = True
For Each c In Range(cells(1, 1), cells(Rows.Count, 1).End(xlUp))
s = c.Text
reg.Pattern = "[^\n]{2}様"
s = reg.Replace(s, "XX様")
reg.Pattern = "\d{4,}"
Set match = reg.Execute(s)
For Each m In match
s = Replace(s, m.Value, String(Len(m), "X"))
Next m
c.Offset(, 1).Value = s
Next c
End Sub
No.6
- 回答日時:
#5です
補足を拝見するとやっつけで良いのですね。
電話番号の(1)4文字以上の数字(整数)を”X”に変換する
これは、4桁になったらXXXXにするでは、問題になりますでしょうか?
例えば6桁だとXXXX56となります。8桁だとXXXXXXXXです。
取敢えず、やっつけ感ありますが参考コードです。
総当たりなので、データ数が多いと少々時間がかかるかと、、
A列が対象になっていますので、必要個所を書き直してください。
Sub Sample1()
Dim i As Long, k As Long
Dim c As Range
Dim strA As String
For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp))
For i = 1 To Len(c)
If IsNumeric(Mid(c, i, 1)) Then
If k = 3 Then
strA = Left(strA, Len(strA) - 3) & "XXXX"
k = 0
Else
strA = strA & Mid(c, i, 1)
k = k + 1
End If
Else
If Mid(c, i, 1) = "様" Then
strA = Left(strA, Len(strA) - 2) & "XX様"
k = 0
Else
strA = strA & Mid(c, i, 1)
k = 0
End If
End If
Next i
c.Offset(, 1).Value = strA
strA = ""
Next c
End Sub
出力先は c.Offset(, 1).Value = strA でB列になっています。
同じセルに書き出す場合は、c.Value = strA です。
No.5
- 回答日時:
こんにちは、
>一部をマスキングしたい
>セル内に含まれる
セル内データがどの様なフォーマットで出来ているのか不明ですが、
セル内データを項目ごとに単セルに分ける事が出来るのなら、関数でもVBAでもバグのリスクは低くなるように思います。(C列 氏名 D列 電話番号みたいに)
多くの文字列の中から、ターゲットキーをシンボルキーにするとすでに回答にあるような事象が想定されますね。
単セル(カンマ区切りなど区切られたデータ)にシンプルなデータの場合で合っても、ご質問の場合などは、シンボルキーを設定するのではなく
文字数などで書き換えた方が無難だと思います。
(1)4文字以上の数字(整数)を”X”に変換する
ご質問の内容とは異なりますが、
単セルの場合、一例:(最後の4文字を書き換える)
A1セルの値の左から1文字目から全文字数から-4の文字数迄と "XXXX"を
つなげてB1セルに書き出します。
VBA
Range("B1") = Mid(Range("A1"), 1, Len(Range("A1")) - 4) & "XXXX"
Range("A1") =とすることで元データを書き換える事が可能
関数
= MID(A1, 1, LEN(A1) - 4) & "XXXX"
元データ自体を書き換えることは出来ません。
No.4
- 回答日時:
どの程度できるんですかね?
https://atelierkobato.com/1moji/
これをベースに変換してください。
あと、一つのセルに電話番号も名前も入っているなら、まずはそれらを各列に分割してください。
そのあとにマスキング処理です。
No.2
- 回答日時:
規則性があるようで無いとも言えますので
完全自動に頼ると 落とし穴があると思います
いわゆる力業での処理ですので、結果の見直し行為は必要だと思います
見直しが必要なら 自動化は本末転倒のようにさえ思います・・
既にあるものをマスキングしたいのではない場合においては
(定型文) 作りこみを工夫する(いわゆる流し込み方式にする)
ほうが良いと思われます
No.1
- 回答日時:
1、前の数文字をleft関数で取得して、Xを結合。
2、2文字取得してXと様を結合。
VBAでしなくてもできる。
マスキングなら、変換とか難しく考える必要はないと思います。
それとも、文字数を合わせないといけない?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセルの数式について教えてください。 7 2023/06/18 10:16
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
我がまちの「給食」自慢を聞かせてっ!
富山県の給食には「ベニズワイガニ」が出る、、、なんて話を聞いたことがあります。 日本全国「え、給食にそれ出るの!?」な驚きメニューがまだまだあるはず!
-
エクセルのセルに入力した文字を「*」でマスクしたい
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
-
4
Excel countif関数で取り消し線のセルをカウントしないようにしたい countif関数で文
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・遅刻の「言い訳」選手権
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
”戻り値”が変化したときに、マ...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excel2003 複数セル1列の入力済...
-
VBA実行後に元のセルに戻りたい
-
VBAでセルをクリックする回...
-
DataGridViewの各セル幅を自由...
-
【VBA】指定したセルと同じ値で...
-
VBAでセル同士を比較して色付け
-
screenupdatingが機能しなくて...
-
Excel VBAで、 ヘッダーへのセ...
-
【EXCEL VBA】Range("A:A").Fi...
-
EXCELのVBA-フィルタ抽出後の...
-
【VBA】シート上の複数のチェッ...
-
エクセルVBAで、非表示にし...
-
Google Apps Script:Googleスプ...
-
エクセル マクロで セルの範...
-
VBA初心者です。結合セルを保持...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
VBA実行後に元のセルに戻りたい
-
Excel2003 複数セル1列の入力済...
-
Excel vbaで特定の文字以外が入...
-
VBA初心者です。結合セルを保持...
-
TODAY()で設定したセルの日付...
-
EXCELのVBA-フィルタ抽出後の...
-
【VBA】指定したセルと同じ値で...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
VBAでセルをクリックする回...
-
”戻り値”が変化したときに、マ...
-
【Excel】指定したセルの名前で...
-
【EXCEL VBA】Range("A:A").Fi...
おすすめ情報
ご回答ありがとうございます。個人情報を最低限マスクイングをした上で他部署に渡すことが目的でして、それほど精緻でなくとも問題ないため(「この様な」がマスキングされても問題ないため)VBAで対応できないかご相談させていただきました><
ご回答ありがとうございます。すべて1つのセル内に混在しておりまして、ご記載の通り文字数が合わないため単なるExcel関数では難しいと考えております・・・