ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4729|回复: 18

[求助] Piny-多條件判斷(VBA)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-21 11:03 | 显示全部楼层 |阅读模式
感謝藍老師協助,考量閱讀便利性,另開新帖求問。

第一問連結
http://club.excelhome.net/thread-739394-1-1.html

第二問連結
http://club.excelhome.net/thread-742825-1-1.html

問題一:利用VBA寫出下述公式,請與基準分析寫在同一個按鈕中,參考模擬結果可看「參考」活頁

2001 AFA
DR18=CX18
公式說明:2001 AFA就等於2001 FA

2002 AFA~2010 AFA
DS18=IF(DH18,(CX18+CY18)/2,CY18),本式可右拉九列
公式說明:若2001 TA不為0,則2002 AFA就等於2001 FA及2002 FA之平均,否則即等於2002 FA

先說明$L$16:$U$16中之公式
即將顯示包含年份者為1,供EB~EN判斷公式用
以本例,B3及B4分別為2004年及2008年,則L16至U16分別為0, 0, 0, 1, 1, 1, 1, 1, 0, 0,可視此為分析年度
V16係將L至U相加,可視此為分析年度數

WA RD to Sales
EB18=SUM(IF(AZ18:BI18>0,AZ18:BI18,BJ18:BS18)*$L$16:$U$16)/SUM($V18:$AE18*$L$16:$U$16)
公式說明:分析年度之RD除以Sales,取加權(需注意RD判斷方式與其下幾個WA之判斷不太一樣)
分子部分:同年度RD若C大於0,則取其值,否則則取U值,即若AZ~BI大於0,則取AZ~BI,否則則取BJ~BS,之後再乘以L~U,取其和
分母部分:同年度之Sales,即V~AE乘以L~U,取其和

WA OE to Sales
EC18=SUM(AP18:AY18*$L$16:$U$16)/SUM($V18:$AE18*$L$16:$U$16)
公式說明:分析年度之OE除以Sales,取加權
分子部分:同年度之OE,即AP~AY乘以L~U,取其和
分母部分:同年度之Sales,即V~AE乘以L~U,取其和

WA FA to Sales
ED18=SUM(DR18:EA18*$L$16:$U$16)/SUM($V18:$AE18*$L$16:$U$16)
公式說明:分析年度之AFA除以Sales,取加權
分子部分:同年度之AFA,即DR~EA乘以L~U,取其和
分母部分:同年度之Sales,即V~AE乘以L~U,取其和

WA 關係人銷貨 to Sales
EE18=SUM(BT18:CC18*$L$16:$U$16)/SUM($V18:$AE18*$L$16:$U$16)
公式說明:分析年度之RP Sales除以Sales,取加權
分子部分:同年度之RP Sales,即BT~CC乘以L~U,取其和
分母部分:同年度之Sales,即V~AE乘以L~U,取其和

WA 關係人進貨 to COGS
EF18=SUM(CD18:CM18*$L$16:$U$16)/SUM(AF18:AO18*$L$16:$U$16)
公式說明:分析年度之RP Purchase除以COGS,取加權
分子部分:同年度之RP Purchase,即CD~CM乘以L~U,取其和
分母部分:同年度之COGS,即AF~AO乘以L~U,取其和

缺少連續X年財務數字
EH18=IF(($EH17="")+(E18=""),"",IF(SUM((V18:AE18>0)*L$16:U$16+(AF18:AO18>0)*L$16:U$16+(AP18:AY18>0)*L$16:U$16)=3*V$16,"接受","拒絕"))
公式說明:分析年度之Sales, COGS, OE是否皆有值
若EH17為空值或E18為空值,則不計算公式,否則則計算(V~AE大於0)乘以L~U+(AF~AO大於0)乘以L~U+(AP~AY大於0)乘以L~U,其和是否為V16之3倍,若是,則傳回接受,否則傳回拒絕

