私は多くのシートを含むブックを持っていますが、その1つは基本的にサインインシートです。各行にはNameセルがあり、これには別のシートList Fillerを参照するデータ検証ドロップダウンリストがあります。隣接するセルは、VLOOKUPを使用してNameセルを参照し、目的の値(ID、電話番号など)を取得します。これはかなりうまくいく。相対的なシート参照を強制しますか?
ワークブックを個々のワークシートに分割するマクロがあります。簡単に言えば、ブック全体を電子メールで送る代わりに、私はそれを分割してサインインシートに電子メールで送ります。 Sign In SheetからList Fillerへの参照を容易にするために、List Fillerシートを新しいSign In Sheetワークブックにコピーしました。
...
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsm", FileFormat:=52
...
masterWB.Sheets("List Filler").Copy Before:=newWB.Sheets(1)
...
新しいブックを開くと、リストフィラーとサインインシートの両方が表示されます。しかしマスターブックに、VLOOKUPの参照やデータ検証ソース参照すべてのポイント:
データ検証ソースに変更:だからVLOOKUPを維持
=IFERROR(VLOOKUP(O14,'[workbookname.xlsm]List Filler'!A:M,12,FALSE),"")
:VLOOKUPに変更
='[workbookname.xlsm]List Filler'!#REF!
マスターワークブックのList Fillerシートを参照していました。
基本的に2つの問題があります。
1)VLOOKUPリファレンスは、List Fillerシートを比較的参照する必要がありますが、マスターブックで探す必要はありません。私はこれをカスタム関数で修正することができます(私は他の場所でそれをどうやって行うのですか)、ここの修正はおそらく(2)の場合と同じです。
2)データ検証ソース参照は、マスターブックの元のものではなく、「ローカル」リストフィラーシートに向かう必要があります。
これに関するお手伝いがあれば幸いです。明確化が必要な場合は、私に知らせてください。また、必要に応じてより多くのコードスニペットを提供できます。
ありがとうございます!
編集1: 追加するだけで、サインインシートが最終的にマスターブックに移動/コピーされるため、リストフィラーの参照を「ローカル」にしておきたいと思います。サインインシートはマスターブックからマスターブックに移動し、マスターブックに戻ります。リストフィラーシートにアクセスする必要がありますが、サインインシートが入っているワークブックには常にリストフィラーとして存在します。 $ A1 $ 1はいつもA1を参照して、意味があれば '$ List Filler'をしたい。
@OpiesDad
に代わって投稿する代わりの範囲を参照する
"[workbookname.xlsm]"の検索置換を行い、それを " – OpiesDad
"に置き換えることができます。最初は、マスターブックの範囲を指定して削除していきます新しいワークブックの名前付き範囲を指定し、同じ名前の新しいワークブックに新しいワークブックを追加します。次に、セルをリストする代わりに、データ検証で名前付き範囲を使用します。これがうまくいくかどうかはわかりませんが、試してみる価値があります。 – OpiesDad
これは、 "最初のブックから名前付き範囲を使用しますか"などのコピーを実行すると警告が表示される可能性がありますが、おそらく警告を抑制して対処する可能性があります。 – OpiesDad