Tag: 用户定义的函数

插入行时UDF不更新

我对UDF很新,我不确定它们是如何运作的。 我的函数返回正确的信息,只要不插入新的行。 就好像headRng在首次使用时被保存到内存中,即使插入了新行也不会被更新。 我怎样才能解决这个问题? 另外。 我的function似乎循环了很多次。 在我的代码中,你会看到在1000行之后出现的msgbox。 所以我知道它至less循环1000次。 不知道为什么它循环。 忘了我有另一个工作簿打开这个相同的function,导致了1000+循环。 如何使用它的例子: https : //i.imgur.com/zRQo0SH.png Function StraightLineFunc(headRng As Range, dataRng As Range) As Double Application.Volatile True Dim arrCntr As Integer Dim arr() As Variant Dim rowOffset As Integer Dim cntr As Integer Dim stdvTotal As Double stdvTotal = 0 cntr = 0 arrCntr = 1 For […]

UDF来评估表示公式的文本string

这似乎是一个非常简单的问题,但我只是缺乏知识来回答,并且在Google上search时找不到答案。 据我所知,当您在Excel中的单元格中键入公式时,如=SUM(B1:B3) ,您input一个文本string。 按Enter键通过让Excel知道它是一个公式来计算这个文本string。 在我的情况下,我不input文本string,它是在一个单元格中生成,如下所示: A1包含'=SUM(x:y) (注意' ,即作为文本) A2包含=SUBSTITUTE(SUBSTITUTE(A1,"x","B1"),"y","B3") 在A2返回=SUM(B1:B3) 作为文本string 我想要一个像A3 “ EVALUATE() ”那样的UDF,它与在A3键入函数并按Enter或键相同。 A3包含=EVALUATE(A2) ,它与=EVALUATE("=SUM(B1:B3)") (在SUM内可能不是=符号) A3然后返回以文本forms存储的公式的输出,就像直接input=SUM(B1:B3)一样 我意识到在这个阶段习惯性地给出示例/尝试的代码。 不幸的是我缺乏知识是解决问题的根本,所以我担心我的代码几乎没有什么可提供的。 无论如何,我发布它,或至less一个骨架: Sub EVALUATE_Test() 'a temporary macro to run the EVALUATE function with an input text of "B1^2" Debug.Print EVALUATE("B1^2") End Sub Function EVALUATE(InputFormula As String) 'defining the UDF and Input – I'm not sure […]

如何创build用户定义的公式,而不是input长string

我正在尝试将以下公式分配给用户定义的公式。 =串连(文本(A2, “000000”), “ – ”,文本(A3, “000”)) 我需要将文本部分进行格式化,并在连字符之前将前导零取为6位数,在连字符后取3位数。 我想把它分配给Format(Selection1,Selection2),其中select1将是A2,select2将是A3,这样我就可以避免必须一直输出整个string。

为什么这个ISVISIBLE()自定义函数返回#VALUE! 直到我按回来?

这个公式来判断单元格是否可见的答案暗示了这个函数来说明一个单元格是否可见: Function isvisible(rng As Range) isvisible = Not (rng.EntireColumn.Hidden Or rng.EntireRow.Hidden) End Function 这个函数和INDIRECT()很好地结合在一起。 我在A1有一个单元格引用,我正在使用isvisible(INDIRECT(A1)) 。 但是,当我隐藏A1所指的单元格(在另一个表单上)时,我得到#VALUE! 直到我进入配方栏并打回来。 我的问题是: 为什么会这样呢? 如何防止#VALUE! 出现错误? 编辑: 通过点击一系列macros代码checkbox来隐藏/取消隐藏行,如下所示: Private Sub CheckBox1_Click() Rows("13:17").Hidden = Not Rows("13:17").Hidden End Sub

删除相互包含的单词,留下更长的单词