任X年虧損
EI18=IF((EI$17="")+(E18=""),"",IF(EH18="拒絕","拒絕",IF(SUM((CN18:CW18<0)*L$16:U$16)>=EI$16,"拒絕","接受")))
公式說明:分析年度之虧損年度數是否大於等於EI16(EI16公式說明:其實可視為傳回EI17中之國字數字)
注意事項:若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
若EI17為空值或E18為空值,則不計算公式,若EH18為拒絕,則直接傳回拒絕,否則計算(CN~CW小於0)乘以L~U,其和是否大於等於EI16,若是,則傳回拒絕,否則傳回接受

RD to Sales大於(或小於)XX%
EJ18=IF((EJ$17="")+(E18=""),"",IF(OR($EH18:EI18="拒絕"),"拒絕",IF(($C$11<>"")*(EB18<$C$11)+($D$11<>"")*(EB18>$D$11),"拒絕","接受")))
公式說明:若C11有值,則判斷分析年度之WA RD to Sales是否小於C11;若D11有值,則判斷分析年度之WA RD to Sales是否大於D11
注意事項:
若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
C11及D11可能同時有值,也可能同時沒有值
若EJ17為空值或E18為空值,則不計算公式,若EH或EI為拒絕,則直接傳回拒絕,否則計算公式說明部分,若是,則傳回拒絕,否則傳回接受

OE to Sales大於(或小於)XX%
EK18=IF((EK$17="")+(E18=""),"",IF(OR($EH18:EJ18="拒絕"),"拒絕",IF(($C$12<>"")*(EC18<$C$12)+($D$12<>"")*(EC18>$D$12),"拒絕","接受")))
公式說明:若C12有值,則判斷分析年度之WA OE to Sales是否小於C12;若D12有值,則判斷分析年度之WA OE to Sales是否大於D12
注意事項:
若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
C12及D12可能同時有值,也可能同時沒有值
若EK17為空值或E18為空值,則不計算公式,若EH或EI或EJ為拒絕,則直接傳回拒絕,否則計算公式說明部分,若是,則傳回拒絕,否則傳回接受

FA to Sales大於(或小於)XX%
EL18=IF((EL$17="")+(E18=""),"",IF(OR($EH18:EK18="拒絕"),"拒絕",IF(($C$13<>"")*(ED18<$C$13)+($D$13<>"")*(ED18>$D$13),"拒絕","接受")))
公式說明:若C13有值,則判斷分析年度之WA AFA to Sales是否小於C13;若D13有值,則判斷分析年度之WA AFA to Sales是否大於D13
注意事項:
若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
C13及D13可能同時有值,也可能同時沒有值
若EL17為空值或E18為空值,則不計算公式,若EH或EI或EJ或EK為拒絕,則直接傳回拒絕,否則計算公式說明部分,若是,則傳回拒絕,否則傳回接受

關係人銷貨 to Sales大於(或小於)XX%
EM18=IF((EM$17="")+(E18=""),"",IF(OR($EH18:EL18="拒絕"),"拒絕",IF(($C$14<>"")*(EE18<$C$14)+($D$14<>"")*(EE18>$D$14),"拒絕","接受")))
公式說明:若C14有值,則判斷分析年度之WA RP Sales to Sales是否小於C14;若D14有值,則判斷分析年度之WA RP Sales to Sales是否大於D14
注意事項:
若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
C14及D14可能同時有值,也可能同時沒有值
若EM17為空值或E18為空值,則不計算公式,若EH或EI或EJ或EK或EL為拒絕,則直接傳回拒絕,否則計算公式說明部分,若是,則傳回拒絕,否則傳回接受

關係人進貨 to COGS大於(或小於)XX%
EN18=IF((EN$17="")+(E18=""),"",IF(OR($EH18:EM18="拒絕"),"拒絕",IF(($C$15<>"")*(EF18<$C$15)+($D$15<>"")*(EF18>$D$15),"拒絕","接受")))
公式說明:若C15有值,則判斷分析年度之WA RP Purchase to COGS是否小於C15;若D15有值,則判斷分析年度之WA RP Purchase to COGS是否大於D15
注意事項:
若前面判斷有拒絕,則直接傳回拒絕(有一個拒絕,其後都不用再判斷了)
C15及D15可能同時有值,也可能同時沒有值
若EN17為空值或E18為空值,則不計算公式,若EH或EI或EJ或EK或EL或EM為拒絕,則直接傳回拒絕,否則計算公式說明部分,若是,則傳回拒絕,否則傳回接受

