私は、Eval()を使ってMainに保存されている関数をいくつか取得し、それらをSheet2の値で評価しようとしています。これまでのMainと純粋なテキストの静的な参照は機能しますが、相対的なセルを参照する際に問題があります。別のシートから現在のシートとして式を評価する
理想的には、メインワークシートは静的参照と相対参照を結合し、その列の下の関数を表の行に適用します(この例ではA7、A8、...)。一重引用符はSQLを形成するためのものです。ここで実装しようとしている関数の1つです。
=CONCATENATE(Main!$B$30, "'", A7, "', '", B7, "', '", C7, "', '", D7, "', '", E7, "', '",F7, "', '",G7, "', '",H7, "', '",I7, "', '",J7, "', '", K7, "', ",$B$4,Main!$B$35)
問題は自分のEval関数にあると思います。アクティブシートのセル値としてA7を評価していません。私は、CurrentSheet!A7のような機能に変更する方法を検討していましたが、適切な構文を見つけることができませんでした。
Function Eval(Ref As Range)
Dim shCurrent As Worksheet: Set shCurrent = ActiveSheet
Application.Volatile
Application.ThisCell.Parent.Activate
Eval = Application.ThisCell.Parent.Evaluate(Ref.Formula)
shCurrent.Activate
End Function
は私がメイン!$ E $ 5はそれでExcel上記の機能を有する細胞であるところの私のテーブルの列を下にコピーし、このようにSheet2の中に、この評価関数を参照しています。
=EVAL(Main!$E$5)
ANSWER
私はbwynの例を取って、私の使用のためにそれを修正。これは、上記のExcel機能がVB関数のように見えるようになったことです。行番号をパラメータとして送信すると、呼び出し関数が最も一般的になり、スプレッドシートのマスターは必要に応じて1つの場所で「A」と「K」の値を拡張できます。
Function EvalInsert(rowNum As Integer)
Dim shCurrent As Worksheet: Set shCurrent = ActiveSheet
Dim shMain As Worksheet: Set shMain = Sheets("Main")
Dim insertClose As String: insertClose = "'));"
Dim openParen As String: openParen = "'"
Dim closeParen As String: closeParen = "', "
Application.Volatile
Set insertOpen = shMain.Range("B30")
Set tableId = shMain.Range("B33")
Set TableName = shCurrent.Range("B1")
Set insertValues = shCurrent.Range(Cells(rowNum, "A"), Cells(rowNum, "K"))
EvalInsert = insertOpen.Value
For Each c In insertValues.Cells
EvalInsert = EvalInsert & openParen & c.Value & closeParen
Next
EvalInsert = EvalInsert & tableId & TableName & insertClose
End Function
私はあなたのCONCATENATE式
=EvalInsert(ROW())
フィードバックありがとうございました!私は実際にCONCATENATEをかなり単純化しました。それは約10の変化する細胞を有する。私のオリジナルのCONCATENATEは "= CONCATENATE(Main!$ B $ 30、" '"、A7、"'、 ""、B7、 "'、" "、C7、"'、 ""、D7、 "'、'"、 「I7」、「I7」、「J7」、「 '」、「K7」、「K7」、「K7」、「K7」、 "、"、$ B $ 4、Main!$ B $ 35) "と表示されます。私は複数の数式を持っていますが、必要に応じてすべての関数を作成しています。私はこれを反映するために私のメインポストを更新しました、混乱のために申し訳ありません。 – Danielle
長い方の式では、行のみが変更されます。行番号を入力し、関心のある範囲(A7:K7)を選択し、セルをループして連結文字列を構築することができます。 – bwyn
これを試してみます。 :)私はExcelのVB式にはかなり新しいです、私は成功した場合私は戻って報告します。 – Danielle