1

name1名前付き範囲を参照して、名前付き範囲を参照する別の Excel シートの同様のサイズのセル範囲に等しいセル範囲を設定したいと思いますname2Sheet1対応するセルが現在等しいものとセルを等しくしたいSheet2ので、.value プロパティを使用できません。

Sheets("Sheet1").Range("name1").Offset(0, 1).Resize(15, 5) = Sheets("Sheet2").Range("name2").Offset(0, 1).Resize(15, 5).value

ただし、値を使用したくありません。私が必要とすることを行うためのこのような簡単な方法はありますか? いくつかのフォーラムを検索しましたが、これを行う良い方法が見つかりません。For eachR1C1命名を使用する必要がありますか? 繰り返しsheet1ますが、上のセルは、上の相対セルの値が何であれ等しくなければなりませんsheet2(範囲は同じサイズです)。だから、例えば。セルSheet1!A1には式があり=Sheet2!A1ます 。

4

2 に答える 2

1

次のようなことを試すことができます。

Sheets("Sheet1").Range("name1").Offset(0, 1).Resize(15, 5).FormulaR1C1 = "=Sheet2!R[0]C[0]"

アップデート

範囲 (name1 と name2) が異なる位置にある場合は、それに応じて数式を調整する必要があります。

Dim nRowOffset As Long
Dim nColOffset As Long
Dim sFormula As String
nRowOffset = Sheets("Sheet2").Range("name2").Row - Sheets("Sheet1").Range("name1").Row
nColOffset = Sheets("Sheet2").Range("name2").Column - Sheets("Sheet1").Range("name1").Column
sFormula = "=Sheet2!R[" & nRowOffset & "]C[" & nColOffset & "]"
Sheets("Sheet1").Range("name1").Offset(0, 1).Resize(15, 5).FormulaR1C1 = sFormula
于 2013-04-23T12:41:05.677 に答える
1

私はこれを少ししかテストしていないので、それほど堅牢ではないかもしれません。

注:このサブルーチンは、新しい (または既存の) モジュールに配置する必要があり、シートまたは thisworkbook モジュールのいずれにも配置する必要はありません。

これはマクロであるため、ワークシートから UDF として呼び出すことはできません。また、引数があるため、直接呼び出すことはできません。

コードを使用するには、別のサブを作成してこれを呼び出すか、イミディエイト ウィンドウから直接呼び出す必要があります。

Sub RunCode()
    Main "Name1", "Name2" ' you could run this line in the immediate/debug window
End Sub

サブRunCodeは、ワークブックのマクロ メニューで利用できるはずです。

Sub Main(ByVal Name1 As String, ByVal Name2 As String)
Dim Cell As Long
Dim Range1 As Range: Set Range1 = ThisWorkbook.Names(Name1).RefersToRange
Dim Range2 As Range: Set Range2 = ThisWorkbook.Names(Name2).RefersToRange
' check to make sure Name1 and Name2 are the same size
If Range1.Cells.Count = Range2.Cells.Count Then 
    If Range1.Rows.Count = Range2.Rows.Count Then
        If Range1.Columns.Count = Range2.Columns.Count Then
            ' populate the cells with the formula
            For Cell = 1 To Range1.Cells.Count
                Range2.Cells(Cell).Formula = "=" & Range1.Worksheet.Name & "!" & Range1.Cells(Cell).Address
            Next Cell
        End If
    End If
End If

End Sub

関数へのもう少しカスタマイズ可能なインターフェイスが必要な場合は、次のコードが役立ちます。マクロを実行するRunCode2と、渡す 2 つの名前を入力するよう求められます。Main

Public Function nameExists(ByVal Name As String) As Boolean
Dim Result As Boolean: Result = fasle
Dim Item As Variant
For Each Item In ThisWorkbook.Names
    If Item.Name = Name Then
        Result = True
        Exit For
    End If
Next Item
nameExists = Result
End Function

Sub RunCode2()
Dim Response As Variant
Dim Name1, Name2 As String
Response = Application.InputBox(Prompt:="Name 1", Type:=2)
If VarType(Response) = vbBoolean Then
    Debug.Print "RunCode2 - User Canceled Name 1 Selection"
    Exit Sub
Else
    If nameExists(Response) = False Then
        MsgBox "Name [" & Response & "] Not Found", vbOKOnly
        Exit Sub
    Else
        Name1 = Response
    End If
End If
Response = Application.InputBox(Prompt:="Name 2", Type:=2)
If VarType(Response) = vbBoolean Then
    Debug.Print "RunCode2 - User Canceled Name 2 Selection"
    Exit Sub
Else
    If nameExists(Response) = False Then
        MsgBox "Name [" & Response & "] Not Found", vbOKOnly
        Exit Sub
    Else
        Name2 = Response
    End If
End If
Main Name1, Name2
End Sub
于 2013-04-23T12:41:18.267 に答える