[ 本帖最后由 piny 于 2011-7-22 10:31 编辑 ]

201105-piny Ex3 0721.zip

963.48 KB, 下载次数: 37

TA的精华主题

TA的得分主题

发表于 2011-7-22 09:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2002 AFA~2010 AFA
DS18=IF(DI18,(CZ18+DA18)/2,DA18),本式可右拉九列
公式說明:若2002 TA不為0,則2002 AFA就等於2001 FA及2002 FA之平均,否則即等於2002 FA
但是这里公式的内容是:若2002 TA不為0,則2002 AFA就等於2003 FA及2004 FA之平均,否則即等於2004 FA?
是不是公式有误?应该是:
DS18=IF(DI18,(CX18+CY18)/2,CY18),

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-22 10:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 蓝桥玄霜 于 2011-7-22 09:42 发表
2002 AFA~2010 AFA
DS18=IF(DI18,(CZ18+DA18)/2,DA18),本式可右拉九列
公式說明:若2002 TA不為0,則2002 AFA就等於2001 FA及2002 FA之平均,否則即等於2002 FA
但是这里公式的内容是:若2002 TA不為0,則2002 AF ...


不好意思 文字說明和公式說明都錯 1樓敍述及附件已改正
DS18=IF(DH18,(CX18+CY18)/2,CY18),本式可右拉九列
公式說明:若2001 TA不為0,則2002 AFA就等於2001 FA及2002 FA之平均,否則即等於2002 FA

TA的精华主题

TA的得分主题

发表于 2011-7-22 14:18 | 显示全部楼层

