原创—EXCEL VBA SPC自定义函数包括CPK PPK CP……

合集下载

excel自定义函数 VBA

excel自定义函数 VBA

excel自定义函数一、问题提出excel使用非常方便,举例:通常我们在计算一组数据的平均值时,我们可以在单元格中输入"=average(A1:B4)"(假设数据在单元格"A1:B4"中),或者计算一组数据的和,我们可以在单元格中输入"=sum(A1:B4)"(同样假设数据在单元格"A1:B4"中)。

但是,如果我们要计算的公式太长,或者没有这个公式,我们应该怎么办?比如,计算一组数据的相对标准偏差RSD,我们可以输入"=stdev(A1:B4)/average(A1:B4)",但是,如果我们希望可以和其它内置函数一样,通过输入"=rsd(A1:B4)"来计算,那么该如何做?甚至,我们希望可以这样输入”=rsd(12,56,a1:a6)”这样类似的公式,应该如何做?二、vba代码通过VBA自定义函数来解决上面的问题,代码如下:1.Function RSD(ParamArray X())2.Dim J As Integer, mArr(), K As Integer, Rng As Range3.K = 04.For J = 0 To UBound(X)5.If TypeName(X(J)) = "Range" Then6.For Each Rng In X(J)7.ReDim Preserve mArr(K)8.mArr(K) = Rng.Value9.K = K + 110.Next11.Else12.ReDim Preserve mArr(K)13.mArr(K) = X(J)14.K = K + 115.End If16.Next17.With Application.WorksheetFunction18.RSD = .StDev(mArr) / .Average(mArr)19.End With20.Erase mArr21.End Function三、代码说明1、Function RSD(ParamArray X()) :ParamArray关键字允许提供任意数目的参数。

Excel高级技巧使用VBA编写自定义函数

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表格,其中包含了学生的成绩信息,包括科目和分数。

我们想计算每个科目的平均分。

VBAExcel常用自定义函数

VBAExcel常用自定义函数

VBAExcel常用自定义函数1. 将互换 Excel 列号(数字/字母)Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim i, j, idx As IntegerDim letterArrayletterArray = Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z')If IsNumeric(numOrLetter) ThenIf numOrLetter > 702 ThenMsgBox '只允许输入小于“703”的数字。

'Exit FunctionEnd IfIf numOrLetter > 26 Thenidx = 26For i = 0 To 25For j = 0 To 25idx = idx + 1If idx = numOrLetter ThenexcelColumn_numLetter_interchange = letterArray(i) & letterArray(j)Exit ForEnd IfNext jNext iElseexcelColumn_numLetter_interchange = letterArray(numOrLetter - 1)End IfElsenumOrLetter = UCase(numOrLetter) '转换为大写If Len(numOrLetter) > 1 And Len(numOrLetter) < 3 Thenidx = 26For i = 0 To 25For j = 0 To 25idx = idx + 1If letterArray(i) & letterArray(j) = numOrLetter ThenexcelColumn_numLetter_interchange = idxExit ForEnd IfNext jNext iElseIf Len(numOrLetter) = 1 ThenFor i = 0 To 25If letterArray(i) = numOrLetter ThenexcelColumn_numLetter_interchange = i + 1Exit ForEnd IfNext iElseMsgBox '最多只允许输入2个“字母”。

CPK、PPK及SPC的应用

CPK、PPK及SPC的应用

CPK、PPK及SPC的应用CPK:Complex Process Capability index 的缩写,是现代企业用于表示制成能力的指标。

CPK值越大表示品质越佳。

CPK=min((X-LSL/3s),(USL-X/3s))Cpk——过程能力指数CPK= Min[ (USL- Mu)/3s, (Mu - LSL)/3s]Cpk应用讲议1. Cpk的中文定义为:制程能力指数,是某个工程或制程水准的量化反应,也是工程评估的一类指标。

2. 同Cpk息息相关的两个参数:Ca , Cp.Ca: 制程准确度。

Cp: 制程精密度。

3. Cpk, Ca, Cp三者的关系:Cpk = Cp * ( 1 - |Ca|),Cpk是Ca及Cp两者的中和反应,Ca反应的是位置关系(集中趋势),Cp反应的是散布关系(离散趋势)4. 当选择制程站别用Cpk来作管控时,应以成本做考量的首要因素,还有是其品质特性对后制程的影响度。

5. 计算取样数据至少应有20~25组数据,方具有一定代表性。

6. 计算Cpk除收集取样数据外,还应知晓该品质特性的规格上下限(USL,LSL),才可顺利计算其值。

