A列にある「鈴木」「佐藤」の文字列を「総務部」に一気に置換したいのですが
下記マクロですと、表全体に対して置換してしまいます。
A列だけ置換し、A列以外にある「鈴木」「佐藤」はそのままにしたいのですが
どうしたらいいでしょうか?
Sub test01()
Dim x As Variant
Dim i As Integer
x = Split("鈴木、佐藤", "、")
For i = LBound(x) To UBound(x)
ActiveSheet.UsedRange.Replace What:=x(i), Replacement:="総務部", LookAt:=xlPart
Next
End Sub
ちなみにこの設定が複数あるので
「伊藤」「高橋」だったら「営業部」
「高田」「斉藤」だったら「企画部」のように
スッキリしたマクロになれば一番理想的なのですが
今の私ですと、変数を変えるだけで縦に長々と書くことになりそうです。
もし他にやり方があれば教えていただけますでしょうか?
宜しくお願い致します。
すでに多数回答が付いているので解決したかもしれませんが、二つのやり方でサンプルを作成してみました。
上のやり方は hananeko 0 さんがやろうとしたように、マクロだけで行う方法です。
下のやり方は、変換データを作業用のワークシートに記載してから実行する方法です。
どちらでも同じ結果になると思いますので、やりやすい方で試してみてください。
'-------------------------------------------------------------------------------- ' ' 配列を使用するやり方。 ' ' cnbTable に変換するリストを例のように記載して、変換するシートを表示して実行する ' '-------------------------------------------------------------------------------- Sub nameConvertAR() '-------------------------------------------------------------------------------- Dim cnvTable '★ 変換リストを => ではさんで列挙する。 cnvTable = Array("佐藤=>総務", "鈴木=>総務", "伊藤=>営業部", "高橋=>営業部", "高田=>企画部", "斉藤=>企画部") Dim ar, dt For Each dt In cnvTable ar = Split(dt, "=>") Columns(1).Replace what:=ar(0), replacement:=ar(1), lookat:=xlWhole Next End Sub
'-------------------------------------------------------------------------------- ' 作業シートを使用するやり方。 ' ' 新しいシートを用意し、A列に変換前の名前、B列に変換後の名称を対にして記載する ' 下記の★1の部分に変換先のシート名 ' ★2の部分に用意した変換テーブルのシート名 ' を記載し、実行する。 ' '-------------------------------------------------------------------------------- Sub nameConvertWS() '-------------------------------------------------------------------------------- Dim dstWS As Worksheet Dim srcWS As Worksheet Set dstWS = Worksheets("Sheet1") '★1 変換するシート Set srcWS = Worksheets("Sheet2") '★2 変換するデータのあるシート:A列に名前、B列に置換名 Dim r As Long r = 1 Do While srcWS.Cells(r, "A") <> "" And srcWS.Cells(r, "B") <> "" dstWS.Columns(1).Replace what:=srcWS.Cells(r, "A").Value, replacement:=srcWS.Cells(r, "B").Value, lookat:=xlWhole r = r + 1 Next End Sub
UsedRangeの部分をRange("A:A")に変更すればいけますよ
http://www.q.hatena.co.jp(URLはダミーです。)
質問者さんが作ったプログラムを少し変えて使いやすくしました。
これだと名前、部署を変える場合でも簡単に行えます。
Sub test01()
namae = Split("鈴木、佐藤", "、")
Call test02(namae, "総務部")
namae = Split("山下", "、")
Call test02(namae, "総務部")
End Sub
Sub test02(namae As Variant, shozoku)
Dim i As Integer
For i = LBound(namae) To UBound(namae)
ActiveSheet.Range("A:A").Replace What:=namae(i), Replacement:=shozoku, LookAt:=xlPart
Next
End Sub
簡単に行えました!
かなり使いやすくなりました!
本当にありがとうございますっ <(_ _)>