请测试。

  1. Sub afa()
  2. Dim Arrldq, Myr&, i&, Brrdr, nd, ks, js, n1
  3. Sheet11.Activate
  4. ks = Val(Left([b3].Value, 4)) - 1
  5. js = Val(Left([b4].Value, 4))
  6. n1 = js - ks + 1
  7. ReDim nd(1 To n1)
  8. For i = 1 To n1
  9.     nd(i) = i + ks - 1
  10. Next

  11. Myr = [f65536].End(xlUp).Row
  12. Arrldq = Range("a18:dq" & Myr)
  13. Range("dr18:en20000").ClearContents
  14. Brrdr = Range("dr18:en" & Myr)
  15. For i = 1 To UBound(Arrldq)
  16.     sale = 0: rdc = 0: rdu = 0: oe = 0: gxrxh = 0: gxrjh = 0: cogs = 0: m = 0: mm = 0: fa = 0
  17.     For ii = 1 To n1
  18.         sale = sale + Arrldq(i, nd(ii) - 2000 + 21)
  19.         rdc = rdc + Arrldq(i, nd(ii) - 2000 + 51)
  20.         rdu = rdu + Arrldq(i, nd(ii) - 2000 + 61)
  21.         oe = oe + Arrldq(i, nd(ii) - 2000 + 41)
  22.         gxrxh = gxrxh + Arrldq(i, nd(ii) - 2000 + 71)  '关系人销货
  23.         gxrjh = gxrjh + Arrldq(i, nd(ii) - 2000 + 81)  '关系人进货
  24.         cogs = cogs + Arrldq(i, nd(ii) - 2000 + 31)  'COGS
  25.         If Arrldq(i, nd(ii) - 2000 + 21) > 0 Then m = m + 1
  26.         If Arrldq(i, nd(ii) - 2000 + 31) > 0 Then m = m + 1
  27.         If Arrldq(i, nd(ii) - 2000 + 41) > 0 Then m = m + 1
  28.         If Arrldq(i, nd(ii) - 2000 + 91) < 0 Then mm = mm + 1
  29.     Next
  30.     For j = 1 To UBound(Brrdr, 2)
  31.         If j = 1 Then
  32.             Brrdr(i, j) = Arrldq(i, j + 101) 'DR18=CX18
  33.         ElseIf j < 11 Then
  34.             If Arrldq(i, j + 111) <> 0 Then 'DS18
  35.                 Brrdr(i, j) = (Arrldq(i, j + 101) + Arrldq(i, j + 102)) / 2
  36.             Else
  37.                 Brrdr(i, j) = Arrldq(i, j + 102)
  38.             End If
  39.         ElseIf j = 11 Then   'EB  WA RD to Sales
  40.             If sale <> 0 Then
  41.             If rdc > 0 Then
  42.                 Brrdr(i, j) = rdc / sale
  43.             Else
  44.                 Brrdr(i, j) = rdu / sale
  45.             End If
  46.             End If
  47.         ElseIf j = 12 Then
  48.             If sale <> 0 Then
  49.                 Brrdr(i, j) = oe / sale  'EC  WA OE to Sales
  50.             End If
  51.         ElseIf j = 13 Then
  52.             For ii = 1 To n1
  53.                 fa = fa + Brrdr(i, nd(ii) - 2000)
  54.             Next
  55.             If sale <> 0 Then
  56.                 Brrdr(i, j) = fa / sale  'ED  WA FA to Sales
  57.             End If
  58.         ElseIf j = 14 Then
  59.             If sale <> 0 Then
  60.                 Brrdr(i, j) = gxrxh / sale  'EE  WA 关系人销货 to Sales
  61.             End If
  62.         ElseIf j = 15 Then
  63.             If cogs <> 0 Then
  64.                 Brrdr(i, j) = gxrjh / cogs  'EE  WA 关系人进货 to COGS
  65.             End If
  66.         ElseIf j = 17 Then
  67.             If m = 3 * n1 Then
  68.                 Brrdr(i, j) = "接受"  'EH  缺少连续五年
  69.             Else
  70.                 Brrdr(i, j) = "拒绝"
  71.             End If
  72.         ElseIf j = 18 Then  'EI  任意X年
  73.             If Brrdr(i, j - 1) = "拒绝" Then
  74.                 Brrdr(i, j) = "拒绝"
  75.             Else
  76.                 If mm >= [EI16].Value Then
  77.                     Brrdr(i, j) = "拒绝"
  78.                 Else
  79.                     Brrdr(i, j) = "接受"
  80.                 End If
  81.             End If
  82.         ElseIf j = 19 Then  'EJ  RD to Sales
  83.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Then
  84.                 Brrdr(i, j) = "拒绝"
  85.             Else
  86.                 If [c11] <> "" Then
  87.                     If Brrdr(i, 11) < [c11].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  88.                 End If
  89.                 If [d11] <> "" Then
  90.                     If Brrdr(i, 11) > [d11].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  91.                 End If
  92.                 Brrdr(i, j) = "接受"
  93.             End If
  94.         ElseIf j = 20 Then  'EK  OE to Sales
  95.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Then
  96.                 Brrdr(i, j) = "拒绝"
  97.             Else
  98.                 If [c12] <> "" Then
  99.                     If Brrdr(i, 12) < [c12].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  100.                 End If
  101.                 If [d12] <> "" Then
  102.                     If Brrdr(i, 12) > [d12].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  103.                 End If
  104.                 Brrdr(i, j) = "接受"
  105.             End If
  106.         ElseIf j = 21 Then  'EJ  FA to Sales
  107.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Then
  108.                 Brrdr(i, j) = "拒绝"
  109.             Else
  110.                 If [c13] <> "" Then
  111.                     If Brrdr(i, 13) < [c13].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  112.                 End If
  113.                 If [d13] <> "" Then
  114.                     If Brrdr(i, 13) > [d13].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  115.                 End If
  116.                 Brrdr(i, j) = "接受"
  117.             End If
  118.         ElseIf j = 22 Then  'EM  关系人销货 to Sales
  119.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Or Brrdr(i, j - 5) = "拒绝" Then
  120.                 Brrdr(i, j) = "拒绝"
  121.             Else
  122.                 If [c14] <> "" Then
  123.                     If Brrdr(i, 14) < [c14].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  124.                 End If
  125.                 If [d14] <> "" Then
  126.                     If Brrdr(i, 14) > [d14].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  127.                 End If
  128.                 Brrdr(i, j) = "接受"
  129.             End If
  130.         ElseIf j = 23 Then  'EN  关系人销货 to Sales
  131.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Or Brrdr(i, j - 5) = "拒绝" Or Brrdr(i, j - 6) = "拒绝" Then
  132.                 Brrdr(i, j) = "拒绝"
  133.             Else
  134.                 If [c15] <> "" Then
  135.                     If Brrdr(i, 15) < [c15].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  136.                 End If
  137.                 If [d15] <> "" Then
  138.                     If Brrdr(i, 15) > [d15].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  139.                 End If
  140.                 Brrdr(i, j) = "接受"
  141.             End If
  142.         
  143.         End If
  144. 100:
  145.     Next
  146. Next
  147. Range("dr18").Resize(UBound(Brrdr), UBound(Brrdr, 2)) = Brrdr
  148. [eh13:en15].ClearContents
  149. Dim jsjj
  150. jsjj = [eh13:en15]
  151. For i = 17 To 23
  152.     For j = 1 To UBound(Brrdr)
  153.         If Brrdr(j, i) = "接受" Then
  154.             jsjj(1, i - 16) = jsjj(1, i - 16) + 1
  155.         Else
  156.             jsjj(2, i - 16) = jsjj(2, i - 16) + 1
  157.         End If
  158.         jsjj(3, i - 16) = jsjj(3, i - 16) + 1
  159.     Next
  160. Next
  161. [eh13].Resize(3, 7) = jsjj

  162. End Sub

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-22 15:02 | 显示全部楼层