7. 首先可用Excel的“STDEV”函数自动计算所取样数据的标准差(σ),再计算出规格公差(T),及规格中心值(u). 规格公差=规格上限-规格下限;规格中心值=(规格上限+规格下限)/2;8. 依据公式:,计算出制程准确度:Ca值9. 依据公式:Cp = ,计算出制程精密度:Cp值10. 依据公式:Cpk=Cp ,计算出制程能力指数:Cpk值11. Cpk的评级标准:(可据此标准对计算出之制程能力指数做相应对策)A++级Cpk≥2.0 特优可考虑成本的降低A+ 级2.0 >Cpk ≥ 1.67 优应当保持之A 级1.67 >Cpk ≥ 1.33 良能力良好,状态稳定,但应尽力提升为A+级B 级1.33 >Cpk ≥ 1.0 一般状态一般,制程因素稍有变异即有产生不良的危险,应利用各种资源及方法将其提升为A级C 级1.0 >Cpk ≥ 0.67 差制程不良较多,必须提升其能力D 级0.67 >Cpk 不可接受其能力太差,应考虑重新整改设计制程。

SPC所有公式详细解释及分析

SPC所有公式详细解释及分析

SPC所有公式详细解释及分析SPC(统计过程控制)是一种用于监控和控制过程变异的统计方法。

在SPC中,有许多公式用于计算统计量和确定控制界限,以帮助检测异常和评估过程的稳定性。

本文将详细解释和分析一些常见的SPC公式。

1. 平均值(Mean):平均值是样本数据的算术平均值。

计算平均值的公式是将所有观测值相加,然后除以观测值的个数。

平均值可以用来了解过程的中心位置。

2. 范围(Range):范围表示样本数据的最大值和最小值之间的差异。

计算范围的公式是将样本数据的最大值减去最小值。

范围主要用于检测过程变异的大小。

3. 方差(Variance):方差用于测量样本数据的离散程度。

计算方差的公式是将每个观测值与平均值的差异平方后相加,并除以观测值的个数减1、方差越大,表示过程的波动性越大。

4. 标准差(Standard Deviation):标准差是方差的平方根,用于衡量过程数据的离散程度。

标准差可以用来判断过程的稳定性和控制界限的设定。

标准差越大,表示过程的变异性越大。

5. 控制图界限(Control Limits):控制图界限是用来判断过程是否处于统计控制的范围内。

常用的控制图包括X-bar图和R图。

在X-bar图中,控制界限由平均值加减3倍标准差计算得到。

在R图中,控制界限由平均范围的加减2.66倍平均范围的标准差计算得到。

如果一个点超出了控制界限,则表示该点可能是异常值或过程发生了变化。

6. 过程能力指数(Process Capability Index):过程能力指数用来衡量过程在规格限制内产生产品的能力。

常用的过程能力指数包括Cp、Cpk、Pp和Ppk。

Cp和Pp表示过程的潜在能力,只考虑过程的平均值和规格限制的距离;Cpk和Ppk表示过程的实际能力,同时考虑过程的变异性。

7. 规格上限与规格下限(Specification Limits):规格上限和规格下限是产品或过程的设计要求。

当产品或过程的测量值超出规格限制时,表示产品或过程不符合设计要求,可能需要调整或改进。

excel中161个VBA_自定义函数(超级实用)

excel中161个VBA_自定义函数(超级实用)

VBA自定义函数大全目录'1.函数作用:返回 Column 英文字 (9)'2.函数作用:查询某一值第num次出现的值 (9)'3.函数作用:返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额 (10)'4.函数作用:从形如"123545ABCDE"的字符串中取出数字 (11)'5.函数作用:从形如"ABCD12455EDF"的字符串中取出数字 (11)'6.函数作用:按SplitType取得RangeName串值中的起始位置12 '7.函数作用:将金额数字转成中文大写 (13)'8.函数作用:计算某种税金 (18)'9.函数作用:人民币大、小写转换 (19)'10.函数作用:查汉字区位码 (20)'11.函数作用:把公元年转为农历 (21)'12.函数作用:返回指定列数的列标 (42)'13.函数作用:用指定字符替换某字符 (43)'14.函数作用:从右边开始查找指定字符在字符串中的位置 (43)'15.函数作用:从右边开始查找指定字符在字符串中的位置 (44)'16.函数作用:计算工龄 (44)'17.函数作用:计算日期差,除去星期六、星期日 (45)'18.函数作用:将英文字反转的自定函数 (46)'19.函数作用:计算个人所得税 (46)'20.函数作用:一个能计算是否有重复单元的函数 (47)'21.数字金额转中文大写 (48)'22.函数作用:将数字转成英文 (49)'23.函数作用:人民币大小写转换 (52)'24.函数作用:获取区域颜色值 (53)'25.函数作用:获取活动工作表名 (53)'26.函数作用:获取最后一行行数 (54)'27.函数作用:判断是否连接在线 (54)'28.函数作用:币种转换 (54)'29.函数作用:检验工作表是否有可打印内容 (55)'30.函数作用:查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出现时的位置,返回零表示没找到。

Excel中使用VBA语言自定义分支函数的方法与实例

