3 つのワークシートを含むワークブックがあります。1 つのワークシートには入力値 (現時点では作成されておらず、この質問には必要ありません) があり、1 つのワークシートにはいくつかの「テンプレート」または「ソース」テーブルがあり、最後のワークシートには 4 つの書式設定された「ターゲット」テーブル (空またはそうでない) があります。重要ではありません)。各テンプレート テーブルには 3 つの列があり、1 つの列は次の 2 つの列の値が何であるかを識別します。値の列には数式が含まれており、各セルには名前が付けられています。数式では、セル アドレスではなくセル名が使用されます (たとえば、C2 ではなく MyData1)。
ソースからターゲットにセル名をコピーするか、ソースセル名に基づいてターゲットテーブルに名前を作成しながら、テンプレートをターゲットテーブルにコピーしようとしています。以下の私のコードは、名前に「ベース」を使用してターゲット名を作成しています。これは、コピー先のターゲットテーブルに応じて変更されます。私のサンプル テーブルには、すべてのセル名 (Num0_MyData1、Num0_SomeOtherData2 など) のベースに "Num0_" があります。コピーが完了すると、コードはターゲットの名前 (およびアドレス) を調べてセルに名前を付け、名前のベースを新しいベースに置き換え、コピー先のターゲット テーブルの番号を追加し、シートを置き換えます。住所に名前。
ここで助けが必要です。そのアドレスを変更する方法は、テンプレートとターゲットがパースペクティブ シートの同じセル アドレスを使用している場合にのみ機能します。彼らはそうではありません。(たとえば、Template1 テーブルには、B2 から C10 までのそれぞれに名前が付けられた値セルがあり、コピーのターゲット テーブルは F52 から G60 である可能性があります)。要するに、これらの名前をテンプレートにコピーする方法、またはターゲット テーブルに基づいてアドレス値をインクリメントする置換などを実行してセルに動的に名前を付ける方法を理解する必要があります #...4 つのターゲット テーブルがあることを思い出してください。静的なので、それらの領域にのみコピーします。私はVBAが初めてなので、提案や助けをいただければ幸いです。
注:テーブルのコピーは思い通りに機能します。セルにも名前を付けます (テンプレートとターゲット テーブルが同じローカル ワークシート セル アドレス (例: C2) を持っている場合)
'Declare Module level variables
'Variables for target tables are defined in sub's for each target table.
Dim cellName As Name
Dim newName As String
Dim newAddress As String
Dim newSheetVar
Dim oldSheetVar
Dim oldNameVar
Dim srcTable1
Sub copyTables()
newSheetVar = "TestSheet"
oldSheetVar = "Templates"
oldNameVar = "Num0_"
srcTable1 = "TestTableTemplate"
'Call sub functions to copy tables, name cells and update functions.
copySrc1Table
copySrc2Table
End Sub
'****there is another sub identical to this one below for copySrc2Table.
Sub copySrc1Table()
newNameVar = "Num1_"
trgTable1 = "SourceEnvTable1"
Sheets(oldSheetVar).Select
Range(srcTable1).Select
Selection.Copy
For Each cellName In ActiveWorkbook.Names
'Find all names with common value
If cellName.Name Like oldNameVar & "*" Then
'Replace the common value with the update value you need
newName = Replace(cellName.Name, oldNameVar, newNameVar)
newAddress = Replace(cellName.RefersTo, oldSheetVar, newSheetVar)
'Edit the name of the name. This will change any formulas using this name as well
ActiveWorkbook.Names.Add Name:=newName, RefersTo:=newAddress
End If
Next cellName
Sheets(newSheetVar).Select
Range(trgTable1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub