0

マクロを使用してレポートを生成しています。構造から情報を取得し、数式を使用して、ワークシートのセルに入力するさまざまな数値を計算します。これらのワークシートは、マクロでも作成されます。ユーザーがセルをクリックしたときに、セルに入力した数値を計算するための数式がセルにとどまるようにするにはどうすればよいですか? つまり、ユーザーは、レポートの作成後にセルの式を変更することができます。

関数で新しいセルを作成する方法は次のcreateTS()とおりです。

Function createTS(ByRef index As Integer, ByRef wBStruct As wBStruct, ByRef gcBStruct As gcBStruct) As Worksheet
    '1) set up worksheet

    Set createTS = ThisWorkbook.Worksheets.Add(, ActiveSheet, 1, xlWorksheet)
    With createTS
        ThisWorkbook.VBProject.VBComponents(.CodeName).Name = cnDic(index)
        .Name = wBStruct.wTumorCellLine & "_" & wBStruct.wTypeBlock(index).projNum & "(" & gcBStruct.typeName & ")"
    End With
'...lots of code...
'this is where I populate the cells in the worksheet'
'...lots of code...
End Function 

関数内で、構造から特定のセルに情報をコピーする可能性があります (これらのセルには数式が含まれていませんが、他のセルの値を計算する元の数値です。つまり、他のセルの数式はマクロで作成された構造ではなく、他のセルを参照します)。ポイントは、数式をセルにとどめることができれば、他のセルしか参照できないということですか? (私の最初の信念)

セルの例は次のようになります。

createTS.Cells(10,x).Value = createTS.Cells(1,5).Value*100 ' x would be some integer 

cell (10,x)ユーザーが必要に応じて後で式を変更できるように、^ 式が内部に留まるようにするためのコードをどこに含めればよいでしょうか?

私がやりたいことに基づいて、これを行うためのより良い方法はありますか?

ちなみに、式で他のセルを参照するだけで私の仮定が正しいと仮定すると、式には定数のように非セルを参照する変数を含めることができx = 5.3445435ます5.3445435か? 上記の変数は別のセルでしょうか? どのような可能性がありますか?

レポートの生成が完了すると、マクロはシャットダウンすることに注意してください。

ありがとう!

4

2 に答える 2

2

入力した場合:

ws.Cells(1,x).Formula="=" & ws.Cells(1,1).Address & "*" & y

実際には、セルの値ではなく、セルの数式を作成します。

ワークシートの数式で使用する「変数」設定に関しては、最も簡単な方法は、セルに値を入れてから範囲に名前を付けることです。通常はセル アドレス (数式バーの横) が表示されている [名前ボックス] に名前を入力するか、リボンの [数式] > [名前の管理] で入力できます。
セルZ99に名前を付けた場合x、ワークシート関数はこれを名前で参照できます (例: =A1*x)

于 2014-08-19T19:49:28.483 に答える
0

ユーザー入力を 1 つのシートに保持し、数式とビジネス ロジックを別のシートに保持します。前者はユーザーが編集可能 (つまり、ロック解除) ですが、2 番目はロックされており、できれば非表示になっています。パスワードを使用するところまでは行きません。ユーザーが何を望んでいるのかを最もよく知っている場合があるためです。2 年後、あなたは別の会社で働いていて、誰かが数式を変更したいと思うかもしれません。シートを単に非表示にするのではなく、「非常に非表示」にしても害はありません。

絶対に同じシートに数式と入力を混在させる必要がある場合は、ロック/ロック解除されたセルを使用して、ユーザーにそのままの状態を維持させます。もう1つの方法は、データ検証を使用して、セル内の数式が想定どおりであることを確認することです。おそらく、「正しい」数式を名前付き範囲として保存し、それに対してチェックします。

于 2014-08-19T19:53:05.137 に答える