Excel中使用VBA语言自定义分支函数的方法与实例

Excel中使用VBA语言自定义分支函数的方法与实例Excel是一款功能强大的电子表格软件,它提供了丰富的函数库,可以满足大部分用户的需求。

然而,有时候我们需要根据自己的具体需求来定义一些特定的函数,这时候就可以使用VBA语言来实现自定义分支函数。

VBA(Visual Basic for Applications)是一种用于Microsoft Office应用程序的宏编程语言,它可以扩展Excel的功能,使用户能够自定义函数、自动化任务等。

下面将介绍一种使用VBA语言自定义分支函数的方法,并给出一个实例。

首先,打开Excel,按下Alt+F11键,进入VBA编辑器界面。

在VBA编辑器中,可以看到左侧的项目资源管理器窗口和右侧的代码窗口。

接下来,我们需要在项目资源管理器窗口中找到自己的工作簿,双击打开,然后在代码窗口中插入一个新的模块。

在新的模块中,我们可以编写自己的VBA代码。

在编写VBA代码之前,我们需要先了解一下分支函数的概念。

分支函数是指根据不同的条件执行不同的操作或返回不同的结果的函数。

在Excel中,常见的分支函数有IF函数和CASE函数。

但是有时候,IF函数和CASE函数的功能无法满足我们的需求,这时候就需要自定义分支函数。

下面是一个使用VBA语言自定义分支函数的实例。

假设我们需要根据学生的成绩来判断他们的等级,90分以上为优秀,80分以上为良好,70分以上为中等,60分以上为及格,60分以下为不及格。

我们可以使用VBA语言来实现这个自定义分支函数。

首先,在代码窗口中插入以下代码:```vbaFunction Grade(score As Double) As StringIf score >= 90 ThenGrade = "优秀"ElseIf score >= 80 ThenGrade = "良好"ElseIf score >= 70 ThenGrade = "中等"ElseIf score >= 60 ThenGrade = "及格"ElseGrade = "不及格"End IfEnd Function```在上述代码中,我们定义了一个名为Grade的函数,它接受一个参数score,表示学生的成绩。

SPC(Cpk、Ppk等)工程能力计算公式和Excel制图1

SPC(Cpk、Ppk等)工程能力计算公式和Excel制图1
控制图选用指南程序
确定要制定控 制图的特性
是计量 型数据

关心的是不 合格品-即坏 零件百分比

关心的是不合 格数-即单位 零件不合格数
是 是
样品容量 是否恒定?


使用P图
样品容量 是否恒定?
是 使用nP或P图
性质上是否是 均勻或不能按 子 组 取 样- 例 如︰化学溶液,
是 使用C或U图
子组均值 是否能方 便地计算?


使用中位数图
是 是
使用单值图X--MR
子组容 量大于 或等于

使用 X--R

是否能方 便地计算 组的S值?
Hale Waihona Puke 否使用 X--R是
使用 X--S图

使用U图
图 使用中位数图
使用 --R图
使用 --R图

原创—EXCELVBASPC自定义函数包括CPKPPKCP……

原创—EXCELVBASPC自定义函数包括CPKPPKCP……