回复 4楼 蓝桥玄霜 的帖子

無法運行 如新附件及附圖 煩請再測試 謝謝

另因簡体字貼至代碼區 一律變為? 故某些公式已修改成英文 方便兩邊測試

[ 本帖最后由 piny 于 2011-7-22 15:06 编辑 ]
piny 2011072201.jpg

201105-piny Ex3 0722.zip

967.19 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2011-7-22 15:15 | 显示全部楼层

或者把各个模块中的第一行Option Explicit删除了。

  1. Sub afa()
  2. Dim Arrldq, Myr&, i&, Brrdr, nd, ks, js, n1
  3. Dim sale,rdc,rdu,oe,gxrxh,gxrjh,fa,cogs,m&,mm&,j&,ii&
  4. Sheet11.Activate
  5. ks = Val(Left([b3].Value, 4)) - 1
  6. js = Val(Left([b4].Value, 4))
  7. n1 = js - ks + 1
  8. ReDim nd(1 To n1)
  9. For i = 1 To n1
  10.     nd(i) = i + ks - 1
  11. Next

  12. Myr = [f65536].End(xlUp).Row
  13. Arrldq = Range("a18:dq" & Myr)
  14. Range("dr18:en20000").ClearContents
  15. Brrdr = Range("dr18:en" & Myr)
  16. For i = 1 To UBound(Arrldq)
  17.     sale = 0: rdc = 0: rdu = 0: oe = 0: gxrxh = 0: gxrjh = 0: cogs = 0: m = 0: mm = 0: fa = 0
  18.     For ii = 1 To n1
  19.         sale = sale + Arrldq(i, nd(ii) - 2000 + 21)
  20.         rdc = rdc + Arrldq(i, nd(ii) - 2000 + 51)
  21.         rdu = rdu + Arrldq(i, nd(ii) - 2000 + 61)
  22.         oe = oe + Arrldq(i, nd(ii) - 2000 + 41)
  23.         gxrxh = gxrxh + Arrldq(i, nd(ii) - 2000 + 71)  '关系人销货
  24.         gxrjh = gxrjh + Arrldq(i, nd(ii) - 2000 + 81)  '关系人进货
  25.         cogs = cogs + Arrldq(i, nd(ii) - 2000 + 31)  'COGS
  26.         If Arrldq(i, nd(ii) - 2000 + 21) > 0 Then m = m + 1
  27.         If Arrldq(i, nd(ii) - 2000 + 31) > 0 Then m = m + 1
  28.         If Arrldq(i, nd(ii) - 2000 + 41) > 0 Then m = m + 1
  29.         If Arrldq(i, nd(ii) - 2000 + 91) < 0 Then mm = mm + 1
  30.     Next
  31.     For j = 1 To UBound(Brrdr, 2)
  32.         If j = 1 Then
  33.             Brrdr(i, j) = Arrldq(i, j + 101) 'DR18=CX18
  34.         ElseIf j < 11 Then
  35.             If Arrldq(i, j + 111) <> 0 Then 'DS18
  36.                 Brrdr(i, j) = (Arrldq(i, j + 101) + Arrldq(i, j + 102)) / 2
  37.             Else
  38.                 Brrdr(i, j) = Arrldq(i, j + 102)
  39.             End If
  40.         ElseIf j = 11 Then   'EB  WA RD to Sales
  41.             If sale <> 0 Then
  42.             If rdc > 0 Then
  43.                 Brrdr(i, j) = rdc / sale
  44.             Else
  45.                 Brrdr(i, j) = rdu / sale
  46.             End If
  47.             End If
  48.         ElseIf j = 12 Then
  49.             If sale <> 0 Then
  50.                 Brrdr(i, j) = oe / sale  'EC  WA OE to Sales
  51.             End If
  52.         ElseIf j = 13 Then
  53.             For ii = 1 To n1
  54.                 fa = fa + Brrdr(i, nd(ii) - 2000)
  55.             Next
  56.             If sale <> 0 Then
  57.                 Brrdr(i, j) = fa / sale  'ED  WA FA to Sales
  58.             End If
  59.         ElseIf j = 14 Then
  60.             If sale <> 0 Then
  61.                 Brrdr(i, j) = gxrxh / sale  'EE  WA 关系人销货 to Sales
  62.             End If
  63.         ElseIf j = 15 Then
  64.             If cogs <> 0 Then
  65.                 Brrdr(i, j) = gxrjh / cogs  'EE  WA 关系人进货 to COGS
  66.             End If
  67.         ElseIf j = 17 Then
  68.             If m = 3 * n1 Then
  69.                 Brrdr(i, j) = "接受"  'EH  缺少连续五年
  70.             Else
  71.                 Brrdr(i, j) = "拒绝"
  72.             End If
  73.         ElseIf j = 18 Then  'EI  任意X年
  74.             If Brrdr(i, j - 1) = "拒绝" Then
  75.                 Brrdr(i, j) = "拒绝"
  76.             Else
  77.                 If mm >= [EI16].Value Then
  78.                     Brrdr(i, j) = "拒绝"
  79.                 Else
  80.                     Brrdr(i, j) = "接受"
  81.                 End If
  82.             End If
  83.         ElseIf j = 19 Then  'EJ  RD to Sales
  84.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Then
  85.                 Brrdr(i, j) = "拒绝"
  86.             Else
  87.                 If [c11] <> "" Then
  88.                     If Brrdr(i, 11) < [c11].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  89.                 End If
  90.                 If [d11] <> "" Then
  91.                     If Brrdr(i, 11) > [d11].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  92.                 End If
  93.                 Brrdr(i, j) = "接受"
  94.             End If
  95.         ElseIf j = 20 Then  'EK  OE to Sales
  96.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Then
  97.                 Brrdr(i, j) = "拒绝"
  98.             Else
  99.                 If [c12] <> "" Then
  100.                     If Brrdr(i, 12) < [c12].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  101.                 End If
  102.                 If [d12] <> "" Then
  103.                     If Brrdr(i, 12) > [d12].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  104.                 End If
  105.                 Brrdr(i, j) = "接受"
  106.             End If
  107.         ElseIf j = 21 Then  'EJ  FA to Sales
  108.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Then
  109.                 Brrdr(i, j) = "拒绝"
  110.             Else
  111.                 If [c13] <> "" Then
  112.                     If Brrdr(i, 13) < [c13].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  113.                 End If
  114.                 If [d13] <> "" Then
  115.                     If Brrdr(i, 13) > [d13].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  116.                 End If
  117.                 Brrdr(i, j) = "接受"
  118.             End If
  119.         ElseIf j = 22 Then  'EM  关系人销货 to Sales
  120.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Or Brrdr(i, j - 5) = "拒绝" Then
  121.                 Brrdr(i, j) = "拒绝"
  122.             Else
  123.                 If [c14] <> "" Then
  124.                     If Brrdr(i, 14) < [c14].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  125.                 End If
  126.                 If [d14] <> "" Then
  127.                     If Brrdr(i, 14) > [d14].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  128.                 End If
  129.                 Brrdr(i, j) = "接受"
  130.             End If
  131.         ElseIf j = 23 Then  'EN  关系人销货 to Sales
  132.             If Brrdr(i, j - 1) = "拒绝" Or Brrdr(i, j - 2) = "拒绝" Or Brrdr(i, j - 3) = "拒绝" Or Brrdr(i, j - 4) = "拒绝" Or Brrdr(i, j - 5) = "拒绝" Or Brrdr(i, j - 6) = "拒绝" Then
  133.                 Brrdr(i, j) = "拒绝"
  134.             Else
  135.                 If [c15] <> "" Then
  136.                     If Brrdr(i, 15) < [c15].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  137.                 End If
  138.                 If [d15] <> "" Then
  139.                     If Brrdr(i, 15) > [d15].Value Then Brrdr(i, j) = "拒绝": GoTo 100
  140.                 End If
  141.                 Brrdr(i, j) = "接受"
  142.             End If
  143.         
  144.         End If
  145. 100:
  146.     Next
  147. Next
  148. Range("dr18").Resize(UBound(Brrdr), UBound(Brrdr, 2)) = Brrdr
  149. [eh13:en15].ClearContents
  150. Dim jsjj
  151. jsjj = [eh13:en15]
  152. For i = 17 To 23
  153.     For j = 1 To UBound(Brrdr)
  154.         If Brrdr(j, i) = "接受" Then
  155.             jsjj(1, i - 16) = jsjj(1, i - 16) + 1
  156.         Else
  157.             jsjj(2, i - 16) = jsjj(2, i - 16) + 1
  158.         End If
  159.         jsjj(3, i - 16) = jsjj(3, i - 16) + 1
  160.     Next
  161. Next
  162. [eh13].Resize(3, 7) = jsjj

  163. End Sub
