仕事のプロセスを自動化し、将来発生するいくつかの問題に対処しようとしています。私のプロセスの一部は、さまざまなスプレッドシートをインポートし、従業員の名前を探して、そのマネージャーが誰であるかを調べることです。私が直面している問題は、人々が異なるシステムでは異なる名前で知られていることです。たとえば、「Donald Donaldson」という名前の人は、システムでは「Don Donaldson」と呼ばれる場合がありますが、従業員リストにはフル ネームが含まれています。あるいは、Dave Davidison はシステム上の David Davidson です。
これは何度も発生し (一部の人はシステム リストに 2 回表示されるため)、同僚が手動で問題を修正している間、プロセス全体が遅くなります。これに対処するために、[データ] タブに 3 つのテーブル/動的名前付き範囲を作成しました。各テーブル (以下のサンプル) には異なる目的がありました。間違った名前 ("names") のリスト、置換名 ("Rep") のリスト、およびシステムから抽出された名前のリスト ("Compare")。比較リストを調べて、「名前」のインスタンスが表示されているかどうかを確認したいと思います。インスタンスが見つかった場合は、名前を正しいものに置き換えます
私は必要なことを達成するのに非常に近づいていると感じていますが、私が破裂するのを助けるその輝きの瞬間が欠けています.
私のアプローチ
3 つの動的名前付き範囲があり (範囲の長さは、他のファイルから抽出される内容に応じて変化します)、それらを 3 つの動的配列として保存しました (まさにそのため)。私のコードは、Names の各要素、Rep の各要素、Compare の各要素をループしています。Compare (z) の値が Names (x) の値と等しい場合、その値を Rep の値に変更します (つまり、z = y)。問題は、z の値のみが変化することです。私の配列の対応する値ではありません。つまり、Don Donaldson は Compare の 3 番目の要素です。一致するものを見つけたので、Z は Don Donaldson から Donald Donaldson に変更されました。ただし、Compare(3) は Don Donaldson のままです。
4番目の動的配列を作成し、ReDimを使用して反復ごとにその長さを増やしてみました。すべての一致で myArr(index) は y に等しく、ループの後、4 番目の名前付き範囲 ("TestRange") がこの配列の値に設定されます。このアプローチも機能しません。
誰でも私を助けることができますか?配列内の要素の値を変更 (比較) する方法と、この新しい配列を名前付き範囲に出力する方法を教えてください。
私のコードと私のデータのサンプルを以下に示します。
助けてください。ありがとう
Sub mySub()
Dim Arr() As Variant
Arr = Worksheets("Data").Range("Names").Value
Dim comArr() As Variant
comArr = Worksheets("Data").Range("Compare").Value
Dim repArr() As Variant
repArr = Worksheets("Data").Range("Rep").Value
Dim comInt As Integer
comInt = 0
Dim RowCounter As Long
Dim ArrayCounter As Long
Dim x As Variant
Dim y As Variant
Dim z As Variant
Dim zInt As Integer
zInt = 0
Dim myArr() As Variant
For Each x In Arr
For Each y In repArr
For Each z In comArr
'ReDim myArr(0 To zInt) As Variant
If z = x Then
z = y
'myArr(zInt) = y
End If
zInt = zInt + 1
Next z
Next y
Next x
'Worksheets("Data").Range("TestRange").Value = comArr()
'Worksheets("Data").Range("TestRange").Value = myArr()
End Sub
*私の名前付き範囲 乱雑なレイアウトでごめんなさい
「名前」 ドン・ドナルドソン、デビッド・デビッドソン、マイク・マイケルズ、パット・パターソン、スティーブ・スティーブンソン、ジャック・ジャクソン、ロバート・ロバートソン、ハービー・ハービー、ジョン・ジョンソン
"Rep" ドナルド ドナルドソン、デイブ デビッドソン、マイケル マイケルズ、パトリック パターソン、スティーブン スティーブンソン、ジャック ジャクソン、ロブ ロバートソン、ハーヴ ハーヴィ、ジョン ジョンソン
「比較」 ドン・ドナルドソン、マイク・マイケルズ、ジャック・ジャクソン、ジョン・ジョンソン、パット・パターソン、パーシー・パーキンス、ドン・ドナルドソン、トム・トムソン、ハービー・ハービー、マーク・マーカス、クリス・クリストファーソン、ミッチ・ミッチェル、ジャック・ジャクソン、ロブ・ロバートソン