web-dev-qa-db-ja.com

セルの数式を設定するVBA

(動的に作成された)シート名と固定セルアドレスを使用して、セルの数式を設定しようとしています。私は次の行を使用していますが、機能していないようです:

"=" & strProjectName & "!" & Cells(2, 7).Address

なぜこれが機能しないのか、正しい方向に進むのかについてのアドバイスは大歓迎です。

前もって感謝します

6
Ryuu

あなたのケースで何が機能していないのかはわかりませんが、次のコードはセルA1に数式を入力し、セルG2の値を取得します。

strProjectName = "Sheet1"
Cells(1, 1).Formula = "=" & strProjectName & "!" & Cells(2, 7).Address

strProjectNameが参照するワークブックとワークシートは、この式が配置される時点で存在している必要があります。 Excelはすぐに数式を評価しようとします。ワークブックが存在するまで自動再計算をオフにすることで、その発生を止めることができる場合があります。

16
Stewbob

試してください:

.Formula = "='" & strProjectName & "'!" & Cells(2, 7).Address

ワークシート名(strProjectName)にスペースが含まれる場合、式文字列に単一引用符を含める必要があります。

それでも解決しない場合は、特定のエラーまたは障害に関する詳細情報を提供してください。

更新

コメントでは、スペースをアンダースコアに置き換えていることを示しています。おそらくあなたは次のようなことをしています:

strProjectName = Replace(strProjectName," ", "_")

ただし、その変更をWorksheet.Nameプロパティにプッシュしていない場合は、これらが発生することが予想されます。

  1. ファイル参照ダイアログが表示されます
  2. 式は#REFエラーを返します

両方の理由は、存在しないワークシートへの参照を渡しているため、#REFエラーが発生するためです。ファイルダイアログは、そのシート名doesが存在するファイルを指すことにより、その参照を修正できるようにする試みです。キャンセルすると、#REFエラーが発生します。

だからあなたがする必要があります:

Worksheets(strProjectName).Name = Replace(strProjectName," ", "_")
strProjectName = Replace(strProjectName," ", "_")

次に、数式が機能するはずです。

4
David Zemens

Cells(1、1).Formulaが私の場合のように1004エラーを返す場合、それを次のように変更します。

Cells(1, 1).FormulaLocal
1
Eneas Gesing

住所を直接作成する場合は、ワークシートが存在する必要があります。

自動再計算をオフにすることはあなたを助けたいです:)

しかし...あなたは間接的に価値を得ることができます...

.FormulaR1C1 = "=INDIRECT(ADDRESS(2,7,1,0,""" & strProjectName & """),FALSE)"

StrProjectNameシートが存在しないため、数式の挿入時に#REFエラーが返されます。

ただし、このワークシートが表示された後、Excelは数式を再計算し、適切な値が表示されます。
デメリット:トラッキングが行われないため、セルを移動したり、ワークシート名を変更したりしても、直接アドレス指定の場合のように数式は変更に合わせて調整されません。

0
Carnifex