复制代码

201105-piny Ex3 0722.rar

681.62 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-22 16:04 | 显示全部楼层
謝謝回復 由於老師不是用5樓修改 我需暫修改成代碼中部分wording 再行測試

先感謝協助
piny 2011072202.jpg

TA的精华主题

TA的得分主题

发表于 2011-7-22 16:36 | 显示全部楼层
请见附件。

201105-piny Ex3 0722.rar

678.58 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-22 17:12 | 显示全部楼层

請用本附件測試,謝謝

不好意思 AFA好像有錯位 EB列到EF列之值亦與驗算值出入 可是我不會修改

再說明一下需求,可對應附件之「參考」活頁說明

2001 AFA一定等於2001 FA

2002 AFA之計算方法有兩種情況(不需再考慮其他情況)       
情況一:2001 TA大於0,則2002 AFA = ( 2001 FA + 2002 FA ) / 2
情況二:2001 TA為0,則2002 AFA = 2002 FA

2003 AFA至2010 AFA之需求同2002 AFA

WA RD
  1. =(IF(BC18,BC18,BM18)+IF(BD18,BD18,BN18)+IF(BE18,BE18,BO18)+IF(BF18,BF18,BP18)+IF(BG18,BG18,BQ18))/(Y18+Z18+AA18+AB18+AC18)
复制代码
即分析年度中,若該年度RD C大於0,就加總該RD C,否則即加總RD U,再除以Sales之加總

WA OE
  1. =(AS18+AT18+AU18+AV18+AW18)/(Y18+Z18+AA18+AB18+AC18)
复制代码
即分析年度之OE加總,除以Sales之加總
餘WA之算法同WA OE(即分析年度之所求分子加總除以分析年度之Sales或COGS加總)

EH至EN暫未驗算,先解決前面半部! ^^

201105-piny Ex3 0722-第二版.zip

939.9 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2011-7-23 09:57 | 显示全部楼层
这个问题“2001 AFA一定等於2001 FA

2002 AFA之計算方法有兩種情況(不需再考慮其他情況)”,可能是你附件中的数据错了?请看一下附件中我的说明。
后一个问题已经修改。

201105-piny Ex3 0722-材??.rar

626.96 KB, 下载次数: 19

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-23 17:16 , Processed in 0.048814 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表