![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?c9bd177)
No.3ベストアンサー
- 回答日時:
No2です。
先ほどのマクロに誤りがありました。前回のは破棄してください。--------------------------------
Option Explicit
Public Sub 社員番号変換()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim okctr As Long
Dim ngctr As Long
Dim row As Long
Dim key As String
Set sh1 = Worksheets("data")
Set sh2 = Worksheets("名簿")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow1 = sh1.Cells(Rows.Count, "B").End(xlUp).row
maxrow2 = sh2.Cells(Rows.Count, "B").End(xlUp).row
Application.ScreenUpdating = False
For row = 2 To maxrow2
key = sh2.Cells(row, "B").Value
dicT(key) = sh2.Cells(row, "C").Value
Next
okctr = 0
ngctr = 0
For row = 2 To maxrow1
key = sh1.Cells(row, "B").Value
If dicT.exists(key) = True Then
sh1.Cells(row, "B").Value = dicT(key)
okctr = okctr + 1
Else
ngctr = ngctr + 1
End If
Next
Application.ScreenUpdating = True
MsgBox ("処理件数=" & okctr & " 未処理件数=" & ngctr)
End Sub
----------------------------------
No.4
- 回答日時:
Match関数を使ってみました。
'//標準モジュール
Sub FindNames()
Dim sh1 As Worksheet: Set sh1 = Worksheets("名簿")
Dim sh2 As Worksheet: Set sh2 = Worksheets("Data")
Dim i As Variant
Dim c As Variant
Dim rngNumList As Range
With sh1
'必ず、頭出しは、B1にしてください。
Set rngNumList = .Range("B1", .Cells(Rows.Count, 2).End(xlUp))
End With
Application.ScreenUpdating = False
With sh2
'データがB2から始まっているなら、B2から
For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp))
If c.Value <> "" Then
i = Application.Match(c.Value, rngNumList, False)
If IsNumeric(i) Then
c.Value = sh1.Cells(i, 3).Value
End If
End If
Next
End With
Application.ScreenUpdating = True
End Sub
WindFallerさん、返信ありがとうございました。自分のPCでは少し時間がかかるみたいです。勉強になりました。感謝致します。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?c9bd177)
No.2
- 回答日時:
No1です。
以下のマクロを標準モジュールへ登録してください。---------------------------------------
Option Explicit
Public Sub 社員番号変換()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim okctr As Long
Dim ngctr As Long
Dim row As Long
Dim key As String
Set sh1 = Worksheets("data")
Set sh2 = Worksheets("名簿")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow1 = sh1.Cells(Rows.Count, "B").End(xlUp).row
maxrow2 = sh2.Cells(Rows.Count, "B").End(xlUp).row
Application.ScreenUpdating = False
For row = 2 To maxrow2
key = sh2.Cells(row, "B").Value
dicT(key) = sh2.Cells(row, "C").Value
Next
okctr = 0
ngctr = 0
For row = 2 To maxrow1
key = sh1.Cells(row, "B").Value
If dicT.exists(key) = True Then
sh1.Cells(row, "B").Value = dicT(key)
okctr = okctr + 1
Else
ngctr = ngctr + 1
End If
dicT(key) = sh2.Cells(row, "C").Value
Next
Application.ScreenUpdating = True
MsgBox ("処理件数=" & okctr & " 未処理件数=" & ngctr)
End Sub
-----------------------------------------
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?c9bd177)
No.1
- 回答日時:
補足要求です。
1)シート1、シート2共に1行目は見出しでしょうか。
2)replaceもselect caseも使用しませんが、それでも良いですか。
3)シート1の社員番号を直接変換してしまうと、リラン(マクロの再実行)ができなくなります。
その為、他の列(例えばC列)に、名前を出力したほうが良いと、考えますが、いかがでしょうか。
どうしても、B列を直接変換したい場合は、事前シート1のバックアップをとることをお勧めします。
tatsu99さん、返信ありがとうございます。
(1)シート1、シート2とも1行目は見出しです。
(2)方法は特にこだわりはありません。できれば高速処理できると助かり
ます。
(3)元ファイルはバックアップしているので、直接変換できたほうがいい
です。
申し訳ありませんがご教示よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) Excelで質問です! 現在マクロを勉強中の初心者です。 以下のような表から、会社名が空白のもの以外 2 2022/06/14 12:16
- Visual Basic(VBA) 2つの条件に合うセルにデータを転記したい 4 2022/12/02 11:05
- Excel(エクセル) 指定した条件でTRANSPOSE関数を使う 5 2023/08/18 19:45
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表で1年間の曜日を...
-
エクセルでの特別な文字を上に...
-
Microsoft Officeの中古は信用...
-
エクセルで会社の従業員のデー...
-
Excelで50個のセルに同じ文字を...
-
スプレッドシートで使う数式を...
-
エクセルでセルに標準で入力さ...
-
エクセルでB列でフィルターをか...
-
UNIQUE関数が使えないバージョ...
-
EXCELの質問です 119から足した...
-
libre 表計算ソフトの計算がう...
-
【マクロ】VLOOKUPにて参照元に...
-
お世話になります。 Excelを使...
-
【マクロ】 IFERROR関数をマク...
-
Excelで、項目の種類ごとにカウ...
-
エクセル日付 文字列の関数がエ...
-
【マクロ】セルに関数を入れる...
-
exselで最小数で並び替える関数
-
エクセルの空欄をつめて、次の...
-
Excel分析ツールでのポアソン回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
シャープのアクオス sh-m25 を...
-
VBA:同じ文字列データの比...
-
エクセル:VBAで月変わりで、自...
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBAで 2種のリストを...
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
Excel VBAでシート内全体に非表...
-
歯抜けの時間を埋めて行の挿入
-
Excelマクロ データが上書きさ...
-
VBA 貼付先範囲(行)がいっぱ...
-
【WORD差し込み印刷】複数レコ...
-
EXCELマクロで全シート対...
-
エクセルVBAでの日付順のデ...
-
エクセル シート保護後コメン...
-
ノートパソコン 2in1について i...
おすすめ情報