式として使用されたときにUDFが3回実行されないようにする方法を知りたいと思います。式で使用するとvba UDFが3回実行されます
エクセル2013(ビルド:15.0.4859.1002)を
私は「table_Sequence」という名前のエクセルListObjectに対する2つの値のセットを検証する必要があり、ユーザー定義関数を構築しました。 値が存在する場合、関数は対応する文字を返します。
私は基本的に、特定のルールに基づいてSAP FLOC構造を構築するのに役立つツールを作成しようとしています。そのうちの1つは、レベル5は3桁のコードで、タブ「5機能リスト」からの参照番号と、「装備」列「M」に入力されたすべてのカスタムテキストの固有の文字が含まれています。
私の考えは、キーがすでに存在するかどうかをチェックし、そうでない場合は、table_Sequenceで作成することでした。
コードは正常に動作します。
しかし... このUDFを使用してセルを更新するたびに3回実行されます !!! 私は、この数式を列全体にコピーしたい場合、依存関係が更新されるたびにひどいラグが生じることに気づいています。
何が起こっているのか、どうやってこれを防ぐことができるのか誰かが私に助けられますか?
任意の助けが理解されるであろう、
table_Sequenceは次のようになります。
Struct |CustomText |Letter
---------------- |------ |---
2151-05-01-22-23 |#1 L1 |B
2151-05-01-22-86 |#2 L1 |A
だからセルに私はこのようなUDFを呼び出す:
=GetNextSequence("2151-05-01-22-23";"#1 L1")
そしてそれは、 "B" を返しますどっちがいい。この問題に閉鎖を必要とする人のために
'**************************************************************************************************
'** Name: GetNextSequence
'** Purpose: Assign next sequence for current structure element
'**
'** Input: Current Cell
'** Level Number at which we may stop the structure
'**
'** Output: Sequence string
'**
'**************************************************************************************************
Public Function GetNextSequence(Struct As String, CustomText As String) As String
Dim i As Long
Dim Result As Variant
Dim suffix As String
Dim NewRow As Range
Dim tbl As ListObject
Application.EnableEvents = False
Application.ScreenUpdating = False
'** Filter and sort sequence table
Set tbl = ActiveWorkbook.Worksheets("Sequence").ListObjects("table_Sequence")
tbl.Sort.SortFields.Clear
tbl.Sort.SortFields.Add Key:=Range("table_Sequence_1[Letter]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With tbl.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
tbl.Range.AutoFilter Field:=1, Criteria1:=Struct
tbl.Range.AutoFilter Field:=3, Criteria1:=CustomText
'** Store Last letter used
suffix = tbl.ListRows(1).Range.Cells(1, 3).Value
If tbl.ListRows.Count = 0 Then
'** Increment sequence
suffix = Chr(Asc(suffix) + 1)
'** Add row and return new letter
Set NewRow = tbl.ListRows.Add.Range
iColumn = tbl.ListColumns("Letter").Index
NewRow.Cells(1, 3).Value = suffix
NewRow.Cells(1, 1).Value = Struct
NewRow.Cells(1, 2).Value = CustomText
End If
GetNextSequence = suffix
Application.EnableEvents = True
Application.ScreenUpdating = True
End Function
[該当するコードを含むように質問を編集してください](http://stackoverflow.com/posts/41128718/edit)。多くの人がランダムなマクロ対応のExcelファイルをダウンロードして開かなければならないとは思っていません。もしそうであれば、この質問は他の誰かに似た問題を引き起こしません。 – Comintern
パブリックフォーラムからマクロが有効になっているブックをダウンロードしないものはたくさんあります。コードを含めて、元の投稿でどのように使用しているか説明してください。 –
私はあなたのマクロ対応ウイルスをダウンロードしていないので、誰もすべきではありません。それはこのサイトの仕組みではありません。 –