原创—EXCELVBASPC自定义函数包括CPKPPKCP……'################## stdevR=average(max-min)/R系数组内差Function stdevR(ParamArray rng() As Variant) As VariantDim rang As Range, rngi As Range, T As Single, F As Single, i As Integer, e As IntegerDim trrDim arr()Dim brr()For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextn = rang.Cells.Countaa = rang.Columns.Countbb = rang.Rows.Countcc = Application.WorksheetFunction.Ceiling(n / 5, 1)If aa > 1 ThenReDim arr(1 To bb)For i = 1 To bbSet rngi = rang(i, 1).Resize(1, aa)arr(i) = Application.Max(rngi.Value) - Application.Min(rngi) NextF = Application.WorksheetFunction.Average(arr)trr =[{0,1.128,1.693,2.059,2.326,2.534,2.704,2.847,2.97,3.078,3.17 3,3.258,3.336,3.407,3.472,3.532,3.588,3.64,3.689,3.735,3.778,3.819,3.858}]T = trr(aa)stdevR = F / TElsee = 0ReDim brr(1 T o cc)For i = 1 To ccSet rngi = rang(1, 1).Resize(5, 1).Offset(e, 0)brr(i) = Application.Max(rngi.Value) - Application.Min(rngi)e = e + 5NextF = Application.WorksheetFunction.Average(brr)T = 2.326stdevR = F / TEnd IfEnd Function'################## ppk=min(ppu,ppl)=(1-k)*pp 整体的过程能力指数带中心值的Function ppk(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single, k As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2)NextSE = Sqr(SumN / (n - 1))k = Abs(((((USL + LSL) / 2) - AV) / (T / 2)))If USL = "" And LSL = "" Or (1 - k) * T / (SE * 6) < 0 Thenppk = "*"Elseppk = (1 - k) * T / (SE * 6)End IfEnd Function'################## cpk=min(cpu,cpl)=(1-k)*cp 组间的过程能力指数带中心值的Function cpk(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single, k As Single, aa As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)k = Abs(((((USL + LSL) / 2) - AV) / (T / 2)))If USL = "" And LSL = "" Or (1 - k) * (T / (SE * 6)) < 0 Thencpk = "*"Elsecpk = (1 - k) * (T / (SE * 6))End IfEnd Function'################## ppu=(USL-X)/3*S 上限过程能力指数Function ppu(USL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2) '计算平方和NextSE = Sqr(SumN / (n - 1))If USL = "" Or (USL - AV) / (3 * SE) < 0 Thenppu = "*"Elseppu = (USL - AV) / (3 * SE)End IfEnd Function'################## ppu=(USL-X)/3*S 上限过程能力指数Function CPU(USL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)If USL = "" Or (USL - AV) / (3 * SE) < 0 ThenCPU = "*"ElseCPU = (USL - AV) / (3 * SE)End IfEnd Function'################## ppl=(X-LSL)/3*S 下限过程能力指数Function ppl(LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2) '计算平方和NextSE = Sqr(SumN / (n - 1))If LSL = "" Or (AV - LSL) / (3 * SE) < 0 Thenppl = "*"Elseppl = (AV - LSL) / (3 * SE)End IfEnd FunctionFunction cpl(LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Single, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)n = (AV - LSL) / (3 * SE)If LSL = "" Or n < 0 Thencpl = "*"Elsecpl = nEnd IfEnd Function'################## k=((USL+LSL)/2)-X/(T/2) 偏移系数Function k(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)If USL = "" Or LSL = "" Thenk = "*"Elsek = Application.WorksheetFunction.RoundUp(Abs(((USL + LSL) / 2) - AV) / (T / 2), 3)End IfEnd Function'##################PP=(USL-LSL)/ 能力指数Function pp(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rang 'rngSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2)NextSE = Sqr(SumN / (n - 1))If USL = "" Or LSL = "" Or T / (SE * 6) < 0 Thenpp = "*"Elsepp = T / (SE * 6)End IfEnd Function'################## CP=(USL-LSL)/6Q 能力指数Function cp(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)If USL = "" Or LSL = "" Or T / (SE * 6) < 0 Thencp = "*"Elsecp = T / (SE * 6)End IfEnd Function'################## Fpu(cap)=1-NORMDIST(3*CPU) 超出规格上限概率Function Fp(ByVal PU) As VariantDim i As DoubleIf Application.WorksheetFunction.IsNumber(PU) = True Theni = 3 * PUFp = Format((1 - Application.WorksheetFunction.NormSDist(i)) * 1000000, "Fixed") ElseFp = 0End If'Fp = i '1 - Application.WorksheetFunction.NormSDist(i)End Function'################## 正态随机数Function RANDS(USL As Variant, LSL As Variant, WS As Variant, CPK As Variant, Optional JRSAs Integer, Optional SEE As Integer) As VariantDim AV As Single, T As Single, Su As Single, SE As Single, k As SingleT = USL - LSLk = USL + LSLAV = k / 2If SEE = 0 ThenSE = T / CPK / 6ElseSE = T / CPK / SEEEnd IfSu = Application.WorksheetFunction.RoundUp(0.0000000000001, WS) If JRS = 0 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.Work sheetFunction.Ceiling(Application.WorksheetFunction.NormInv(Rnd(), AV, SE), Su), WS)End IfIf JRS = 2 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.Work sheetFunction.Ceiling(Application.WorksheetFunction.NormInv(Rnd(), AV, SE), Su * 2), WS)End IfIf JRS = 1 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.Work sheetFunction.Ceiling(Application.WorksheetFunction.NormInv(Rnd(), AV, SE), Su * 2) + Su, WS) End IfEnd Function'***************************************功能:函数帮助文件Sub Fuhelp(control As IRibbonControl)Dim 函数名称 As String '函数名称Dim 函数描述 As String '函数描述Dim 函数类别 As String '函数类别Dim 参数个数(2) As String '函数参数描述数组个数Dim arr()函数类别 = "品质使用函数"参数个数(0) = "函数参数第1个,规格上限"参数个数(1) = "函数参数第2个,规格下限"参数个数(2) = "函数参数第3个,用于计算的数据区域"ReDim arr(1 To 4)arr = [{"cpk","ppk","cp","pp"}]For i = 1 To 4Call Application.MacroOptions(Macro:=arr(i), Description:=函数描述, Category:=函数类别, ArgumentDescriptions:=参数个数) 函数名称 = arr(i)函数描述 = "返回数据的" & 函数名称 & "值"Next i End Sub。

Excel-VBA对自定义函数及其参数添加说明

