Excel(ESteel)自定义函数源代码
Excel自定义函数怎么写

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”。
如何在EXCEL中设计自定义函数

如何在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编写自定义函数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使用的自定义函数
在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”开头。
这样可以避免与内置函数冲突。
Excel(ESteel)自定义函数源代码

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的自定义函数功能来创建我们自己的函数。
在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中的宏编程和自定义函数

掌握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的VBA编程实现自定义数据处理

教你如何通过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编程实现统计分析的功能,如计算数据的平均值、中位数、最大值等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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。