0

あるExcelシートから別のExcelシートにデータをコピーしようとしていますが、貼り付け先は変数である必要があります。

基本的に、私がやりたいことは、2 つの Excel シートを開くことです。最初のシートには、次のように座標を保存する文字列があります。

sCurrentAddress = Selection.Address(True, True, xlA1, True)

シート 2 に既に取り込まれているデータに基づいて、アルゴリズムが目的の貼り付け場所を適切に見つけ、これらの座標を次のように保存します。

sDestinationAddress = Selection.Address(True, True, xlA1, True)

次に、次のように、最初のシートの情報を 2 番目のシートに貼り付けます。

Selection.Copy (sDestinationAddress) しかし、エラー 1004: ランタイム エラー: 範囲クラスの選択メソッドが失敗しました。

今、私が取り組んでいる最初の値はたまたま A4 でした。マウスを「sDestinationAddress」の上に置くと、sDestinationAddress に保存されている値が '[exampleFile.xlsx]Sheet 1'!$A$4

次のように実際の値をプラグインしない限り、マクロは失敗します。

'Selection.Copy (Worksheets(1).Range("A4"))

sDestinationAddress を Selection.Copy の引数として使用するにはどうすればよいですか?


(長文でまだ言葉足らずで申し訳ありません。昨日は文字通り初めて Visual Basic を調べたときでした。)

アルゴリズムについて: 下の 6 行の情報にラベルを付けるために、144 の異なるヘッダーがあります。たとえば、Inventory_S1_1 という見出しの列から新しいスプレッドシートにデータを移動しています。この 1 つのシートの 'S1_1' は、もう 1 つのシートを意味します: S=Diamond、1 = Black、_1 = Player 1. したがって、アルゴリズムは、まだ処理されていないヘッダーを見つけます (ここでは、Inventory_S1_1 が最初のヘッダーであるとします)。 t を処理)、ヘッダーの下の列をコピーし、新しいスプレッドシートでプレーヤー 1 のブラック ダイヤモンドに対応する場所を見つけて、貼り付けます。テンプレートは手作業で作成されているため、貼り付けアルゴリズムは問題なく機能しますが、検索アルゴリズムは、ごちゃごちゃしたデータを検索するため、ヘッダーを探すのに迷います。

問題は、生データを含むシートに戻ることです。setを
呼び出す場所にマウスを合わせると、2 番目のヘッダーに移動してから、貼り付けた後、 これがまさに問題のある行であることがわかります。sCurrentAddress = SelectionsCurrentAddress= Inventory_S1_2sDestinationAddress = 0

Set rCurrentRange = .Find(What:=sCurrentAddress, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 私が従う

Application.Goto rCurrentRange, True ActiveCell.Select Selection.Offset(-1, 1).Select Set sCurrentAddress = Selection

次のヘッダーを探しているのはこの行です。正確な座標を使用しようとしていたとき、この .Find は機能しているように見えましたが、コピーされたマテリアルの最初の値である 0 (sDestinationAddress) の最初のインスタンスを .Finds します。常に 0 をコピーしてから最初の 0 を探しているため、次のヘッダーを見つけることはありません。

Range オブジェクトに .Address プロパティがあることはわかっていますが、この場合に役立つかどうかはわかりません。

4

1 に答える 1

1

アドレスを使用する代わりに、範囲を直接使用できます

Dim rngSrc as Range, rngDest as range

Set rngSrc = Selection
'do your destination-finding thing
Set rngDest = Selection

rngSrc.Copy rngDest 'no need for parentheses here

編集

範囲を選択して操作する必要はめったにありません。実際の範囲オブジェクトを変数に格納する方が、範囲アドレスを操作するよりもほとんどの場合優れています。

特定のセルまたは範囲の座標を保持する必要がある場合は、それを範囲変数に格納するのが最も簡単な方法です。

覚えておくべきことの1つは、範囲オブジェクトのデフォルトのプロパティが「値」であるということです。これは、コードをステップスルーするときに範囲変数にカーソルを合わせると範囲の値が表示される理由を説明します。表示されるのは値です。

.Copyセルの値をある場所から別の場所にコピーするだけの場合、2つの範囲が同じ次元であれば、使用する必要はありません。

rngDestination.Value = rngSource.Value 
于 2012-07-05T20:18:47.190 に答える