Excel-VBA对自定义函数及其参数添加说明

Excel-VBA对自定义函数及其参数添加说明应用场景自定义函数及参数默认是没有功能说明的,使用不方便知识要点1:Application.MacroOptions 方法对应于“宏选项”对话框中的选项。

还可使用此方法将用户定义函数(UDF) 显示在“插入函数”对话框的内置类别或新类别中2:表达式.MacroOptions(Macro, Description, HasMenu, MenuText, HasShortcutKey, ShortcutKey, Category, StatusBar, HelpContextID, HelpFile)3:Application.ExecuteExcel4Macro 方法,执行一个Microsoft Excel 4.0 宏函数,然后返回此函数的结果。

返回结果的类型取决于函数的类型4:使用宏表函数,REGISTER对指定的函数添加功能说明及对参数添加说明,它必须通过application.executeexce14macro调用5:REGISTER有11个参数,其中5个参数对应与函数名称,函数的功能说明,函数类别,参数名称和参数含义,只需要在过程中指定这些参数,对应的函数就可以产生在指定类别中Sub 加入函数说明()'对自定义函数指定说明Application.MacroOptions macro:='Only', Description:='功能,返回区域中的不重复值,参数:有两个,第一个为必选参数,用于指定区域;第二个参数为可选参数,代表序号,即返回不重复值的第几个,如果忽略第二参数,那么函数返回数组结果,否则通过第二参数控制返回第几个值。

