- ベストアンサー
度々マクロについて質問あります
sheetが複数ある人事データがあります。3番目のsheetだけを対象にしたマクロを作成中です。 内容は、 社員コード 姓 名 部署 123 中田 英寿 営業 456 小野 伸二 開発 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ となっております。 この3番目のsheetだけを対象にして、社員コード・123 の中田をnakataと置き換えるマクロを作成したいです。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。Wendy02 です。 Match 関数を使って作ってみました。 自分でやってみると、あまり自動的に置換してしまうと、不安が残りましたので、対話モードで、途中・途中で確認が入るようにしました。対話モードがうるさいようでしたら、Msgbox の部分を取り去ってください。 なお、前回と同じ要領で、登録してください。ただ、私のコードは、多少、スピードを優先するために、イレギュラーな部分があります。通常は、Findメソッドで、Replaceするのが一般的かもしれません。 Cell(ret,2) は、B列のことを指しますから、確か、元の表は違う列だったような気がしますから、その部分だけ調整してください。(3箇所) また、シートを開けないで検索する場合は、以下のコードを書き換えないとできません。 Sub ReplaceName() Dim myCode As Variant, myName As String Dim ret As Long 'ワークシートの三番目 Worksheets(3).Select myCode = Application.InputBox("コードを入力してください。", Type:=2) If myCode = "False" Or myCode = "" Then Exit Sub myCode = CLng(myCode) 'ワークシート関数で探す On Error Resume Next ret = WorksheetFunction.Match(myCode, Range("A:A"), 0) Err.Clear On Error GoTo 0 If ret <> 0 Then myName = Application.InputBox("「" & Cells(ret, 2).Value & "」から" & _ vbCrLf & "変更する名前を入力してください。", Type:=2) If myName = "False" Or myName = "" Then Exit Sub If MsgBox(Cells(ret, 2).Value & "を" & _ myName & "に変更してよろしいですか?", vbQuestion + vbOKCancel) = vbOK Then Cells(ret, 2).Value = myName End If Else MsgBox "コード: " & myCode & "が見つかりません。", vbCritical End If ret =0 End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#1でもご指摘ですが、この質問は「3番目のシート」という言葉が2回出てきて目立つのですが、何に関する質問なのかぼやけていませんか (1)3番目のシートの指定方法 Index番号やシート名による方法があります。 (2)検索・置換置換のコード (3)3番目のsheetだけを対象にして 普通はいろんなことが1シート内で行うのが多い。 (4)その他(1)-(2)以外の問題 どれでしょうか。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 >3番目のsheetだけを対象にして 「Worksheets(3)」 でシートを指定すればいいのでは? >マクロを作成中です ということなら、現状の作りかけのコードを提示してみてはいかがですか。 そして、どこで行き詰まっているのかを具体的に書きましょう。
補足
書き込みの情報が少なくてすいませんでした。 自分なりに 作成してみましたがどうもうまくいきません。 Sub 変換() Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Dim r As Range Set Sh1 = Worksheets("1") Set Sh2 = Worksheets("2") Set Sh3 = Worksheets("3") Sh3.Select Set c = Cells.Find(What:="9876543", LookAt:=xlWhole) c.Offset(, 1).Activate ActiveCell.Replace What:="中田", Replacement:="中田英寿" End Sub このように作成しましたがうまくいきません。恐らくsheet3のデータはsheet1から( =1!A100 )といったように値を他のsheetから持ってきてるからではないんでしょうか?