3

現在、セルに式があります:

=IFERROR(VLOOKUP(A:A,'Daily Report'!A:Z,2,FALSE),"")

=IFERROR(VLOOKUP(A:A,'Daily Report'!A:Y,7,FALSE)&", "&VLOOKUP(A:A,'Daily Report'!A:Y,8,FALSE)&", #"&VLOOKUP(A:A,'Daily Report'!A:Y,9,FALSE)&"-"&VLOOKUP(A:A,'Daily Report'!A:Y,10,FALSE)&", Singapore "&VLOOKUP(A:A,'Daily Report'!A:Y,11,FALSE),"")

列全体がこの式で暗号化されるように VBA に変換するにはどうすればよいですか?

私の数式は、常に私の Excel シートを使用する人に置き換えられます。

セルのロックを回避しているため、VBA を参照してこのアクションを実行しています。

編集:

大きい

Sub vlookup()
Dim LR As Long
LR = Cells(Rows.Count, "A").End(xlUp).Row
    Range("D2").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(C[-3],'Daily Report'!C[-3]:C[22],2,FALSE),"""")"
    Selection.AutoFill Destination:=Range("D2:D" & LR), Type:=xlFillDefault
End Sub

データの作り方例 09-02-18022013-03383-A のように A 列に入力すると、マクロが実行されて正しいデータが入力されます。

4

1 に答える 1

2

VBA を使用する必要がある場合、最も簡単な方法は、影響を受けるセルに数式を書き直すことです。

まず、これをワークシートのモジュールに配置します。これにより、列 A が変更されるたびにマクロが起動します。

Private Sub Worksheet_Change(ByVal Target as Range)
If Not Intersect(Target,Me.Range("A:A")) Is Nothing Then
Application.EnableEvents = False   'to disable infinite loop
    InsertFormula
Application.EnableEvents = True
End If
End Sub

次に、これを通常のコード モジュールに配置します。

Sub InsertFormula()
Dim rng as Range   'this will set the range in which you want this formula to appear
Dim cl as Range    'cell iterator within rng variable
Dim strFormula1 as String  `string to hold the formula text

set rng = Range("B2:B39")   'Change this range to the desired range
strFormula = "=IfError(Vlookup(A:A,'Daily Report'!A:Z,2,False),"")"

For Each cl in rng
    cl.Formula = strFormula
Next

End Sub

したがって、通常の数式をプログラムで挿入するのは非常に簡単です。

問題は、これらのセルを強制/上書きする頻度はどれくらいですか? ワークブック ファイルが開かれたとき、シートの値が変更されたとき、変更したくないセルが手動で変更されたときなど、このマクロを「イベント」に関連付けることができます。

2 番目の数式で同じことを行うことができます。別の範囲変数 (例: Dim rng2 as Range) と数式テキストを保持する別の文字列変数(例: ) を追加するだけstrFormula2です。

または、純粋に vba で「数式を書き直す」こともできます。上記のサブルーチンを含むコード モジュールにこの関数を置き換えcl.Formula = strFormulaて追加します。cl.Value = MyLookupFormula

Function MyLookupFormula() as Variant
'Performs equivlanet to worksheet function
If Not IsError(Application.WorksheetFunction.Vlookup(Range("A:A"),Sheets("Daily Report").Range("A:Z"),2,False)) Then

myLookupFormula = (Application.WorksheetFunction.Vlookup(Range("A:A"),Sheets("Daily Report").Range("A:Z"),2,False))

Else: myLookupFormula = vbNullString
End Function

ただし、セルには数式がないため、このマクロをトリガーする頻度/イベントについて詳しく知る必要があります (数式/計算は、ユーザーまたはイベントトリガーによって要求された場合にのみメモリ内で実行されます)。

于 2013-02-19T01:16:46.923 に答える