', Category:='重复值处理'End SubFunction 求值(参数一 As Range) As Variant求值 = Evaluate(参数一.Text)End FunctionSub Auto_Open() '打开工作薄时执行Register '求值', '新函数', '对表达式转换成值', '参数一', '引用的表达式所在的单元格' '执行注册End SubSub Register(函数名称 As String, 函数类别 As String, 函数功能As String, 参数名称 As String, 参数含义 As String, Optional FLib As String = 'CharNextA')Application.ExecuteExcel4Macro 'REGISTER(' & '''USER32''' & ',''' & FLib & ''',''' & 'p' & ''',''' & 函数名称 & ''',''' _& 参数名称 & ''',1,''' & 函数类别 & ''',,,''' & 函数功能 & ''',''' & 参数含义 & ''')'End SubSub Auto_close() '关闭删除注册信息Application.ExecuteExcel4Macro 'Register(' & '''USER32''' & ',''CharPrevA'',''p'',''' & '求值' & ''' ,,0)'End Sub。

Cp、Cpk、Pp、Ppk 详解

Cp、Cpk、Pp、Ppk 详解

Cp、Cpk、Pp、Ppk 详解1. 背景Cp, Cpk, Pp 和 Ppk这几个概念在工业制造领域的应用已经很普遍了,但是这些概念往往被混淆。

网上的解释各执其词,而且错误百出(如下图)。

就连国外网站上的讨论也是众说不一⑥。

当这些概念用中文解释时,那就更复杂了。

比如这些概念里共有的"P" 是一个简单的英语词"process",可被翻译成什么的都有,比如"过程,工艺,工序,制程…"等等。

可想而知加了其他词以后就更复杂了。

为了方便起见,以下process均采用"过程"。

笔者2003年在学校里就学习了这些概念,而且在之后的十几年的工作中也不断地在应用这些概念。

但始终觉得没有完全理解其本质区别。

多年下来一直都是在照猫画虎,套公式,得出结果,做出判断,完事。

更有甚者,现在有现成的计算机软件,点一点鼠标就可以得到结果。

更不用知道其后台是如何计算的了。

一般来说,能做到此,也就可以了。

所以下面的解析是为有意愿深入了解这些概念的差别的读者准备的。

Cp, Cpk, Pp 和 Ppk都是用来体现过程能力的指标①②,它们是用来测量过程能力的指数(process capability index),不是过程能力本身。

很多人只知道计算这些指数,却并不知道过程的固有能力到底是什么。

那什么是过程能力(process capability)?2. 过程能力的定义过程能力是指过程本身在没有外因干预、没有漂移(drift)(即统计学意义上可控under statistical control)的情况下其产出品的均一程度 (uniformity of product)②③。

不难理解,我们不可能直接测量过程本身,而只能通过测量其产出品的某个特性来体现其能力③。

通常用被测量的特性的离散程度,即标准方差,(西格玛),来表示过程能力。

而且过程能力被量化为,即其总宽度为6个西格玛。

SPC统计制程管制(PPK&CPK)

SPC统计制程管制(PPK&CPK)

.0.50 0.60 0.70 0.80 0.90 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80
2012-10-6
9
2.实际过程能力指数Cpk
K Cp Cpk的关系
2012-10-6
16
3.过程能力的评价与处置
四级加工Cpk≤0.67 ●当Cpk≤0.67 时,T≤4S,不合格品率p≥4.55%(45500PPM)。
●过程能力严重不足,产品质量水平很低,不合格品率高。
●措施: (1)必须立即分析原因,采取措施 ,提高过程能力; (2)为了保证产品的出厂质量,应通过全数检查; (3)若更改设计、放宽规格要求不致影响产品质量或从经济性考虑更为合理时 也可以用更改设计的方法以解决,但要慎重处理。
2012-10-6
13
3.过程能力的评价与处置
一级加工1.67≥Cpk>1.33
●当1.67≥Cpk>1.33 时,10S≥T>8S,不合格品率0.00006%(0.6PPM)≤p< 0.006%(60PPM)。 ●对精密加工而言,过程能力适宜;对一般加工来说过程能力仍比较充裕,有一定贮备 。 ●措施: (1)允许小的外来波动; (2)非关键工序可放宽检验; (3)工序控制的抽样间隔可适当放宽。
ST。因
2012-10-6
19
※过程能力指数Cpm和Cpmk
为了强调质量特性偏离目标值造成的质量损失,当把目标值 m引入过程能力指数 时,就得到了两个新的过程能力指数Cpm和Cpmk
均值-极差控制图用:R/d2
σ=
均值-标准差控制图用:S/c4 单值-移动极差差控制图用:MR/d2

Cp,Cpk,Pp和Ppk之间的关系详解

Cp,Cpk,Pp和Ppk之间的关系详解

Cp,Cpk,Pp和Ppk之间的关系详解所有的质量经理都想知道事情是否“在控制之中”。

“受控”通常意味着过程(Process)正在生产100%合格的产品(Product)。

为此,要有一个好的过程能力或性能指数来做评价过程(Process)。

能力与性能指数有四个能力与性能指数最为常用。

虽然不断有人提出了许多其他的指数,但这四个指数有效地总结了过程和产品规格之间的关系。

Cp能力指数使用上下规格之间的差异来定义可用范围,并将其与以最小方差运行的过程所需的通用范围进行比较。

所需的通用范围为六倍的组内标准差,即6 sigma(x)。

因此,Cp是指数据的规格范围是波动范围的多少倍,这个值越高,说明数据波动幅度相对越小,过程能力强。

然而,Cp却没有考虑数据的居中性,有可能数据波动范围很小,但是却是在规格范围外波动。

Cpk则在Cp的基础上还考虑了数据波动的中心位置,从而可以用来衡量过程的中心能力。

下面这张图说明了Cp与Cpk之间的差异,数据的波动幅度一致,当数据中心偏移时,Cp不变,但Cpk就变小了。

Pp性能指数使用上下规格之间的差异作为可用范围,并将其与过去过程实际表现的标准差做比较。

在计算能力指数时,我们用的是组内标准差Sigma(X),而在计算性能指数时,用的将是样本标准差s。

因此,性能指数Pp将可用于评价过去的过程表现。

但是,它不考虑过去过程表现的中心位置中心性能指数Ppk则是通过来定义过程的有效可用范围将过程中心位置考虑了进来。

这些指数是如何相互关联的?这四个指数之间的关系如下图所示。

图上半部分的Cp与Cpk描述的是过程的潜在能力,下半部分的Pp与Ppk描述的是过程过去所表现出来的性能。

随着一个过程的运行越来越接近发挥其全部潜力,那么Pp与Ppk将向上移动,接近上层的Cp与Cpk。

上图的解读:左侧两个指数假定了过程中心与规范中心重叠,而右侧考虑了二者之间偏离的程度。

当过程中心接近规格的中心时,右边的值会向左边的值靠近。

在Excel中使用VBA编写自定义函数的方法

在Excel中使用VBA编写自定义函数的方法

在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的数的平均值。

制程能力分析_PPK_CPK

制程能力分析_PPK_CPK
Ppk & Cpk 差異介紹
製程性能指數Pp、Ppk介紹

製程性能指數(process performance index)

(或是稱長期製程能力指數)

主要特性:
不要求製程穩定,即不一定要求輸出的品質特性,要服從 常態分配。 n 標準差的要求: (X X ) 2


主要應用:


Kodak/Moto/仁寶


東聚的 Cpk 表格 => 暫不會進行修改
公式與應用為
Ppk的定義

需了解 Ppk & Cpk 的差異

Q&A

End
n
n 1
製程能力指數Cp、Cpk介紹

製程能力指數(process capability index)乃要求製程穩定, 用的都是短期數據之計算,又稱短期製程能性一定服從常態分配 標準差 的要求:
ˆ R / d2

主要應用:
製程能力管理
: 由逐批的抽樣樣本進行計算 包含組內變異 & 組間變異 => Minitab 會顯示
移的性能指數。公式為:
(2)PPK:製程性能指數:說明製程有無偏移的性 能指數。公式為:
USL LSL Ppk min or ˆ ˆ 3 3 s s
USL LSL Pp ˆs 6
標準差計算公式
ˆs
2 ( X X ) i i 1
輸出的品質特性,不一定要服從常態分配
輸出的品質特性,一定要服從常態分配
Cpk


標準差的要求:
Ppk
Cpk

ppk,cpk,mk三者的区别及计算、首先我们先说明Pp、Cp两者的定义及公式

ppk,cpk,mk三者的区别及计算、首先我们先说明Pp、Cp两者的定义及公式

ppk,cpk,mk三者的区别及计算、首先我们先说明Pp、Cp两者的定义及公式Cp(Capability Indies of Process):稳定过程的能力指数,定义为容差宽度除以过程能力,不考虑过程有无偏移,一般表达式为:Pp(Performance Indies of Process):过程性能指数,定义为不考虑过程有无偏移时,容差范围除以过程性能,一般表达式为:(该指数仅用来与Cp及Cpk对比,或/和Cp、Cpk一起去度量和确认一段时间内改进的优先次序)CPU:稳定过程的上限能力指数,定义为容差范围上限除以实际过程分布宽度上限,一般表达式为:CPL:稳定过程的下限能力指数,定义为容差范围下限除以实际过程分布宽度下限,一般表达式为:2、现在我们来阐述Cpk、Ppk的含义Cpk:这是考虑到过程中心的能力(修正)指数,定义为CPU与CPL的最小值。

它等于过程均值与最近的规范界限之间的差除以过程总分布宽度的一半。

即:Ppk:这是考虑到过程中心的性能(修正)指数,定义为:或的最小值。

即:其实,公式中的K是定义分布中心μ与公差中心M的偏离度,μ与M的偏离为ε=| M-μ|3、公式中标准差的不同含义①在Cp、Cpk中,计算的是稳定过程的能力,稳定过程中过程变差仅由普通原因引起,公式中的标准差可以通过控制图中的样本平均极差估计得出。

因此,Cp、Cpk一般与控制图一起使用,首先利用控制图判断过程是否受控,如果过程不受控,要采取措施改善过程,使过程处于受控状态。

确保过程受控后,再计算Cp、Cpk。

②由于普通和特殊两种原因所造成的变差,可以用样本标准差S来估计,过程性能指数的计算使用该标准差。

4、几个指数的比较与说明① 无偏离的Cp表示过程加工的均匀性(稳定性),即“质量能力”,Cp越大,这质量特性的分布越“苗条”,质量能力越强;而有偏离的Cpk表示过程中心μ与公差中心M的偏离情况,Cpk越大,二者的偏离越小,也即过程中心对公差中心越“瞄准”。

使用VBA实现Excel自定义函数的开发方法

使用VBA实现Excel自定义函数的开发方法

使用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编辑器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

'################## stdevR=average(max-min)/R系数组内差Function stdevR(ParamArray rng() As Variant) As VariantDim rang As Range, rngi As Range, T As Single, F As Single, i As Integer, e As IntegerDim trrDim arr()Dim brr()For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextn = rang.Cells.Countaa = rang.Columns.Countbb = rang.Rows.Countcc = Application.WorksheetFunction.Ceiling(n / 5, 1)If aa > 1 ThenReDim arr(1 To bb)For i = 1 To bbSet rngi = rang(i, 1).Resize(1, aa)arr(i) = Application.Max(rngi.Value) - Application.Min(rngi)NextF = Application.WorksheetFunction.Average(arr)trr =[{0,1.128,1.693,2.059,2.326,2.534,2.704,2.847,2.97,3.078,3.173,3.258,3.336,3.407,3.472,3.532,3.58 8,3.64,3.689,3.735,3.778,3.819,3.858}]T = trr(aa)stdevR = F / TElsee = 0ReDim brr(1 To cc)For i = 1 To ccSet rngi = rang(1, 1).Resize(5, 1).Offset(e, 0)brr(i) = Application.Max(rngi.Value) - Application.Min(rngi)e = e + 5NextF = Application.WorksheetFunction.Average(brr)T = 2.326stdevR = F / TEnd IfEnd Function'################## ppk=min(ppu,ppl)=(1-k)*pp 整体的过程能力指数带中心值的Function ppk(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single, k As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2)NextSE = Sqr(SumN / (n - 1))k = Abs(((((USL + LSL) / 2) - AV) / (T / 2)))If USL = "" And LSL = "" Or (1 - k) * T / (SE * 6) < 0 Thenppk = "*"Elseppk = (1 - k) * T / (SE * 6)End IfEnd Function'################## cpk=min(cpu,cpl)=(1-k)*cp 组间的过程能力指数带中心值的Function cpk(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single, k As Single, aa As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)k = Abs(((((USL + LSL) / 2) - AV) / (T / 2)))If USL = "" And LSL = "" Or (1 - k) * (T / (SE * 6)) < 0 Thencpk = "*"Elsecpk = (1 - k) * (T / (SE * 6))End IfEnd Function'################## ppu=(USL-X)/3*S 上限过程能力指数Function ppu(USL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2) '计算平方和NextSE = Sqr(SumN / (n - 1))If USL = "" Or (USL - AV) / (3 * SE) < 0 Thenppu = "*"Elseppu = (USL - AV) / (3 * SE)End IfEnd Function'################## ppu=(USL-X)/3*S 上限过程能力指数Function CPU(USL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)If USL = "" Or (USL - AV) / (3 * SE) < 0 ThenCPU = "*"ElseCPU = (USL - AV) / (3 * SE)End IfEnd Function'################## ppl=(X-LSL)/3*S 下限过程能力指数Function ppl(LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rangSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2) '计算平方和NextSE = Sqr(SumN / (n - 1))If LSL = "" Or (AV - LSL) / (3 * SE) < 0 Thenppl = "*"Elseppl = (AV - LSL) / (3 * SE)End IfEnd FunctionFunction cpl(LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Single, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)n = (AV - LSL) / (3 * SE)If LSL = "" Or n < 0 Thencpl = "*"Elsecpl = nEnd IfEnd Function'################## k=((USL+LSL)/2)-X/(T/2) 偏移系数Function k(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)If USL = "" Or LSL = "" Thenk = "*"Elsek = Application.WorksheetFunction.RoundUp(Abs(((USL + LSL) / 2) - AV) / (T / 2), 3)End IfEnd Function'##################PP=(USL-LSL)/ 能力指数Function pp(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single For Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.CountAV = Application.WorksheetFunction.Average(rang)For Each r In rang 'rngSumN = SumN + Application.WorksheetFunction.Power(r - AV, 2)NextSE = Sqr(SumN / (n - 1))If USL = "" Or LSL = "" Or T / (SE * 6) < 0 Thenpp = "*"Elsepp = T / (SE * 6)End IfEnd Function'################## CP=(USL-LSL)/6Q 能力指数Function cp(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As VariantDim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As SingleFor Each r In rngIf rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r)For Each c In rNextNextT = USL - LSLn = rang.Cells.Countaa = rang.Columns.CountAV = Application.WorksheetFunction.Average(rang)SE = stdevR(rang)If USL = "" Or LSL = "" Or T / (SE * 6) < 0 Thencp = "*"Elsecp = T / (SE * 6)End IfEnd Function'################## Fpu(cap)=1-NORMDIST(3*CPU) 超出规格上限概率Function Fp(ByVal PU) As VariantDim i As DoubleIf Application.WorksheetFunction.IsNumber(PU) = True Theni = 3 * PUFp = Format((1 - Application.WorksheetFunction.NormSDist(i)) * 1000000, "Fixed")ElseFp = 0End If'Fp = i '1 - Application.WorksheetFunction.NormSDist(i)End Function'################## 正态随机数Function RANDS(USL As Variant, LSL As Variant, WS As Variant, CPK As Variant, Optional JRSAs Integer, Optional SEE As Integer) As VariantDim AV As Single, T As Single, Su As Single, SE As Single, k As SingleT = USL - LSLk = USL + LSLAV = k / 2If SEE = 0 ThenSE = T / CPK / 6ElseSE = T / CPK / SEEEnd IfSu = Application.WorksheetFunction.RoundUp(0.0000000000001, WS)If JRS = 0 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.WorksheetFunction.Ceiling(Application.Wor ksheetFunction.NormInv(Rnd(), AV, SE), Su), WS)End IfIf JRS = 2 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.WorksheetFunction.Ceiling(Application.Wor ksheetFunction.NormInv(Rnd(), AV, SE), Su * 2), WS)End IfIf JRS = 1 ThenRANDS =Application.WorksheetFunction.RoundUp(Application.WorksheetFunction.Ceiling(Application.Wor ksheetFunction.NormInv(Rnd(), AV, SE), Su * 2) + Su, WS)End IfEnd Function'***************************************功能:函数帮助文件Sub Fuhelp(control As IRibbonControl)Dim 函数名称 As String '函数名称Dim 函数描述 As String '函数描述Dim 函数类别 As String '函数类别Dim 参数个数(2) As String '函数参数描述数组个数Dim arr()函数类别 = "品质使用函数"参数个数(0) = "函数参数第1个,规格上限"参数个数(1) = "函数参数第2个,规格下限"参数个数(2) = "函数参数第3个,用于计算的数据区域"ReDim arr(1 To 4)arr = [{"cpk","ppk","cp","pp"}]For i = 1 To 4Call Application.MacroOptions(Macro:=arr(i), Description:=函数描述, Category:=函数类别, ArgumentDescriptions:=参数个数)函数名称 = arr(i)函数描述 = "返回数据的" & 函数名称 & "值"Next i End Sub。

相关文档
最新文档