0

ここで必死になる。これを終わらせるために午後を過ごしてください。ここで何が問題を引き起こしているのかよくわかりません。

私はデータのワークシートを持っています。このシートには、人々、使用するシステム、ユーザー名、マネージャーなどのリストがあります。このデータは、古い場合がある外部ファイルから取得されるため、マクロを作成しています古いデータ(マネージャーなど)を手動で上書きします

この抽出されたデータは、「Extract」というワークシートにあります。

「データ」という別のワークシートがあり、このワークシートには 2 つのテーブルがあります。システム上の名前 - 「NoS」 - およびオーバーライド マネージャ名 - 「OMN」。これらのテーブルは互いに隣接しています。アイデアは、私のマクロがNoSで名前を検索し、それが見つかった場合、マネージャー (右に 7 セル) を「OWN」の隣接セルの値に置き換えるというものです。

NB私はテーブル/名前付き範囲を使用しているので、名前が追加されるとVBAで範囲が動的に更新されます

現時点では、マクロを実行すると、人のマネージャーの名前が変更されますが、他の行の他のセルの値も変更されます (「抽出」の人の名前が「NoS」にない場合でも。私のコード、および私のデータの一部を以下に示します。問題の原因と修正方法を知っている人はいますか?

Dim c, exceptionNames, extractNames, FoundOne As Range
Set exceptionNames = Range("NoS")
Set extractNames = Worksheets("Extract").Range("A1:I200")
    For Each c In exceptionNames
        With extractNames
            Set FoundOne = .Find(What:=c, LookAt:=xlPart)
            If Not FoundOne Is Nothing Then
                extractNames.Replace What:=FoundOne.Offset(0, 7), Replacement:=c.Offset(0, 1).Value, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            End If
        End With
    Next c
End Sub

「データ」タブ

システム上の名前 | マネージャー名の上書き

ドン・ドナルドソン | 新しいマネージャー

アーロン・アーロンソン | 新しいマネージャー 2

デビッド・デビッドソン | 新しいマネージャー 3

「抽出」タブ

フルネーム | 名 | 姓 | 部門 | ユーザー名 | システム | システム | 日付 | マネージャー アクセス

これがあまり意味をなさない場合は申し訳ありません。もっと詳しく説明する必要がある場合はお知らせください。

4

2 に答える 2

1

ここであなたの意図を誤解している可能性がありますが、VLOOKUPシート「抽出」の列 8 で数式を使用するだけです。

=IF(ISNA(VLOOKUP(Extract!A1,NameAndManager,2,FALSE)), "manager not found",VLOOKUP(Extract!A1,NameAndManager,2,FALSE))

NoS と OMN を 1 つの範囲 NameAndManager に結合します。

その式を「管理者アクセス」列のすべてのセルにコピーするだけです。

「マネージャーが見つかりません」を表示したくない場合や、既存の名前を変更しない場合は、この式を新しい列に入力し、名前が見つからない場合はデフォルトで「」に設定します。次に、単純なIF式を実行して、すべての正しいマネージャー名を含む新しい列を作成できます。

于 2013-08-22T13:34:26.770 に答える