我正在寻找一个macros(最好是一个函数),将单元格内容,拆分成单独的单词,比较他们,并删除较短的单词。 这是一个我想要的输出图像(我需要去除的字符): 我试图自己写一个macros,但它不能正确工作,因为它没有采取最后的措辞,有时删除不应该被删除的东西。 另外,我必须在5万个左右的单元上做这个,所以一个macros需要很多时间来运行,这就是为什么我更喜欢它是一个函数。 我想我不应该使用replacefunction,但我不能做任何其他工作。 Sub clean_words_containing_eachother() Dim sht1 As Worksheet Dim LastRow As Long Dim Cell As Range Dim cell_value As String Dim word, word2 As Variant Set sht1 = ActiveSheet col = InputBox("Which column do you want to clear?") LastRow = sht1.Cells(sht1.Rows.Count, col).End(xlUp).Row Let to_clean = col & "2:" & col & LastRow […]

Excel VBA UDF计数Ifs与数据转换

我试图用Countifs写一个UDF。 我希望用户能够select标准1(保存为X1)和月份(保存为month_X)。 查找表中的月份是在数字中,所以我想要函数将月份名称转换为月份数字。 这工作 – 但有没有更好的方式来转换数据? 即更less的代码行? Function CountIF_Custom(X1 As String, Month_X As String) Dim MonthArray(1 To 12, 1 To 2) As Variant MonthArray(1, 1) = "January" MonthArray(2, 1) = "February" MonthArray(3, 1) = "March" MonthArray(4, 1) = "Apr" MonthArray(5, 1) = "May" MonthArray(6, 1) = "June" MonthArray(7, 1) = "July" MonthArray(8, 1) = "August" […]

Excel VBA – 确定数组UDF的列或行目标

我有一个简单的Excel UDF的质量值转换为摩尔分数。 大多数时候,输出将是一个列数组(n行1列)。 从VBA环境中,我如何确定工作表中目标单元格的大小,以确保它应该以n行1列与n列1行的顺序返回? Function molPct(chemsAndMassPctsRng As Range) Dim chemsRng As Range Dim massPctsRng As Range Dim molarMasses() Dim molPcts() Set chemsRng = chemsAndMassPctsRng.Columns(1) Set massPctsRng = chemsAndMassPctsRng.Columns(2) chems = oneDimArrayZeroBasedFromRange(chemsRng) massPcts = oneDimArrayZeroBasedFromRange(massPctsRng) 'oneDimArrayZeroBasedFromRange is a UDF to return a zero-based array from a range. ReDim molarMasses(UBound(chems)) ReDim molPcts(UBound(chems)) totMolarMass = 0 For chemNo […]

仅用于VBA用户定义的函数在工作簿中的一个工作表上工作

我有下面的代码,从Excel中的表创build一个数组,然后根据input的多个条件search该数组。 Function output_string(id As Long, dt As Date, descr As String) 'set variables Dim myarray As Variant Dim ws As Worksheet Dim col_count As Integer Dim row_count As Long Dim source_range As Range 'set worksheet Set ws = Worksheets("Data Store") dt = DateValue(app_dt) 'set up column and row counts for populated range col_count = ws.Range("A2").End(xlToRight).Column […]

如何在Excel中创build一个函数来validation使用正则expression式的单元格

我有一个包含关税代码的长电子表格,我需要validation,我想用RegEx创build一个函数来自动执行(这是我在接下来的几个月里必须做的日常任务,我想自动化) 例如在A列中,我有以下数据: 码 1000.00.00 1000.10.00 1020.12.99 … 但有些时候,这些代码被拼写错误(1020..23.99或1020.23.124),我想在每个单元格中用这样的函数在列B中进行validation: =isvalid_function(A2,"^\d{3,4}\.\d{2}\.\d{2}$") 结果得到TRUE或FALSE。

excel可以VBA UDF输出格式化文本吗?

有没有办法从格式化UDF返回string? 例如,我想先说两个字是大胆的,其余的不是。