Excel(ESteel)自定义函数源代码
- 格式:doc
- 大小:170.50 KB
- 文档页数:24
如何在EXCEL中设计自定义函数在日常使用Excel时,虽然内置的函数种类繁多,但有时依旧不能满足特定需求。
这时,自定义函数就显得尤为重要。
在Excel中创建自定义函数不仅能提高工作效率,还能将复杂的计算变得简单易懂。
下面将详细介绍如何在Excel中设计自定义函数。
理解VBA环境在Excel中自定义函数,很大程度上需要依靠VBA (VisualBasicforApplications)这一强大的编程语言。
进入VBA环境非常简单:打开Excel,按下Alt+F11键,这将打开VBA编辑器;在左侧的项目资源管理器中,右键点击“VBAProject(你的Excel文件名)”,选择“插入”->“模块”;这时,你将看到一个新模块的窗口可供编码。
编写基本的自定义函数自定义函数的基本结构相对简单。
以下是一个计算两个数字和的基本示例:FunctionAddNumbers(num1AsDouble,num2AsDouble)AsDoubleAddNumbers=num1+num2EndFunction这个函数的功能非常直接,它接受两个数字作为参数并返回它们的和。
只需将上述代码复制到VBA编辑器中的模块窗口内。
使用自定义函数在VBA中设计好函数后,可以直接在Excel工作表中使用它。
就拿前面的例子来说,只需在单元格中输入:=AddNumbers(3,5)Excel会返回8。
这意味着你已经成功创建并使用了自定义函数。
参数与返回值设计自定义函数时,可根据需要增加多个参数。
通过合理命名参数,可以提高函数的可读性。
例如,假设我们想设计一个计算矩形面积的函数,可以这样写:FunctionCalculateArea(lengthAsDouble,widthAsDouble)AsDoubl eCalculateArea=length*widthEndFunction通过名称,我们能更容易理解这个函数的功能。
返回值类型与参数类型的一致性也很重要。
Excel高级技巧使用VBA编写自定义函数Excel是一款功能强大的电子表格软件,通过使用VBA(Visual Basic for Applications)编写自定义函数,可以进一步拓展Excel的功能和灵活性。
本文将介绍一些Excel高级技巧,以及如何使用VBA编写自定义函数来实现更复杂的计算和数据处理需求。
一、VBA简介VBA是一种基于Visual Basic语言的宏编程语言,用于扩展Microsoft Office套件中的各种应用程序的功能,包括Excel。
通过使用VBA,我们可以编写自己的功能代码,以实现定制化的功能。
二、使用VBA编写自定义函数的步骤1. 打开Excel,并按下ALT + F11快捷键,打开Visual Basic编辑器界面。
2. 在VBA编辑器界面中,选择插入(Insert)菜单,然后选择模块(Module)。
3. 在新建的模块中,编写自定义函数的VBA代码,例如:```vbaFunction MyFunction(ByVal num1 As Double, ByVal num2 As Double) As DoubleMyFunction = num1 * num2End Function```上述代码定义了一个名为MyFunction的自定义函数,接受两个参数num1和num2,并返回它们的乘积。
4. 保存VBA代码,并返回Excel界面。
5. 在Excel表格中的某个单元格中输入`=MyFunction(2, 3)`,按下回车键,该单元格将显示结果6,即2和3的乘积。
通过以上步骤,我们成功地使用VBA编写了一个自定义函数,并在Excel中调用并使用它。
三、自定义函数的应用示例自定义函数可以用于更复杂的计算和数据处理需求。
以下是一个实际示例,展示了如何使用VBA编写自定义函数。
假设我们有一个Excel表格,其中包含了学生的成绩信息,包括科目和分数。
我们想计算每个科目的平均分。
visual studio excel使用的自定义函数
在Visual Studio中,Excel使用的自定义函数可以通过VBA(Visual Basic for Applications)编写。
以下是一个简单的示例,展示了如何创建一个自定义函数:
1. 打开Excel,点击“开发者”选项卡,如果没有显示,请先在“文件”>“选项”>“自定义功能区”中启用。
2. 点击“Visual Basic”按钮,打开Visual Basic for Applications编辑器。
3. 在代码模块中,编写以下自定义函数:
```vba
Function MyCustomFunction(inputValue As Variant) As Variant ' 你的函数逻辑here
' 例如,将输入值乘以2
MyCustomFunction = inputValue * 2
End Function
```
4. 保存并关闭Visual Basic编辑器。
5. 返回Excel,在单元格中输入以下公式:
```
=MYCUSTOMFUNCTION(A1)
```
其中,A1是您想要调用自定义函数的单元格。
6. 按Enter键,即可看到自定义函数的计算结果。
注意:你可以根据需要修改上述示例中的函数逻辑,以实现你想要的功能。
在编写自定义函数时,请确保遵循Excel的命名规范,并以“My”开头。
这样可以避免与内置函数冲突。
Public Function DJ( 钢筋直径As Single, 最小搭接直径As Single, 搭接类别As String, 机械接头As String, 锚固As Single)Dim x As Integer, X1 As Integer, X2 As Integer, a As IntegerIf 钢筋直径> 0 Thena = 1Elsea = 0End IfIf 钢筋直径> 最小搭接直径ThenIf 机械接头= " 双面焊10D" ThenDJ = 钢筋直径+ 2End IfIf 机械接头= "单面焊5D" ThenDJ = 钢筋直径/ 2 + 2End IfIf 机械接头= "直螺纹" ThenDJ = 0End IfEnd IfIf 钢筋直径<= 最小搭接直径ThenIf 搭接类别= "腰筋G" ThenDJ = 钢筋直径* 1.5: x = 1End IfIf 搭接类别= "搭接100%" Or 搭接类别= "构造柱" ThenDJ = MAX( 锚固* 1.6, 30, 0, 0) * a: X1 = 1End IfIf 搭接类别= "Q" Or 搭接类别= "Z" Or 搭接类别= "搭接25%" ThenDJ = MAX( 锚固* 1.2, 30, 0, 0) * a: X2 = 1End IfIf x + X1 + X2 = 0 Or 搭接类别= "" ThenDJ = MAX( 锚固* 1.4, 30, 0, 0) * aEnd IfEnd IfEnd FunctionPublic Function MG( 抗震级别As Single, 钢筋级别As Single, 砼号C As Single, 钢筋直径As Single) Dim j As SingleDim k As SingleDim g As SingleIf 钢筋直径>= 28 ThenIf 钢筋级别>= 2 Then j = 1.1Elsej = 1End If Else j = 1 End IfIf 抗震级别 <= 2 Then k = 1.15 End IfIf 抗震级别 = 3 Then k = 1.05 End IfIf 抗震级别 = 4 Then k = 1 End IfIf 钢筋级别 = 1 And 抗震级别If 砼号 C <= 20 Then g = 45End IfIf 砼号 C = 25 Then g = 39 End IfIf 砼号 C = 30 Then g = 35 End IfIf 砼号 C = 35 Then g = 32 End IfIf 砼号 C = 40 Then g = 29 End IfIf 砼号 C = 45 Then g = 28 End IfIf 砼号 C = 50 Theng = 26 End IfIf 砼号 C = 55 Then g =25 End IfIf 砼号 C >= 60 Then g= 24 End IfEnd IfIf 钢筋级别 = 1 And 抗震级别 If 砼号 C <= 20 Theng = 41 End IfIf 砼号 C = 25 Then g = 36 End IfIf 砼号 C = 30 Then g = 32<= 2 Then= 3 ThenIf 砼号C = 35 Theng = 29End IfIf 砼号C = 40 Theng = 26End IfIf 砼号C = 45 Theng = 25End IfIf 砼号C = 50 Theng = 24End IfIf 砼号C = 55 Then g = 23 End IfIf 砼号C >= 60 Then g = 22 End If End IfIf 钢筋级别= 1 And 抗震级别If 砼号C= 4 Then<= 20 Then g = 39 End IfIf 砼号C = 25 Theng = 34End IfIf 砼号C = 30 Theng = 30End IfIf 砼号C = 35 Theng = 28End IfIf 砼号C = 40 Theng = 25End IfIf 砼号C = 45 ThenEnd IfIf 砼号C = 50 Theng = 23End IfIf 砼号C = 55 Then g = 22 End IfIf 砼号C >= 60 Theng = 21End IfEnd IfIf 钢筋级别= 2 And 抗震级别If 砼号C <= 20 Then g = 44 End If If 砼号C = 25 Theng = 38End IfIf 砼号C = 30 Theng = 33End IfIf 砼号C = 35 Theng = 31End IfIf 砼号C = 40 Then g = 29End IfIf 砼号C = 45 Then g = 26End IfIf 砼号C = 50 Theng = 25End IfIf 砼号C = 55 Then g =24 End IfIf 砼号C >= 60 Theng = 24End IfEnd IfIf 钢筋级别= 2 And 抗震级别If 砼号C <= 20 Theng = 40End IfIf 砼号C = 25 Theng = 35End IfIf 砼号C = 30 Theng = 31End IfIf 砼号C = 35 Then <= 2 Then = 3 ThenEnd IfIf 砼号C = 40 Theng = 26End IfIf 砼号C = 45 Theng = 24End IfIf 砼号C = 50 Theng = 23End IfIf 砼号C = 55 Theng = 22End IfIf 砼号C >= 60 Theng = 22End IfEnd IfIf 钢筋级别= 2 And 抗震级别= 4 Then If 砼号C <= 20 Theng = 38End IfIf 砼号C = 25 Theng = 33End IfIf 砼号C = 30 Theng = 29End IfIf 砼号C = 35 Theng = 27End IfIf 砼号C = 40 Theng = 25End IfIf 砼号C = 45 Theng = 23If 砼号C = 50 Theng = 22End IfIf 砼号C = 55 Theng = 21End IfIf 砼号C >= 60 Theng = 21End IfEnd IfIf 钢筋级别= 3 And 抗震级别If 砼号C <= 20 Theng = 40End IfIf 砼号C = 25 Theng = 40End IfIf 砼号C = 30 Theng = 35End IfIf 砼号C = 35 Theng = 32End IfIf 砼号C = 40 Theng = 29End IfIf 砼号C = 45 Theng = 28End IfIf 砼号C = 50 Theng = 27End IfIf 砼号C = 55 Theng = 26End IfIf 砼号C >= 60 Theng = 25End IfEnd IfIf 钢筋级别= 3 And 抗震级别If 砼号C <= 20 Theng = 42End IfIf 砼号C = 25 Theng = 42End IfIf 砼号C = 30 Theng = 37End IfIf 砼号C = 35 Theng = 34 = 4 Then 3 ThenIf 砼号C = 40 Theng = 30End IfIf 砼号C = 45 Theng = 29End IfIf 砼号C = 50 Theng = 28End IfIf 砼号C = 55 Theng = 27End IfIf 砼号C >= 60 Theng = 26End IfEnd IfIf 钢筋级别= 3 And 抗震级别<= 2 Then If 砼号C <= 20 Theng = 46End IfIf 砼号C = 25 Theng = 46End IfIf 砼号C = 30 Theng = 40End IfIf 砼号C = 35 Theng = 37End IfIf 砼号C = 40 Theng = 33End IfIf 砼号C = 45 Theng = 32End IfIf 砼号C = 50 Theng = 31End IfIf 砼号C = 55 Then g = 30End IfIf 砼号C >= 60 Then g = 29End IfEnd IfIf 钢筋级别>= 4 And 抗震级别If 砼号C <= 20 Theng = 55End IfIf 砼号C = 25 Theng = 55End IfIf 砼号C = 30 Theng = 49End IfIf 砼号C = 35 Theng = 45End IfIf 砼号C = 40 Then g = 41End IfIf 砼号C = 45 Theng = 39End IfIf 砼号C = 50 Theng = 37End IfIf 砼号C = 55 Then g = 36End IfIf 砼号C >= 60 Then g = 35End IfEnd IfIf 钢筋级别>= 4 And 抗震级别If 砼号C <= 20 Theng = 50End IfIf 砼号C = 25 Then<= 2 Then = 3 Then1H 00HA O4一4一 PU山ecu6uelLLgf。
如何在EXCEL中创建自定义函数Excel是一款功能强大的电子表格软件,它提供了许多内置的函数来帮助用户进行数据分析和处理。
但是有时候,我们需要使用一些特定的函数来满足我们自己的需求。
这时候,我们可以借助Excel的自定义函数功能来创建我们自己的函数。
在Excel中创建自定义函数可以通过使用Visual Basic for Applications(VBA)编程语言来实现。
下面将介绍如何在Excel中创建自定义函数的步骤。
第一步,打开Excel并在工作表中按下Alt+F11,打开Visual Basic 编辑器。
第二步,在Visual Basic编辑器中,选择“插入”菜单下的“模块”,创建一个新的模块。
第三步,编写自定义函数的代码。
在模块中,可以编写VBA代码来定义自己的函数。
例如,下面是一个简单的自定义函数,用于计算两个数相加的结果:```Function MyFunction(a As Double, b As Double) As DoubleMyFunction = a + bEnd Function```在上述代码中,我们定义了一个名为"MyFunction"的函数,它接受两个参数a和b,并返回它们的和。
第四步,保存并关闭Visual Basic编辑器。
确保将文件另存为Excel的宏启用格式(.xlsm)。
第五步,返回Excel工作表,在某个单元格中输入函数的名称,并传入需要计算的参数。
例如,在单元格A1中输入"=MyFunction(2, 3)",按下回车键即可得到结果。
除了上述的基本操作外,我们还可以在自定义函数中添加一些额外的功能,比如错误处理、条件判断等。
不过,需要注意的是,自定义函数的计算速度可能会比内置函数慢一些,所以在处理大量数据时需要谨慎使用。
另外,为了提高自定义函数的可读性和灵活性,我们可以给函数添加注释、使用变量、调用其他函数等。
教你如何通过Excel的VBA编程实现自定义数据处理作为一种强大的数据处理软件,Excel可以帮助我们高效地处理和分析大量数据。
而VBA编程语言是Excel中用来自动化处理任务的一种工具。
本文将教你如何通过Excel的VBA编程实现自定义数据处理,以便更好地满足个性化的数据处理需求。
一、VBA编程入门在使用VBA进行Excel数据处理之前,我们首先需要学习一些基本的VBA编程知识。
下面是一些简单的VBA编程入门指导:1. 打开Excel并按下Alt + F11键,打开VBA编辑器;2. 在VBA编辑器中,选择插入(Insert)→模块(Module),新建一个模块;3. 在模块中编写VBA代码,可以使用Sub和End Sub关键字定义一个子过程,也可以使用Function和End Function关键字定义一个函数;4. 使用Range对象和Cells对象可以对Excel工作表上的单元格进行操作;5. 使用If语句和循环语句可以实现条件判断和循环执行。
通过学习上述基本的VBA编程知识,我们可以更好地理解和操作VBA代码,从而实现自定义数据处理。
二、通过VBA实现自定义数据处理1. 数据筛选和排序在Excel中,我们经常需要对大量数据进行筛选和排序。
通过VBA 编程,我们可以实现自定义的筛选和排序功能,以满足个性化的数据处理需求。
例如,我们可以编写一个VBA代码来筛选出满足特定条件的数据,并将其以指定的格式进行展示。
同时,我们也可以通过编写VBA代码来实现数据的升序或降序排列,以便更好地进行数据的分析和查看。
2. 数据计算和分析除了筛选和排序外,VBA编程还可以帮助我们进行数据的计算和分析。
通过使用Excel的函数和VBA代码的结合,我们可以实现更为复杂的数据计算和分析功能。
例如,我们可以编写一个VBA代码来自动执行复杂的公式计算,并将计算结果显示在指定的位置。
此外,我们还可以利用VBA编程实现统计分析的功能,如计算数据的平均值、中位数、最大值等。
EXCEL中自定义函数的创建与使用方法Excel是一个强大的工具,广泛应用于数据处理、计算和分析。
而在其强大的功能中,自定义函数可以帮助用户实现个性化的计算需求。
通过简单的步骤,我们可以创建符合特定要求的函数,从而提高工作效率和精确度。
在Excel中,创建自定义函数需要使用VBA (VisualBasicforApplications)编程语言。
尽管许多用户可能对编程感到陌生,但只需掌握一些基本概念,便能轻松上手。
了解VBA环境在使用Excel之前,首先需要了解VBA编辑器的基本使用。
在Excel中,按下Alt+F11,便可以打开VBA编辑器。
此时,你会看到一个界面,左侧有一个“项目窗口”,显示当前打开的工作簿和任何已插入的模块。
在此窗口中,右键单击您的工作簿,选择“插入”>“模块”,即可创建一个新模块。
创建简单的自定义函数自定义函数的语法相对简单。
以下是一个基础示例,用于计算两个数字的和。
FunctionSumTwoNumbers(Number1AsDouble,Number2AsDoubl e)AsDoubleSumTwoNumbers=Number1+Number2EndFunction在这个代码中,Function关键字表明这是一个函数。
函数接受两个参数(Number1和Number2),并返回它们的和。
创建完后,关闭VBA编辑器,回到Excel工作表,你可以在单元格中使用此函数,就像使用内置的SUM函数一样。
例如:=SumTwoNumbers(5,10)返回15。
添加复杂的逻辑自定义函数不仅可以进行简单的数学运算,还可以处理复杂的逻辑。
考虑一个示例,该函数用于检测一个数是否为质数。
FunctionIsPrime(NumberAsLong)AsBooleanDimiAsLongIfNumber<2ThenIsPrime=FalseExitFunctionEndIfFori=2ToSqr(Number)IfNumberModi=0ThenIsPrime=FalseExitFunctionEndIfNextiIsPrime=TrueEndFunction这个函数使用循环和条件语句来判断输入的数字是否是质数。
在Excel中,你可以通过创建趋势线来预测数据的未来值。
但是,如果你想自定义趋势线函数,你可能需要使用Excel的更高级的功能,比如使用Excel的Visual Basic for Applications (VBA)编程语言。
以下是使用VBA自定义趋势线函数的基本步骤:1. 打开Excel,并打开你的工作簿。
2. 按Alt + F11键打开VBA编辑器。
3. 在VBA编辑器中,选择插入菜单,然后选择模块。
这将在项目中创建一个新的模块。
4. 在新模块的代码窗口中,你可以开始编写你的自定义函数。
例如,如果你想创建一个线性趋势线函数,你可以编写如下代码:```vbaPublic Function TrendLine(x As Range, y As Range) As Double Dim slope As DoubleDim intercept As DoubleDim xValues() As DoubleDim yValues() As DoubleDim i As Long' 将输入范围转换为数组xValues = x.ValueyValues = y.Value' 计算斜率和截距slope = WorksheetFunction.LinEst(yValues, xValues, True, False)(0)intercept = WorksheetFunction.LinEst(yValues, xValues, True, False)(1)' 返回趋势线的值TrendLine = slope * x.Value + interceptEnd Function```这个函数接受两个参数:一个x值和一个y值,然后返回基于线性趋势线的预测值。
5. 保存并关闭VBA编辑器。
6. 回到Excel中,你就可以在你的工作表中调用这个自定义函数了。
只需要在你想要计算趋势线值的单元格中输入`=TrendLine(A1, B1)`(假设A1是x值,B1是y值)。
excel自编函数编写Excel自定义函数可以为用户提供更多的计算和数据处理功能。
在Excel中,自定义函数是使用VBA(Visual Basic for Applications)编程语言来编写的。
以下是几个自定义函数的示例:1. 判断一个数字是否为素数```Function IsPrime(number As Long) As BooleanDim i As LongIf number < 2 ThenIsPrime = FalseExit FunctionEnd IfFor i = 2 To Sqr(number)If number Mod i = 0 ThenIsPrime = FalseExit FunctionEnd IfNext iIsPrime = TrueEnd Function```使用示例:在单元格A1中输入一个数字,然后在任意单元格中使用函数`=IsPrime(A1)`。
如果数字是素数,则返回TRUE;否则返回FALSE。
2. 计算一个字符串中特定字符出现的次数```Function CountCharacter(text As String, character As String) As LongDim i As Long, count As Longcount = 0For i = 1 To Len(text)If Mid(text, i, 1) = character Thencount = count + 1End IfNext iCountCharacter = countEnd Function```使用示例:在单元格A1中输入一段文字,然后在B1单元格中输入要统计的字符,最后在C1单元格中使用函数`=CountCharacter(A1, B1)`来计算字符出现的次数。
3. 将阿拉伯数字转换为罗马数字```Function ConvertToRoman(number As Integer) As StringDim arabic As VariantDim roman As VariantDim i As Integerarabic = Array(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)roman = Array("M", "CM", "D", "CD", "C", "XC", "L", "XL","X", "IX", "V", "IV", "I")If number < 1 Or number > 3999 ThenConvertToRoman = "Invalid number"Exit FunctionEnd IfFor i = LBound(arabic) To UBound(arabic)While number >= arabic(i)ConvertToRoman = ConvertToRoman & roman(i)number = number - arabic(i)WendNext iEnd Function```使用示例:在单元格A1中输入一个整数,然后在任意单元格中使用函数`=ConvertToRoman(A1)`来将数字转换为罗马数字。
Excel高级技巧使用宏编辑器进行自定义函数编写Excel高级技巧:使用宏编辑器进行自定义函数编写Excel是一款功能强大的电子表格软件,除了提供许多内置函数外,还可以通过使用宏编辑器来编写自定义函数。
自定义函数的编写可以帮助我们实现更加灵活和复杂的计算任务。
本文将介绍如何使用宏编辑器来进行自定义函数编写,以提升Excel的使用效率。
一、了解宏编辑器1.1 宏编辑器的介绍宏编辑器是Excel提供的一个可以编写和编辑VBA代码的工具。
VBA代码是一种可编程的宏语言,可以让我们在Excel中实现更加精细和复杂的功能。
1.2 如何打开宏编辑器要打开宏编辑器,可以使用快捷键Alt+F11,或者在Excel的开发工具中点击“宏”按钮,再点击“视图代码”。
二、编写自定义函数示例接下来,我们将通过一个示例来演示如何使用宏编辑器编写自定义函数。
首先,打开宏编辑器,然后点击“插入”菜单,选择“模块”选项。
在出现的模块中,输入以下代码:```VBAFunction MyCustomFunction(arg1 As Double, arg2 As Double) As Double'此处为自定义函数的逻辑代码MyCustomFunction = arg1 + arg2End Function```以上代码为一个简单的自定义函数示例,功能是将两个输入参数相加并返回结果。
编写完成后,关闭宏编辑器,返回Excel界面。
现在,我们可以在任意单元格中输入`= MyCustomFunction(3, 4)`,然后按下回车键,即可得到结果7。
通过这个示例,我们可以看到如何使用宏编辑器编写和使用自定义函数。
三、自定义函数的高级用法除了简单的函数计算外,自定义函数还可以实现更加复杂和灵活的功能。
下面介绍几个自定义函数的高级用法。
3.1 引用其他工作表的数据在自定义函数中,我们可以通过Worksheet对象来引用其他工作表中的数据。
在Excel中使用VBA编写自定义函数的方法自定义函数是Excel中非常有用的工具,它们能够帮助我们处理复杂的数据和计算任务。
而使用VBA编写自定义函数可以进一步扩展Excel的功能,使其更加灵活和高效。
本文将介绍在Excel中使用VBA编写自定义函数的方法,并提供一些示例来帮助读者更好地理解。
首先,在Excel中打开Visual Basic编辑器。
可以通过按下Alt+F11或选择“开发工具”选项卡中的“Visual Basic”按钮来实现。
进入Visual Basic编辑器后,可以在“插入”菜单中选择“模块”以创建一个新的模块。
接下来,我们需要编写VBA代码来创建自定义函数。
自定义函数的代码必须位于一个函数过程中,并且要包含函数的名称、参数和返回值类型。
下面是一个简单的示例:```Function MyFunction(arg1 As Integer, arg2 As Integer) As Integer' 在这里编写函数的处理逻辑MyFunction = arg1 + arg2End Function```在上面的例子中,我们创建了一个名为"MyFunction"的自定义函数,它接受两个整数类型的参数,并返回它们的和。
在函数的处理逻辑中,我们将两个参数相加,并使用赋值语句将结果赋给函数本身。
除了使用简单的加法来计算结果,我们还可以使用更复杂的逻辑和Excel内置函数。
举个例子,假设我们想要创建一个自定义函数来计算一个数列的平均值,但只包括大于10的数。
下面是一个实现这一功能的示例:```Function AverageGreaterThanTen(range As Range) As Double Dim total As DoubleDim count As IntegerFor Each cell In rangeIf cell.Value > 10 Thentotal = total + cell.Valuecount = count + 1End IfNext cellIf count > 0 ThenAverageGreaterThanTen = total / countElseAverageGreaterThanTen = 0End IfEnd Function```在上述示例中,我们创建了一个名为"AverageGreaterThanTen"的自定义函数,它接受一个范围类型的参数,并返回大于10的数的平均值。
excel表格创建自定义函数的教程
Excel中经常需要创建自定义函数计算,自定义函数具体该如何创建呢?接下来是店铺为大家带来的excel表格创建自定义函数的教程,供大家参考。
excel表格创建自定义函数教程:
创建自定义函数步骤1:打开Excel2007,切换至“开发工具”选项卡,点击“Visual Basic”按钮进入VBA编程环境。
创建自定义函数步骤2:在VBA环境下,右击“Microsoft Excel 对象”,在弹出的菜单中选择“插入”→“模块”。
创建自定义函数步骤3:接着点击“插入”菜单中的“过程”。
创建自定义函数步骤4:在打开的“添加过程”窗口中,输入函数名称,例如“ShowID”,类型设置为“函数”,最后点击“确定”按钮进入编辑状态。
创建自定义函数步骤5:在打开的函数编辑窗口中,输入该函数要实现的功能。
例如编辑如图所示的代码:
创建自定义函数步骤6:点击“关闭并返回Microsoft Excel"。
创建自定义函数步骤7:在Excel工作表中输入公式“=ShowID()”并按回车键,就可以查看效果啦。
使用VBA实现Excel自定义函数的开发方法Excel是一种功能强大的电子表格软件,可以进行数据分析、计算、图表绘制等功能。
VBA(Visual Basic for Applications)是Excel的宏编程语言,可以通过编写VBA代码来实现自定义函数的开发,进一步扩展Excel的功能。
在Excel中,有许多内置函数,如SUM、AVERAGE、IF等,可以满足大部分常见的计算需求。
然而,有时我们需要进行一些特殊的计算,这时就需要使用自定义函数来满足需求。
使用VBA开发自定义函数的方法如下:步骤一:打开VBA编辑器首先,打开Excel并点击“开发工具”选项卡,然后点击“Visual Basic”按钮,即可打开VBA编辑器。
步骤二:创建新的模块在VBA编辑器中,可以看到项目资源管理器窗口和代码窗口。
首先,在项目资源管理器窗口中,找到需要添加自定义函数的工作表,双击打开工作表的代码窗口。
然后,点击“插入”菜单,选择“模块”,即可创建新的模块。
步骤三:编写VBA代码在新创建的模块中,开始编写VBA代码。
自定义函数以Function 关键字开头,后面跟着函数名、参数列表和返回值类型。
下面是一个简单的例子,演示如何编写一个自定义函数来计算两个数的和:```Function sumOfTwoNumbers(num1 As Double, num2 As Double) As DoublesumOfTwoNumbers = num1 + num2End Function```在这个例子中,sumOfTwoNumbers是函数名,num1和num2是参数,As Double表示返回值类型为双精度浮点数。
代码中的sumOfTwoNumbers = num1 + num2表示将num1和num2相加的结果赋给函数名。
步骤四:保存和关闭VBA编辑器完成VBA代码的编写后,点击“文件”菜单,选择“保存”,然后关闭VBA编辑器。
VBA实现Excel的自定义函数开发Excel是一种功能强大的电子表格软件,可以进行各种数据处理和分析操作。
Excel中的函数是其中重要的组成部分,它们可以帮助用户快速计算和处理数据。
然而,Excel提供的函数种类有限,有时候我们需要根据自己的需求自定义一些函数。
幸运的是,Excel支持使用VBA (Visual Basic for Applications)编程语言来开发自定义函数。
VBA是一种功能强大的宏编程语言,可以在Excel中编写自定义的函数和宏。
使用VBA实现Excel的自定义函数开发可以使我们更好地满足各种数据处理需求,提高工作效率。
下面将介绍如何使用VBA来实现Excel的自定义函数开发。
首先,我们需要打开Excel并进入VBA编辑器。
可以通过按下"Alt + F11"快捷键或者在菜单栏中选择"开发工具" - "Visual Basic"来打开VBA编辑器。
在VBA编辑器中,我们可以编写自定义函数的代码。
要编写一个自定义函数,首先需要在一个模块中创建一个函数。
可以在"插入"菜单下选择"模块",然后在新创建的模块中编写代码。
在编写代码之前,我们需要了解一些基本的VBA语法和Excel对象模型。
VBA语法与传统的编程语言类似,它包含变量、条件语句、循环语句等。
Excel的对象模型是一个层次结构,包含了Excel应用程序、工作簿、工作表以及单元格等对象,我们可以通过VBA代码操作这些对象来完成各种功能。
编写自定义函数的代码时,需要注意以下几点:1. 函数必须有一个唯一的名称,并且要避免与Excel内置函数重名。
2. 函数的代码应放在函数体内部,并将结果作为函数名的返回值。
可以使用"Function"关键字来定义函数。
3. 可以在函数的参数列表中指定输入参数,并使用这些参数在函数体内作计算或处理。
掌握Excel中的宏编程和自定义函数章节一:宏编程的基础知识Excel中的宏编程是一种自动化处理数据和执行任务的方法。
通过录制宏或者编写VBA代码,我们可以简化重复性、繁琐的操作,提高工作效率。
掌握宏编程的基础知识是使用Excel的第一步。
在Excel中,我们可以打开开发者工具栏,选择录制宏并执行一系列操作,例如复制、粘贴、格式设置等。
录制的宏将会自动生成一段VBA代码,这段代码将会重复执行我们记录的操作。
通过编辑这段代码,我们可以进一步控制它的执行方式,创建更为强大、灵活的宏。
章节二:使用VBA编辑宏代码VBA(Visual Basic for Applications)是一种强大的编程语言,它可以用于在Excel中编写宏代码。
掌握VBA语法和常用的函数,是使用宏编程的关键。
在编写代码之前,可以先了解一些常用的VBA语句和函数。
例如,通过VBA语句"Range("A1").Value = 10"可以将单元格A1的值设置为10。
我们还可以使用条件语句和循环语句来控制程序的流程,实现更复杂的操作。
此外,VBA还提供了众多的内置函数,如SUM、COUNT、IF等,可以帮助我们对数据进行计算和分析。
章节三:自定义函数的使用Excel中的自定义函数是一种由用户自定义的函数,可以扩展Excel的功能。
通过自定义函数,我们可以根据自己的需求,编写出更为个性化的功能。
自定义函数可以通过VBA代码编写,并且可以像内置函数一样在公式中使用。
编写自定义函数需要了解VBA的函数语法和常用的Excel对象模型。
一个简单的例子是,我们可以编写一个自定义函数来计算平均数,函数的定义如下:Function Average(ByVal rng As Range)Dim total As DoubleDim count As IntegerFor Each cell In rngtotal = total + cell.Valuecount = count + 1Next cellAverage = total / countEnd Function这样,我们就可以在Excel中使用=AVERAGE(A1:A10)来计算A1到A10的平均值。
Excel单元格自定义格式代码详解Excel 单元格自定义格式代码详解Excel 自定义格式参数代码结构组成代码码分为四个部分,中间用“;”号分隔,具体如下: 正数格式;负数格式;零格式;文本格式各个参数的涵义“G/通用格式”:以常规的数字显示,相当于“分类”列表中的“常规”选项。
例:代码:“G/通用格式”。
10 显示为 10;10.1 显示为10.1。
“0”:数字占位符。
如果单元格的内容大于占位符,则显示实际数字,如果小于点位符的数量,则用 0 补足。
例:代码:“00000”。
1234567 显示为1234567;123 显示为 00123 代码:“00.000”。
100.14 显示为 100.140;1.1 显示为01.100 “”:数字占位符。
只显有意义的零而不显示无意义的零。
小数点后数字如大于“”的数量,则按“” 的位数四舍五入。
例:代码:“.”12.1 显示为12.1012.1263 显示为:12.13 “,”:数字占位符。
在小数点两边为无意义的零添加空格,以便当按固定宽度时,小数点可对齐,另外还用于对不等到长数字的分数例:分别设置单元格格式为“.“和“.”对齐结果如下: 例:设置单元格自定义格式“/”。
“1.25”显示为“11/4” “.”:小数点。
如果外加双引号则为字符。
例:代码“0.”。
“11.23”显示为“11.2” “”:百分比。
例:代:千位分隔符。
数字使用千位分隔符。
如时在代码中“,”码“”。
“0.1”显示为“10” “,”后空,则把原来的数字缩小 1000 倍。
例:代码:“,”。
“10000”显示为“10,000” 代码:“,”。
10000 显示为 10。
代码:“,,”。
“1000000”显示为“1”。
“/” :显示下一个字符。
和“”””用途相同都是显是输入的文本,且输入后会自动转变为双引号表达。
不同的“/”是显后面的文本,双引号是显示双引中间的文本。
例:代码“ABC”或“”ABC””。
Excel自定义函数怎么写在日常工作和数据处理中,Excel 无疑是我们的得力助手。
而掌握Excel 自定义函数的编写,更能让我们如虎添翼,大幅提高工作效率。
那么,Excel 自定义函数到底怎么写呢?别着急,接下来咱们就一步一步来探讨。
首先,我们得明白为什么要自定义函数。
通常情况下,Excel 自带的函数可能无法完全满足我们特定的需求。
比如,我们需要根据一套复杂的规则来计算某个值,或者对特定的数据格式进行独特的处理,这时候自定义函数就派上用场了。
要编写自定义函数,第一步是打开 Excel 的 Visual Basic 编辑器(VBE)。
在Excel 中,按下“Alt +F11”组合键就可以进入。
进入后,我们会看到一个新的界面,这里就是我们施展魔法的地方。
接下来,在 VBE 中,我们需要插入一个新的模块。
在“插入”菜单中,选择“模块”,这样就为我们的自定义函数创建了一个“家”。
然后,就可以开始编写函数的代码了。
自定义函数有它固定的格式,一般来说,像这样:```vbFunction 函数名(参数1, 参数2, …… )'函数体函数名=计算结果End Function```比如说,我们要写一个简单的自定义函数,用来计算两个数的和。
代码可能就像这样:```vbFunction AddNumbers(num1, num2)AddNumbers = num1 + num2End Function```在这个函数中,“AddNumbers”就是我们自定义的函数名,“num1”和“num2”是函数的参数,也就是我们要传入进行计算的数据。
而“AddNumbers = num1 +num2”这部分就是函数的主体,它完成了具体的计算,并把结果赋值给函数名,以便返回给调用这个函数的地方。
再举个例子,如果我们要写一个函数来判断一个数是不是偶数,可以这样写:```vbFunction IsEvenNumber(num)If num Mod 2 = 0 ThenIsEvenNumber = TrueElseIsEvenNumber = FalseEnd IfEnd Function```这里用到了“Mod”运算符来取余数,如果余数为0,就说明是偶数,函数返回“True”,否则返回“False”。
第10章 自定义函数的制作
231 函数只能被本代码窗口内的程序所调用。
如果要编写在工作表公式中使用的函数,就必须在添加的模块中编写。
针对〖例10-3〗的要求,在工作表公式中使用的函数,需要在添加的模块中编写。
打开VBE 编辑器,在当前工作簿的工程中插入一个模块,如图10-5所示。
图10-5 新建模块
10.2.2 自定义函数代码的编制
添加模块以后,下面开始编写自定义函数的代码。
函数过程程序是以Function 开始,以End Function 结束的语句。
Function 函数名称
(自变量)
程序代码
End Function
注意
函数名称:函数名称可以由字母、数字和标点符号组成,但第一个必须是字
符。
值得注意的是,函数名称不能使用空格、句号、#、$、%、(、?、)或!。
自变量:自变量的多少根据题目的需要而定。
例如,
〖例10-1〗由于可以直接取当前工作簿中工作表的个数,所以不需要自变量,而〖例10-3〗需要给函数提供判断的求不重复值的区域,所以需要设置代表单元格区域的自变量。
程序代码中一定要包含函数名称的等式,如果函数名称为取不重复值,那
么程序中必须包含“取不重复值=可以返回值的代码或表达式”。
在打开的模块代码窗口中,输入以下代码,如图10-6所示。
Function 取不重复值个数(Rng As Range)
Application.Volatile
Dim Mr As Range
Dim X As Integer, K As Integer。
Public Function DJ(钢筋直径As Single, 最小搭接直径As Single, 搭接类别As String, 机械接头As String, 锚固As Single)Dim x As Integer, X1 As Integer, X2 As Integer, a As IntegerIf 钢筋直径> 0 Thena = 1Elsea = 0End IfIf 钢筋直径> 最小搭接直径ThenIf 机械接头= "双面焊10D" ThenDJ = 钢筋直径+ 2End IfIf 机械接头= "单面焊5D" ThenDJ = 钢筋直径/ 2 + 2End IfIf 机械接头= "直螺纹" ThenDJ = 0End IfEnd IfIf 钢筋直径<= 最小搭接直径ThenIf 搭接类别= "腰筋G" ThenDJ = 钢筋直径* 1.5: x = 1End IfIf 搭接类别= "搭接100%" Or 搭接类别= "构造柱" ThenDJ = MAX(锚固* 1.6, 30, 0, 0) * a: X1 = 1End IfIf 搭接类别= "Q" Or 搭接类别= "Z" Or 搭接类别= "搭接25%" ThenDJ = MAX(锚固* 1.2, 30, 0, 0) * a: X2 = 1End IfIf x + X1 + X2 = 0 Or 搭接类别= "" ThenDJ = MAX(锚固* 1.4, 30, 0, 0) * aEnd IfEnd IfEnd FunctionPublic Function MG(抗震级别As Single, 钢筋级别As Single, 砼号C As Single, 钢筋直径As Single)Dim j As SingleDim k As SingleDim g As SingleIf 钢筋直径>= 28 ThenIf 钢筋级别>= 2 Thenj = 1.1Elsej = 1End IfElsej = 1End IfIf 抗震级别<= 2 Thenk = 1.15End IfIf 抗震级别= 3 Thenk = 1.05End IfIf 抗震级别= 4 Thenk = 1End IfIf 钢筋级别= 1 And 抗震级别<= 2 Then If 砼号C <= 20 Theng = 45End IfIf 砼号C = 25 Theng = 39End IfIf 砼号C = 30 Theng = 35End IfIf 砼号C = 35 Theng = 32End IfIf 砼号C = 40 Theng = 29End IfIf 砼号C = 45 Theng = 28End IfIf 砼号C = 50 Theng = 26End IfIf 砼号C = 55 Theng = 25End IfIf 砼号C >= 60 Theng = 24End IfEnd IfIf 钢筋级别= 1 And 抗震级别= 3 Then If 砼号C <= 20 ThenEnd IfIf 砼号C = 25 Theng = 36End IfIf 砼号C = 30 Theng = 32End IfIf 砼号C = 35 Theng = 29End IfIf 砼号C = 40 Theng = 26End IfIf 砼号C = 45 Theng = 25End IfIf 砼号C = 50 Theng = 24End IfIf 砼号C = 55 Theng = 23End IfIf 砼号C >= 60 Theng = 22End IfEnd IfIf 钢筋级别= 1 And 抗震级别= 4 Then If 砼号C <= 20 Theng = 39End IfIf 砼号C = 25 Theng = 34End IfIf 砼号C = 30 Theng = 30End IfIf 砼号C = 35 Theng = 28End IfIf 砼号C = 40 Theng = 25End IfIf 砼号C = 45 ThenEnd IfIf 砼号C = 50 Theng = 23End IfIf 砼号C = 55 Theng = 22End IfIf 砼号C >= 60 Theng = 21End IfEnd IfIf 钢筋级别= 2 And 抗震级别<= 2 Then If 砼号C <= 20 Theng = 44End IfIf 砼号C = 25 Theng = 38End IfIf 砼号C = 30 Theng = 33End IfIf 砼号C = 35 Theng = 31End IfIf 砼号C = 40 Theng = 29End IfIf 砼号C = 45 Theng = 26End IfIf 砼号C = 50 Theng = 25End IfIf 砼号C = 55 Theng = 24End IfIf 砼号C >= 60 Theng = 24End IfEnd IfIf 钢筋级别= 2 And 抗震级别= 3 Then If 砼号C <= 20 Theng = 40If 砼号C = 25 Theng = 35End IfIf 砼号C = 30 Theng = 31End IfIf 砼号C = 35 Theng = 28End IfIf 砼号C = 40 Theng = 26End IfIf 砼号C = 45 Theng = 24End IfIf 砼号C = 50 Theng = 23End IfIf 砼号C = 55 Theng = 22End IfIf 砼号C >= 60 Theng = 22End IfEnd IfIf 钢筋级别= 2 And 抗震级别= 4 Then If 砼号C <= 20 Theng = 38End IfIf 砼号C = 25 Theng = 33End IfIf 砼号C = 30 Theng = 29End IfIf 砼号C = 35 Theng = 27End IfIf 砼号C = 40 Theng = 25End IfIf 砼号C = 45 Theng = 23If 砼号C = 50 Theng = 22End IfIf 砼号C = 55 Theng = 21End IfIf 砼号C >= 60 Theng = 21End IfEnd IfIf 钢筋级别= 3 And 抗震级别= 4 Then If 砼号C <= 20 Theng = 40End IfIf 砼号C = 25 Theng = 40End IfIf 砼号C = 30 Theng = 35End IfIf 砼号C = 35 Theng = 32End IfIf 砼号C = 40 Theng = 29End IfIf 砼号C = 45 Theng = 28End IfIf 砼号C = 50 Theng = 27End IfIf 砼号C = 55 Theng = 26End IfIf 砼号C >= 60 Theng = 25End IfEnd IfIf 钢筋级别= 3 And 抗震级别= 3 Then If 砼号C <= 20 Theng = 42End Ifg = 42End IfIf 砼号C = 30 Theng = 37End IfIf 砼号C = 35 Theng = 34End IfIf 砼号C = 40 Theng = 30End IfIf 砼号C = 45 Theng = 29End IfIf 砼号C = 50 Theng = 28End IfIf 砼号C = 55 Theng = 27End IfIf 砼号C >= 60 Theng = 26End IfEnd IfIf 钢筋级别= 3 And 抗震级别<= 2 Then If 砼号C <= 20 Theng = 46End IfIf 砼号C = 25 Theng = 46End IfIf 砼号C = 30 Theng = 40End IfIf 砼号C = 35 Theng = 37End IfIf 砼号C = 40 Theng = 33End IfIf 砼号C = 45 Theng = 32End Ifg = 31End IfIf 砼号C = 55 Theng = 30End IfIf 砼号C >= 60 Theng = 29End IfEnd IfIf 钢筋级别>= 4 And 抗震级别<= 2 Then If 砼号C <= 20 Theng = 55End IfIf 砼号C = 25 Theng = 55End IfIf 砼号C = 30 Theng = 49End IfIf 砼号C = 35 Theng = 45End IfIf 砼号C = 40 Theng = 41End IfIf 砼号C = 45 Theng = 39End IfIf 砼号C = 50 Theng = 37End IfIf 砼号C = 55 Theng = 36End IfIf 砼号C >= 60 Theng = 35End IfEnd IfIf 钢筋级别>= 4 And 抗震级别= 3 Then If 砼号C <= 20 Theng = 50End IfIf 砼号C = 25 ThenEnd IfIf 砼号C = 30 Theng = 45End IfIf 砼号C = 35 Theng = 41End IfIf 砼号C = 40 Theng = 38End IfIf 砼号C = 45 Theng = 36End IfIf 砼号C = 50 Theng = 34End IfIf 砼号C = 55 Theng = 33End IfIf 砼号C >= 60 Theng = 32End IfEnd IfIf 钢筋级别>= 4 And 抗震级别= 4 Then If 砼号C <= 20 Theng = 48End IfIf 砼号C = 25 Theng = 48End IfIf 砼号C = 30 Theng = 43End IfIf 砼号C = 35 Theng = 39End IfIf 砼号C = 40 Theng = 36End IfIf 砼号C = 45 Theng = 34End IfIf 砼号C = 50 ThenEnd IfIf 砼号C = 55 Theng = 31End IfIf 砼号C >= 60 Theng = 30End IfEnd IfIf 钢筋直径= 0 ThenMG = 0ElseMG = g * j * kEnd IfEnd FunctionPublic Function TJ(直径As Variant, 前端拐长度As Variant, 斜长As Variant, 成品身长As Variant, 原材长度As Variant, 原材模数As Integer, N As Integer) As VariantDim x As Integer, C As IntegerIf 前端拐长度> 0 Thenx = Round(直径* 0.2, 0): C = 1Elsex = 0: C = 0End IfIf 成品身长>= 原材长度- C * (前端拐长度+ 斜长) + x ThenIf N = 0 ThenTJ = Round(原材长度/ 原材模数, 0) - C * (前端拐长度+ 斜长) + xEnd IfIf N = 1 ThenTJ = 原材长度- Round(原材长度/ 原材模数, 0) - (前端拐长度+ 斜长) + xEnd IfEnd IfIf 成品身长< 原材长度- C * (前端拐长度+ 斜长) + x ThenTJ = 0End IfEnd FunctionPublic Function RL(构件As String, L As Single, 斜长As Variant, 起头As Single, 原材As Single, 搭接长As Single, 项As String)Dim i As Single: Dim a As SingleIf (起头+ 斜长) > 0 ThenIf L - (起头+ 斜长) <= 原材- 搭接长Theni = 0: RL = L - (起头+ 斜长) + 搭接长End IfIf L - (起头+ 斜长) + 搭接长> 原材ThenIf L - (起头+ 斜长) + 搭接长- Int((L - 起头+ 搭接长) / (原材- 搭接长)) *(原材- 搭接长) <= 搭接长Theni = Int((L - (起头+ 斜长) + 搭接长) / (原材- 搭接长)) - 1: RL = L - 起头+ 搭接长- (Int((L - 起头+ 搭接长) / (原材- 搭接长)) - 1) * (原材- 搭接长)Elsei = Int((L - (起头+ 斜长) + 搭接长) / (原材- 搭接长)): RL = L - (起头+ 斜长) + 搭接长- Int((L - 起头+ 搭接长) / (原材- 搭接长)) * (原材- 搭接长)End IfEnd Ifa = (起头+ 斜长) + i * 原材+ RLEnd IfIf (起头+ 斜长) = 0 ThenIf L <= 原材Theni = 0: RL = LEnd IfIf L > 原材ThenIf L - Int((L) / (原材- 搭接长)) * (原材- 搭接长) <= 搭接长Theni = Int(L / (原材- 搭接长)) - 1: RL = L - (Int(L / (原材- 搭接长)) - 1) * (原材- 搭接长)Elsei = Int(L / (原材- 搭接长)): RL = L - Int(L / (原材- 搭接长)) * (原材- 搭接长)End IfEnd Ifa = i * 原材+ RLEnd IfIf 构件= "箍筋" Or 构件= "拉筋" Thena = 0: RL = 0Elsea = a: RL = RLEnd IfIf 项= "收尾筋" ThenRL = RLEnd IfIf 项= "根数" ThenRL = iEnd IfIf 项= "料长" ThenRL = aEnd IfEnd FunctionPublic Function F(L As Integer, 直径As Integer) As StringDim a As StringIf L = 1 Thena = "φ"End IfIf L = 2 Thena = ""End IfIf L = 3 Thena = ""End IfIf L = 4 Thena = ""End IfIf L = 5 Thena = ""End IfIf 直径> 0 ThenF = a & 直径ElseF = ""End IfEnd FunctionPublic Function TC(构件类别As String) As IntegerDim Y As Integer, y1 As Integer, y2 As Integer, y3 As Integer, y4 As Integer, y5 As Integer If 构件类别= "Q" ThenTC = Sheets("参数表").Range("E14"): Y = 1End IfIf 构件类别= "Z" ThenTC = Sheets("参数表").Range("E12"): y1 = 1End IfIf 构件类别= "B" ThenTC = Sheets("参数表").Range("E10"): y2 = 1End IfIf 构件类别= "L" ThenTC = Sheets("参数表").Range("E8"): y4 = 1End IfIf 构件类别= "JC" ThenTC = Sheets("参数表").Range("E5"): y5 = 1End IfIf 构件类别= "QT" Or 构件类别= " " Or Y + y1 + y2 + y3 + y4 + y5 = 0 ThenTC = Sheets("参数表").Range("E4")End IfEnd FunctionPublic Function KAG(构件类别As String) As IntegerDim Y As Integer, y1 As Integer, y2 As Integer, y3 As Integer, y4 As Integer, y5 As Integer If 构件类别= "Q" ThenKAG = Sheets("参数表").Range("D14"): Y = 1End IfIf 构件类别= "Z" ThenKAG = Sheets("参数表").Range("D12"): y1 = 1End IfIf 构件类别= "B" ThenKAG = Sheets("参数表").Range("D10"): y2 = 1End IfIf 构件类别= "L" ThenKAG = Sheets("参数表").Range("D8"): y4 = 1End IfIf 构件类别= "JC" ThenKAG = Sheets("参数表").Range("D5"): y5 = 1End IfIf 构件类别= "QT" Or 构件类别= " " Or Y + y1 + y2 + y3 + y4 + y5 = 0 ThenKAG = Sheets("参数表").Range("D4")End IfEnd FunctionPublic Function WKL(构件类别As String) As VariantDim a1 As Variant, b1 As Variant, C1 As V ariant, D As VariantIf 构件类别= "" Then构件类别= 0Else构件类别= 构件类别End Ifa1 = InStrRev(构件类别, "WKL", Len(构件类别)): b1 = InStrRev(构件类别, "KZL", Len(构件类别)): C1 = InStrRev(构件类别, "QL", Len(构件类别))If MAX(a1, b1, C1, 0) > 0 ThenIf MAX(a1, b1, C1, 0) = C1 ThenD = MAX(a1, b1, C1, 0) + 1ElseD = MAX(a1, b1, C1, 0) + 2End IfWKL = Mid(构件类别, 1, D)ElseWKL = ""End IfEnd FunctionPublic Function TS(构件As String, WKL As String) As StringIf 构件= "吊筋" Or 构件= "鸭筋" ThenTS = "吊筋"End IfIf 构件= "悬挑一层" Or 构件= "悬挑二层" ThenTS = "悬挑"End IfIf 构件= "插口" ThenTS = "插口"End IfIf 构件<> "吊筋" And 构件<> "鸭筋" And 构件<> "悬挑一层" And 构件<> "悬挑二层" And 构件<> "插口" ThenTS = WKLEnd IfEnd FunctionPublic Function TSG(构件As String, 构件类别As String, WKL As String) As String Dim a As IntegerIf 构件= "吊筋" Or 构件= "鸭筋" Or 构件= "悬挑一层" Or 构件= "悬挑二层" Then If 构件= "吊筋" Or 构件= "鸭筋" ThenTSG = "吊筋": a = 1End IfIf 构件= "悬挑一层" Or 构件= "悬挑二层" ThenTSG = "悬挑": a = 1End IfIf 构件= "插口" ThenTSG = "插口": a = 1End IfElseIf 构件类别= "B" And a <> 1 ThenTSG = Sheets("参数表").Range("C10")ElseTSG = WKLEnd IfEnd IfEnd FunctionPublic Function Wd(构件As String, 构件类别As String, 墙梁宽As Integer) As Integer If 构件= "拉筋" ThenIf 构件类别= "L" Or 构件类别= "Q" ThenWd = 墙梁宽+ 1 - Sheets("参数表").Range("F3")End IfIf 构件类别= "Z" ThenWd = 墙梁宽- Sheets("参数表").Range("F3")End IfEnd IfIf 构件= "箍筋" ThenWd = 墙梁宽- Sheets("参数表").Range("F3")End IfIf 构件<> "拉筋" And 构件<> "箍筋" ThenWd = 0End IfEnd FunctionPublic Function Wh(构件As String, 墙梁高As Integer) As IntegerIf 构件= "箍筋" ThenWh = 墙梁高- Sheets("参数表").Range("G3")ElseWh = 0End IfEnd FunctionPublic Function WL(构件As String, 直径As Integer, 宽As Integer, 高As Integer) As IntegerDim a As IntegerIf 直径>= 8 Thena = 2 * 直径Elsea = 15End IfIf 构件= "箍筋" ThenWL = (宽+ 高) * 2 + aEnd IfIf 构件= "拉筋" ThenWL = 宽+ aEnd IfIf 构件<> "箍筋" And 构件<> "拉筋" ThenWL = 0End IfEnd FunctionPublic Function WUL(构件As String, 级别As Integer, 直径As Integer, 高As Integer) As IntegerDim a As Integer, b As IntegerIf 级别= 1 Thenb = 1Elseb = 0End IfIf 直径>= 8 Thena = 2 * 直径Elsea = 15End IfIf 构件= "插口" ThenWUL = 高* 2 + a * bElseWUL = 0End IfEnd FunctionPublic Function WMX(构件As String, N As Integer) As IntegerDim a As Integer, b As IntegerIf 构件= "腰筋G" Or 构件= "腰筋N" Or 构件= "P" Or 构件= "O" Or 构件= "拉筋" Or 构件= "箍筋" Or 构件= "通长" Or 构件= "架立筋" Thena = 0:b = 0End IfIf 构件= "A" Or 构件= "P1" Or 构件= "长封" Or 构件= "短封" Or 构件= "悬挑一层" Or 构件= "悬挑二层" Or 构件= "插口" Thena = 1:b = 0End IfIf 构件= "B" Or 构件= "P2" Thena = 0:b = 1End IfIf 构件= "" Or 构件= "吊筋" Or 构件= "鸭筋" Or 构件= "马凳" Thena = 1:b = 1End IfIf N = 0 ThenWMX = aElseWMX = bEnd IfEnd FunctionPublic Function WMC(板厚As Integer, 直径As Integer, 宽度As Integer, 梁高As Integer, 悬挑底长As Integer, 标记As String, 锚固As Integer, 构件类别As String, 特殊类别As String) As VariantIf 特殊类别= "板" And 标记= "" ThenIf 直径>= 板厚- 4 ThenWMC = 板厚- 4ElseWMC = 直径End IfEnd IfIf 特殊类别= "外挑板" And 标记= "" ThenWMC = Round((板厚+ 7) / 2)End IfIf 特殊类别= "101-3筏板" And 标记= "" ThenWMC = 1.5 * 直径End IfIf 构件类别= "L" And 标记= "" ThenIf 特殊类别= "吊筋" And 标记= "" ThenWMC = 2 * 直径End IfIf 特殊类别= "悬挑" And 标记= "" ThenWMC = MAX(直径, 悬挑底长, 0, 0)End IfIf 特殊类别= "插口" And 标记= "" ThenWMC = 宽度- Sheets("参数表").Range("F3")End IfIf 特殊类别= "QL" And 特殊类别<> "吊筋" And 特殊类别<> "悬挑" Then WMC = 0.8 * 锚固End IfIf 特殊类别<> "QL" And 特殊类别<> "吊筋" And 特殊类别<> "悬挑" And 特殊类别<> "插口" ThenWMC = 1.5 * 直径End IfEnd IfIf 构件类别= "L" And 标记<> "" ThenIf 特殊类别= "WKL" Or 特殊类别= "" ThenIf Sheets("打印页").Range("J1") = 0 ThenWMC = 梁高- 5End IfIf Sheets("打印页").Range("J1") = 1 ThenWMC = 1.7 * 锚固End IfEnd IfIf 特殊类别= "KZL" ThenWMC = 梁高+ 锚固- 5End IfEnd IfIf 构件类别= "Z" And 标记= "" ThenIf Sheets("参数表").Range("K4") = 1 ThenWMC = Sheets("参数表").Range("I4")ElseWMC = 1.2 * 直径End IfEnd IfIf 构件类别= "Z" And 标记<> "" ThenIf Sheets("参数表").Range("O4") = 1 ThenWMC = Sheets("参数表").Range("M4")End IfIf Sheets("参数表").Range("O4") = 0 ThenWMC = 1.2 * 直径End IfEnd IfIf 构件类别= "Q" And 标记= "" ThenIf Sheets("参数表").Range("K4") = 1 ThenWMC = Sheets("参数表").Range("I4")ElseWMC = 1.2 * 直径End IfEnd IfIf 构件类别= "Q" And 标记<> "" ThenIf Sheets("参数表").Range("O4") = 1 ThenWMC = Sheets("参数表").Range("M4")End IfIf Sheets("参数表").Range("O4") = 0 ThenWMC = 1.2 * 直径End IfEnd IfWMC = Round(WMC, 0)End FunctionPublic Function SOUS(构件类别As String) As VariantDim a1 As Variant, b1 As Variant, C1 As V ariant, D1 As VariantIf 构件类别= "" Then构件类别= 0Else构件类别= 构件类别End Ifa1 = InStrRev(构件类别, "L", Len(构件类别)): b1 = InStrRev(构件类别, "Z", Len(构件类别)): C1 = InStrRev(构件类别, "B", Len(构件类别)): D1 = InStrRev(构件类别, "Q", Len(构件类别)) If MAX(a1, b1, C1, D1) > 0 ThenSOUS = Mid(构件类别, 1, MAX(a1, b1, C1, D1))ElseSOUS = ""End IfEnd FunctionPublic Function SOS(构件类别As String) As VariantDim a1 As Variant, b1 As Variant, C1 As V ariant, D1 As VariantIf 构件类别= "" Then构件类别= 0Else构件类别= 构件类别End Ifa1 = InStrRev(构件类别, "L", Len(构件类别)): b1 = InStrRev(构件类别, "Z", Len(构件类别)): C1 = InStrRev(构件类别, "B", Len(构件类别)): D1 = InStrRev(构件类别, "Q", Len(构件类别)) If MAX(a1, b1, C1, D1) = a1 ThenSOS = "L"End IfIf MAX(a1, b1, C1, D1) = b1 ThenSOS = "Z"End IfIf MAX(a1, b1, C1, D1) = C1 ThenSOS = "B"End IfIf MAX(a1, b1, C1, D1) = D1 ThenSOS = "Q"End IfIf MAX(a1, b1, C1, D1) = 0 ThenSOS = ""End IfEnd FunctionPublic Function MAX(a As Variant, b As Variant, C As V ariant, D As Variant) As VariantDim x As Integer, Y As IntegerIf a >= b Thenx = aElsex = bEnd IfIf C >= D ThenY = CElseY = DEnd IfIf x >= Y ThenMAX = xElseMAX = YEnd IfEnd FunctionPublic Function XTJ(L As Single, 直径As Integer, 悬挑底长As Integer, 构件类别As String, 梁高As Integer, N As Integer) As VariantDim a As Single, h As Integer, λ1 As Integer, L1 As Single, b As Single, P As IntegerIf 构件类别= "悬挑二层" Thenh = 5: λ1 = 1End IfIf 构件类别= "悬挑一层" Or 构件类别= "吊筋" Or 构件类别= "鸭筋" Thenh = 0: λ1 = 1End IfIf 构件类别<> "悬挑二层" And 构件类别<> "悬挑一层" And 构件类别<> "吊筋" And 构件类别<> "鸭筋" Thenh = 0: λ1 = 0End IfP = MAX(悬挑底长, 直径, 0, 0) * λ1If 梁高> 80 Thena = λ1 * Int(2 * (梁高- h - Sheets("参数表").Range("G3")) / Sqr(3)): L1 = λ1 * (L - 悬挑底长- (梁高- h - Sheets("参数表").Range("G3")) / Sqr(3))Elsea = λ1 * Int(Sqr(2) * (梁高- h - Sheets("参数表").Range("G3"))): L1 = λ1 * (L - 悬挑底长- (梁高- h - Sheets("参数表").Range("G3")))End IfIf 构件类别= "吊筋" Or 构件类别= "鸭筋" ThenL1 = 0: P = 2 * 直径ElseL1 = L1: P = PEnd IfIf N = 0 ThenXTJ = PEnd IfIf N = 1 ThenXTJ = MAX(a, 0, 0, 0)End IfIf N = 2 ThenXTJ = L1End IfEnd FunctionPublic Function JMG(L As Integer, 构件类别As String, 锚固As Integer) As VariantIf 构件类别= "P" Or 构件类别= "P1" Or 构件类别= "P2" Or 构件类别= "腰筋G" Or 构件类别= "腰筋N" ThenJMG = LEnd IfIf 构件类别= "架立筋" Or 构件类别= "" Or 构件类别= "吊筋" Or 构件类别= "鸭筋" ThenJMG = LEnd IfIf 构件类别= "A" Or 构件类别= "B" ThenJMG = L + 锚固End IfIf 构件类别= "O" ThenJMG = L + 锚固* 2End IfEnd FunctionPublic Function LJM(构件类别As String, N As Integer) As VariantDim a As Variant, b As Variant, C As Variant, D As V ariant, E As Variant, F As Variant, F1 As Variant, b1 As Variant, b2 As VariantIf 构件类别= "" Then构件类别= 0End IfF = InStrRev(构件类别, "(", Len(构件类别))F1 = InStrRev(构件类别, "件", Len(构件类别))a = InStrRev(构件类别, ")", Len(构件类别))b = InStrRev(构件类别, "x", Len(构件类别))C = InStrRev(构件类别, "X", Len(构件类别))D = InStrRev(构件类别, "*", Len(构件类别))E = InStrRev(构件类别, "×", Len(构件类别))If 构件类别<> "" ThenIf b > 0 Thenb = bElseb = MAX(b, C, D, E)End IfIf N = 0 ThenIf b = 0 ThenLJM = 0ElseLJM = Mid(构件类别, a + 1, b - a - 1) / 10End IfEnd IfIf N = 1 ThenIf b = 0 ThenLJM = 0ElseLJM = Mid(构件类别, b + 1, Len(构件类别) - b) / 10End IfEnd IfIf N = 2 ThenIf b = 0 ThenLJM = 0ElseLJM = Mid(构件类别, F + 1, F1 - F - 1)End IfEnd IfElseLJM = 0End IfEnd FunctionPublic Function GJS(抗震级别As Single, 层数As String, 间距As V ariant, 构件As String, L As Single, LZ高As Single, N As Single) As VariantDim a As Variant, x As Variant, Y As Variant, λ As Variant, R As VariantDim h As Variant, h1 As VariantIf N = 1 ThenR = 1ElseR = 0End IfIf 抗震级别<= 2 Thenλ = 2Elseλ = 1.5End IfIf 构件= "Z" ThenIf 层数= "基础" Thenh = L / 3: h1 = L / 6Elseh = h1 = L / 6End Ifh = MAX(h, LZ高, 50, 0)h1 = MAX(h1, LZ高, 50, 0)End IfIf 构件= "L" Thenh = LZ高* λ: h1 = LZ高* λEnd Ifh = h: h1 = h1If 间距= "" Then间距= 0End Ifa = InStrRev(间距, "/", Len(间距))If 间距<> 0 ThenIf a > 0 And L > 0 And L > h + h1 Thenx = Mid(间距, 1, a - 1) / 10Y = Mid(间距, a + 1, Len(间距) - a) / 10If x < 20 Thenx = x + RElsex = xEnd IfIf Y < 20 ThenY = Y + RElseY = YEnd IfGJS = Int((h + h1) / x + 1 + (L - h - h1) / Y) End IfIf a > 0 And L > 0 And L <= h + h1 Then x = Mid(间距, 1, a) / 10If x < 20 Thenx = x + RElsex = xEnd IfGJS = Int(L / x + 1)End IfIf a = 0 And L > 0 ThenIf 间距< 200 Then间距= 间距+ R * 10Else间距= 间距End IfGJS = Int(L * 10 / 间距+ 1)End IfEnd IfEnd FunctionPublic Function GS(备注As String) As IntegerDim a As Variant, b As Variant, C As Variant, D As Variant, E As Variant Dim F As Variant, F1 As Variant, M As VariantDim BZ As Variant, BZ1 As VariantDim s As Variant, S1 As Variant, M1 As VariantDim SA As Variant, SB As Variant, M2 As VariantDim SZ1 As Variant, SZ2 As VariantIf 备注= "" Then备注= 0End Ifa = InStrRev(备注, ";", Len(备注))b = InStrRev(备注, ":", Len(备注))C = InStrRev(备注, ",", Len(备注))D = InStrRev(备注, "/", Len(备注))E = a + b + C + DF = InStrRev(备注, "筋", Len(备注))F1 = InStrRev(备注, "铁", Len(备注))M = F + F1If E = 0 And M > 0 ThenIf Len(备注) = M ThenGS = 0ElseGS = Mid(备注, M + 1, Len(备注) - M) / 1End IfEnd IfIf E > 0 ThenBZ = Mid(备注, 1, E - 1): BZ1 = Mid(备注, E + 1, Len(备注) - E)s = InStrRev(BZ, "筋", Len(BZ))S1 = InStrRev(BZ, "铁", Len(BZ))M1 = s + S1SA = InStrRev(BZ1, "筋", Len(BZ1))SB = InStrRev(BZ1, "铁", Len(BZ1))M2 = SA + SBIf Len(BZ) = M1 ThenSZ1 = 0ElseSZ1 = Mid(BZ, M1 + 1, Len(BZ) - M1 + 1) / 1End IfIf Len(BZ1) = M2 ThenSZ2 = 0ElseSZ2 = Mid(BZ1, M2 + 1, Len(BZ1) - M2 + 1) / 1 End IfGS = SZ1 + SZ2End IfEnd Function。