ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Problem with UDF (https://www.excelbanter.com/excel-programming/428982-problem-udf.html)

[email protected]

Problem with UDF
 
I have this UDF:

Function FLOPSLAG(ops As Variant, num As Single, rn As Range, ofs As
Byte)
Dim Taeller As Long
Dim i As Long
i = 0
For Each c In rn.Columns(1).Cells
If c.Value = ops Then
i = i + 1
End If
Next c
If num - CInt(num) < 0 Or num < 1 Then
FLOPSLAG = CVErr(xlErrNum)
Exit Function
End If
If i < num Then
FLOPSLAG = CVErr(xlErrNA)
Exit Function
End If
Taeller = 0
For Each c In rn.Columns(1).Cells
If c.Value = ops.Value Then
Taeller = Taeller + 1
If Taeller = num Then
FLOPSLAG = c.Offset(0, ofs - 1).Value
Exit Function
End If
End If
Next c
End Function

Is there any way to build i kind of "target" function, so the UDF is
only updated if changes appears i column J in the spreadsheet.I
cannnot change it to a macro, as it has to be a part of a formula.

Jan

joel

Problem with UDF
 
Use the following

Col = Application.Caller.Column


" wrote:

I have this UDF:

Function FLOPSLAG(ops As Variant, num As Single, rn As Range, ofs As
Byte)
Dim Taeller As Long
Dim i As Long
i = 0
For Each c In rn.Columns(1).Cells
If c.Value = ops Then
i = i + 1
End If
Next c
If num - CInt(num) < 0 Or num < 1 Then
FLOPSLAG = CVErr(xlErrNum)
Exit Function
End If
If i < num Then
FLOPSLAG = CVErr(xlErrNA)
Exit Function
End If
Taeller = 0
For Each c In rn.Columns(1).Cells
If c.Value = ops.Value Then
Taeller = Taeller + 1
If Taeller = num Then
FLOPSLAG = c.Offset(0, ofs - 1).Value
Exit Function
End If
End If
Next c
End Function

Is there any way to build i kind of "target" function, so the UDF is
only updated if changes appears i column J in the spreadsheet.I
cannnot change it to a macro, as it has to be a part of a formula.

Jan


Jan Kronsell

Problem with UDF
 
The problem is, that this returns the columns the UDF id places in, or have
I misunderstood something?

In column A in one sheet I have this formula:
=flopslag(I2;COUNTIF($I$2:I2;I2);Opslag;2), where FLOPSLAG is my UDF.

Opslag is a named array in another sheet.

This formula is copied to about 60.000 rows in the sheet. WheneverIi type
something anywhere in the sheet the all the formulas are recalculated, which
takes about 30 minutes. The prolem is, that the output of the formulas only
change, if I type in column A, so I want to avoid recalculation if I change
anywhere else than column J.

Jan



Joel wrote:
Use the following

Col = Application.Caller.Column





joel

Problem with UDF
 
Then use a worksheet changge function rather than a formula. the problem is
when a formula is a function of another cell you can't tell which cell change
to trigger the worksheet re-calculation using the UDF. The worksheet change
will know which cell actually caused the worksheet to be caculated.

"Jan Kronsell" wrote:

The problem is, that this returns the columns the UDF id places in, or have
I misunderstood something?

In column A in one sheet I have this formula:
=flopslag(I2;COUNTIF($I$2:I2;I2);Opslag;2), where FLOPSLAG is my UDF.

Opslag is a named array in another sheet.

This formula is copied to about 60.000 rows in the sheet. WheneverIi type
something anywhere in the sheet the all the formulas are recalculated, which
takes about 30 minutes. The prolem is, that the output of the formulas only
change, if I type in column A, so I want to avoid recalculation if I change
anywhere else than column J.

Jan



Joel wrote:
Use the following

Col = Application.Caller.Column






Jan Kronsell

Problem with UDF
 
Maybe thats is the onkly solution.

Jan

Joel wrote:
Then use a worksheet changge function rather than a formula. the
problem is when a formula is a function of another cell you can't
tell which cell change to trigger the worksheet re-calculation using
the UDF. The worksheet change will know which cell actually caused
the worksheet to be caculated.

"Jan Kronsell" wrote:

The problem is, that this returns the columns the UDF id places in,
or have I misunderstood something?

In column A in one sheet I have this formula:
=flopslag(I2;COUNTIF($I$2:I2;I2);Opslag;2), where FLOPSLAG is my UDF.

Opslag is a named array in another sheet.

This formula is copied to about 60.000 rows in the sheet. WheneverIi
type something anywhere in the sheet the all the formulas are
recalculated, which takes about 30 minutes. The prolem is, that the
output of the formulas only change, if I type in column A, so I want
to avoid recalculation if I change anywhere else than column J.

Jan



Joel wrote:
Use the following

Col = Application.Caller.Column





All times are GMT +1. The time now is 02:57 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com