1

現在、キー/値のレイアウトを持つ「DataMap」というスプレッドシートがあります。キーは別のスプレッドシートとセルへの参照であり、値はユーザーが入力します。

たとえば、キー列には次の個別の参照が含まれる場合があります。

  • = Sheet1!B25
  • ='シート2'!B25
  • = TableName [TableRowName]

このページには「データ転送」というボタンもあります。

「データ転送」を押すと、マクロが実行され、キー列によって参照されるセルに値がコピーされます。

このページのポイントは、「DataMap」シートがあるという事実を除けば、Excelワークブックの残りの部分についての知識がなくても、サードパーティシステムからデータを注入できる単一の場所を持つことです。

現在、「DataMap」のキーと値のペアの各行をループし、次のコードを使用して「= Sheet1!B25」に値を挿入できます。

reference = Replace(Sheets("MAPPINGS").Range("A" & row).Formula, "=", "")
refSplit = Split(reference, "!")

Sheets(refSplit(0)).Range(refSplit(1)) = Sheets("MAPPINGS").Range("B" & row).Value

文字列置換を使用すると、「='Sheet 2'!B25」の場合も処理できます。

ただし、名前付きテーブルで重大な問題が発生しています。

出来ますか?または、代わりに、「キー」列によって参照されるセルへの値のコピーを具体的に処理するためのより良い方法の提案がありますか(参照の形式に関係なく)?

ありがとう

4

2 に答える 2

1
Dim sht As Worksheet
Dim ref As Range

Set sht = Sheets("MAPPINGS")

Set ref = Application.Evaluate(Replace(sht.Range("A" & Row).Formula, "=", ""))
ref.Value = sht.Range("B" & Row).Value
于 2012-12-04T06:02:11.357 に答える
0

下記参照。

Dim sht As Worksheet
Dim address As Range

Set sht = Sheet2

Set address = Range(Replace(sht.Range("A" & 5).Value, "=", vbNullString))
address.Value = sht.Range("B" & 5).Value

いくつかの提案:

  1. Sheets("MAPPINGS") をシートの内部名 (VBA ウィンドウにある) に変更して、Excel でシート名が変更されてもマクロに影響を与えないようにします。
  2. セル参照に「=」を追加しないでください。置換構文は必要ありません。
于 2012-12-04T09:12:41.163 に答える