2012-11-12 10 views
6

私は1つのセルを受け取り、(NavigateArrow分析を介して)ブック内のすべての扶養家族を識別し、その範囲の場所を配列に追加するVBAコードを作成しました。ここから私は、それぞれの依存を更新して元の単一セルへの参照を別の単一の指定セルに変更したいと考えています。VBA内の別のセル参照との扶養家族の置き換え

ここで私が抱えている特に難しいのは、元のセルへの参照が式の最初、中間、または終わりにあり、行/列/どちらもアンカーされている可能性があり、別のワークシート上にある可能性があり、その前にワークシート参照があるなどなどです。したがって、これらの潜在的な違いのために、依存する各セルを簡単に見つけて置き換えることはできません。各セル参照に保持されている元のアンカリング。

この問題に対して、エレガントな、または洗練されたVBAソリューションがありますか?

+1

(相対/固定行/固定行/固定行+ col)を置き換える必要がある参照/アドレスの4種類しかないように見えます。それに応じて交換住所) –

+0

ええ、私は他の方法を見ることができません、それは少しclunkyように残念です。ご協力いただきありがとうございます! –

+0

私はそれらが唯一の変種ではないと思います - 名前付き範囲も含めませんか?それとも別々の参照として数えられていますか? –

答えて

1

正規表現、つまりRegexpは私が思っているものです。

次のパターン

([A-Z0-9]*)!(\${0,1})([A-Z]{1,3})(\${0,1})([0-9]*) 

"シート1!A $ 1"、 "シート1!A1"、 "シート1!$ A $ 1"、 "シート1!$ A1" のようなものにマッチします

説明:

あなたは簡単にあなたが望むものに一致するようにそのパターンを変更することができます。特に、([A-Z0-9] *)!(\ $ {0,1})B(\ $ {0,1})1は、B($) 文字列操作でRegexpパターンを構築してください。

あなたは、これはあなたの目標を達成するために、すべてのツールを与える必要があります(ツール>リファレンス)

次のコードを試してみてください「5.5は、Microsoft VBScriptの正規表現」参照する必要があります

Sub ReplaceReference() 
' Reference: Microsoft VBScript Regular Expressions 5.5 

Dim RegEx As Object 
Set RegEx = New RegExp 

Dim s As String 

' Here I have hardcoded the reference to the original cell for demonstration purposes 
s = "Sheet1!$AB$2" 


' Replacement: New sheetname, New Column, new row number 
Dim NewCol As String, NewRow As String 
NewCol = "C" 
NewRow = "10" 

Dim NewSheet As String 
NewSheet = "Sheet2" 


With RegEx 
    .Pattern = "([A-Z0-9]*)!(\${0,1})([A-Z]{1,3})(\${0,1})([1-9]*)" 
    .IgnoreCase = True 
    .Global = True 
End With 


Debug.Print RegEx.Replace(s, NewSheet & "!" & "$2" & NewCol & "$4" & NewRow) 


End Sub 

乾杯、 Julien

0

VBAをカットしてソースセルを貼り付けてみませんか?次に、Excelは、その栄光のある多様なセル参照を調整します。

参照を含むいくつかのセルを作成し、マクロレコーダーを使用して、生成されたVBAでセルの選択、内容の切り取りとコピーが発生する可能性を確認しました。予想通り、次のように振る舞いは、次のとおりです。これは、次のワークシートに適用されます

Range("A1").Select 
Selection.Cut 
Range("B1").Select 
ActiveSheet.Paste 

A1 1 
A2 =A1 
A3 =$A$1 
A4 =1+A1 
A5 =1+A1+1 

マクロを実行した後、すべての参照がB1先のセルを指します。

関連する問題