ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

[µo°Ý] ½Ð°Ý¦p¦ó¥Îexcel VBA¼g¤@­Ó¥H¥ý¶i¥ý¥Xªº¤è¦¡¨Ó¨ú±o²£«~ªº¼Æ¶q»P¥­§¡»ù®æ

²³æ»¡ ´N¬O²Ä¤@µ§¥X³f¥Î²Ä¤@µ§¶i³f¥h¦©°£(¥Ñ¤W¦Ó¤U),¦A­pºâ¾l¼Æªº¥­§¡»ù!!
¨º¦pªG²Ä¤Gµ§¥X³f¤j©ó²Ä¤@µ§®w¦s®É....§A­n¦p¦óºâ??

TOP

¥»©«³Ì«á¥Ñ white5168 ©ó 2012-4-29 13:34 ½s¿è

¨º¦pªG²Ä¤Gµ§¥X³f¤j©ó²Ä¤@µ§®w¦s®É....§A­n¦p¦óºâ??

§Ú«e­±¦³¸Ô²ÓÁ|¨Ò,½Ð¥J²Ó¾\Ū,
¤p§Ì­è±µÄ²Excel VBA¹ê¦b«Ü¤£¼ôªR,½Ð¦U¦ì¤j¤jÀ°¦£

­ì©l¸ê®Æ
                    °Ó«~     »ù®æ   ¶R¶i   ½æ¥X
20120401      A    2000   500         0
20120402      B     1500       0    100
20120403      A    2020   400         0
20120404      A    2050   400    200
20120405      A    2010        0    200

Ãþ¥ý¶R¶i¥ý½æ¥X
20120404µ²ºâ®É, 20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»,»Ý¥H·í®É³Ñ¾l¨Ó­pºâ§Y(2000*500- 2050*200)/(500-200)=1966.67,¼Æ¶q³Ñ¬°500-200=300,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶qÁÙ¦³³Ñ300(³o¬O§Ú»Ý­nªº)
                       °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    1966.67   300         0
20120402      B     1500              0    100
20120403      A    2020          400         0
20120404      A    2050          400         0
20120405      A    2010               0    200
¦Ó­pºâ¨ì20120404¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(1966.67*300 + 2020*400 + 2050*400)/(300+400+400)=2016.365,¼Æ¶q³Ñ¬°300+400+400=1100(³o¬O§Ú»Ý­nªº)

20120405µ²ºâ®É, 20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»,»Ý¥H·í®É³Ñ¾l¨Ó­pºâ§Y(1966.67*300-2010*200)/(300-200)=1880,¼Æ¶q³Ñ¬°300-200=100,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶qÁÙ¦³³Ñ100(³o¬O§Ú»Ý­nªº)
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    1880          100         0
20120402      B     1500              0    100
20120403      A    2020          400         0
20120404      A    2050          400         0
20120405      A    2010               0         0
¦Ó­pºâ¨ì20120405¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(1880*100+ 2020*400 + 2050*400)/(100+400+400)=2017.78,¼Æ¶q³Ñ¬°100+400+400=900(³o¬O§Ú»Ý­nªº)

²Ä¤Gµ§¥X³f¤j©ó²Ä¤@µ§®w¦sªº»¡©ú¦p¤U
¦pªG¦A¦h£¸­Ó20120406ªº¥æ©ö¦p¤U
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    1880          100         0
20120402      B     1500              0    100
20120403      A    2020          400         0
20120404      A    2050          400         0
20120405      A    2010               0         0
20120406      A    2040               0    300

20120406µ²ºâ®É, 20120401»P20120403ªºA²£«~¥­§¡¶R¶i¦¨¥»,»Ý¥H·í®É³Ñ¾l¨Ó­pºâ§Y(1880*100+2020*400-2040*300)/(100+400-300)=1920,¼Æ¶q³Ñ¬°100+400-300=200,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶q¤w¸g¨S¦³³Ñ¤F,»Ý­n20120403ªº¼Æ¶q¨Ó¤ä´©¤~¦æ,©Ò¥H20120403³Ñ¾l200(³o¬O§Ú»Ý­nªº)
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    1880               0         0
20120402      B    1500               0    100
20120403      A    2020          200         0
20120404      A    2050          400         0
20120405      A    2010               0         0
20120406      A    2040               0         0
¦Ó­pºâ¨ì20120406¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(2020*200 + 2050*400)/(200+400)=2040,¼Æ¶q³Ñ¬°200+400=600(³o¬O§Ú»Ý­nªº)

TOP

¦^´_ 12# white5168
A ¶µ²£«~²£«~ªº³B²z¹Lµ{·~¤w¤F¸Ñ¡A
¤é´Á¡B°Ó«~¡B»ù®æ¡B¶R¶i¡B½æ¥X¡B²£«~§¡»ù (¬O§_¼W¦C¡H¥H«KÀH®É¯à´£¨Ñ°Ñ¦Ò¸ê°T)¡A
¦A½Ð±Ð 20120402      B    1500               0    100  ³o¶µ²£«~¡A
§A·|«ç»ò¨Ó³B²z¡A¥BµL B ²£«~¤§¶i³f¬ö¿ý¡H

TOP

¨C¶µ²£«~ªº³B²z¤è¦¡¬Ò¬Û¦P,¥u®t¦U¶µ¤£¦P²£«~¬ï´¡¨ä¤¤,B¶µ²£«~¥i¦p¤Uªí©Ò¥Ü

                       °Ó«~     »ù®æ   ¶R¶i   ½æ¥X
20120401      A    2000    500         0
20120402      B     1500        0    100
20120403      A     2020   400         0
20120403      B     1300   500    100
20120404      A     2050   400    200
20120404      B     1250        0    200
20120405      A     2010        0    700
20120405      B     1310   200         0

ÁÙ¦³£¸ÂI,¯à§_ºâ¥X¨C¶µ²£«~½æ¥X«áªº¬ÕÁ«?

TOP

¦^´_ 14# white5168
­ì©l¸ê®Æ
                    °Ó«~     »ù®æ   ¶R¶i   ½æ¥X
20120401      A    2000   500         0
20120402      B     1500       0    100
20120403      A    2020   400         0
20120404      A    2050   400    200
20120405      A    2010        0    200

Ãþ¥ý¶R¶i¥ý½æ¥X
20120404µ²ºâ®É, 20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»,»Ý¥H·í®É³Ñ¾l¨Ó­pºâ§Y(2000*500- 2050*200)/(500-200)=1966.67,¼Æ¶q³Ñ¬°500-200=300,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶qÁÙ¦³³Ñ300(³o¬O§Ú»Ý­nªº)
¨Ì§A¥H¤W±Ô­z¡A20120404¤§«eA²£«~¦@¦³3µ§¸ê®Æ(20120401¡AA¡A2000¡A500¡A0)¡B(20120403¡AA¡A2020¡A400¡A0)¡B(20120404¡AA¡A2050¡A400¡A200)
¬JµM¥ý¶i¥ý¥X20120404³oµ§½æ¥X¡AÀ³¸Ó¬O¥Î20120401³o­Ó»ù¦ì2000
¨º»ò³Ñ¤Uªº¤£¬OÀ³¸Ó(2000*(500-200)+2020*400+2050*400)/(500+400+400-200)¤~¬O¦¨¥»»ù¦ì¶Ü?
³oºØ±M·~ªº·|­pª¾Ãѧڤ@ÂI³£¨S¦³¡A¤£ª¾¹D§Úªº²z¸Ñ»P¹ê°È®t§O¦b­þ?
«Øij±z±N·Q­nÅã¥Üªºµ²ªGª½±µ¥Î¤âºâ¥X«á¡A¶ñ¤J·Q­n¹ê²{ªº¦ì¸m¡A¨Ã¦b¹j¾ÀÄæ¦ì¶ñ¤J§A­pºâªº¨Ì¾Ú
³o¼Ë©Î³\¤ñ¸û®e©öÂç²M©Ò¿×¥ý¶i¥ý¥Xªº·§©À¡C
¾Ç®üµL²P_¤£®¢¤U°Ý

TOP

[ª©¥DºÞ²z¯d¨¥]
  • Hsieh(2012-4-30 10:11): ½Ð¥ÎÀÉ®×»¡©ú¡Aµª®×©ñ¸m¦ì¸m¡A»P©Ò»Ý¸ê®Æ¦³­þ¨Ç

¥»©«³Ì«á¥Ñ white5168 ©ó 2012-4-30 20:15 ½s¿è

Hsieh»¡ªº«Ü¹ï,·PÁÂHsiehªÈ¥¿,¬O§Ú·d¿ù¤FÆ[©À¤]Åý¤j®a¤@°_»~·|¤F,¦b¦¹¸ò¤j®a»¡Án©êºp,¯Ô»~¤j®a³o»ò¦hªº®É¶¡
§Ú­«·s¾ã²z¤@¤U§Ú»Ý­n¤º®eªº¥¿½TÆ[©À

­ì©l¸ê®Æ
                    °Ó«~     »ù®æ   ¶R¶i   ½æ¥X
20120401      A    2000   500         0
20120402      B     1500       0    100
20120403      A    2020   400         0
20120404      A    2050   400    200
20120405      A    2010        0    200

Ãþ¦ü¥ý¶R¶i¥ý½æ¥XªºÆ[©À
20120404µ²ºâ®É,20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»¤´¬°2000,¼Æ¶q³Ñ¬°500-200=300,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶qÁÙ¦³³Ñ300
                       °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A     2000         300         0
20120402      B     1500               0    100
20120403      A     2020          400         0
20120404      A     2050          400         0
20120405      A     2010               0    200
¦Ó­pºâ¨ì20120404¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(2000*300 + 2020*400 + 2050*400)/(300+400+400)=2025.5,¼Æ¶q³Ñ¬°300+400+400=1100
20120404µ²ºâ®É,¬ÕÁ«¬°(2050-2000)*200=10000

20120405µ²ºâ®É,20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»¤´¬°2000,¼Æ¶q³Ñ¬°300-200=100,ªí¥Ü20120401·í¤Ñ¥æ©ö¼Æ¶qÁÙ¦³³Ñ100
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    2000         100         0
20120402      B     1500              0    100
20120403      A    2020          400         0
20120404      A    2050          400         0
20120405      A    2010               0         0
¦Ó­pºâ¨ì20120405¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(2000*100+ 2020*400 + 2050*400)/(100+400+400)=2031.1,¼Æ¶q³Ñ¬°100+400+400=900
20120405µ²ºâ®É,¬ÕÁ«¬°(2010-2000)*200=2000

²Ä¤Gµ§¥X³f¤j©ó²Ä¤@µ§®w¦sªº»¡©ú¦p¤U
¦pªG¦A¦h£¸­Ó20120406ªº¥æ©ö¦p¤U
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    2000          100         0
20120402      B    1500               0    100
20120403      A    2020          400         0
20120404      A    2050          400         0
20120405      A    2010               0         0
20120406      A    2040               0    300

20120406µ²ºâ®É,20120401ªºA²£«~¥­§¡¶R¶i¦¨¥»¤´¬°2000,·í20120406¥æ©ö«á,¥Ñ©ó20120401¥u³Ñ¤U100¤£°÷20120406½æ¥Xªº¼Æ¶q200,»Ý¥H20120403ªº¼Æ¶q¨Ó¸É¨¬,©Ò¥H20120403³Ñ¾l400-200=200,¦Ó20120403ªºA²£«~¥­§¡¶R¶i¦¨¥»¬°2020
                      °Ó«~     »ù®æ          ¶R¶i   ½æ¥X
20120401      A    2000               0         0
20120402      B    1500               0    100
20120403      A    2020          200         0
20120404      A    2050          400         0
20120405      A    2010               0         0
20120406      A    2040               0         0
¦Ó­pºâ¨ì20120406¥æ©ö«á,A²£«~¥þ³¡ªº§¡»ù¬°(2020*200 + 2050*400)/(200+400)=2040,¼Æ¶q³Ñ¬°200+400=600(³o¬O§Ú»Ý­nªº)
20120406µ²ºâ®É,¬ÕÁ«¬°(2040-2000)*100+(2040-2020)*200=8000

¨Ï¥Î¸ê®Æ¦b£¸¶}©lPO¤å®É,§Y¥I¤WÀɦW¬°test.rar,½Ð¦U¦ì¥J²Ó¹î¬Ý

TOP

¦^´_ 16# white5168

¥»©«¤w¸g¨ì¤F16¼Ó¤F,¦n¹³µª®×¨S¦³¤@ÂI¶i®i,µo°ÝªÌ¸Ó«ä¦Ò³o­Ó°ÝÃD

µo°ÝªÌªº¤u§@:´£¨Ñ½d¨Ò(¦Ò¶q¦UºØ¼Æ¾Ú)§@¸Ô²Ó²M·¡¤§»¡©ú,ÅýµªÃDªÌ¤@¤U´Nª¾¹D§A­n¤°»ò
³Ñ¤Uªº¥æµ¹µªÃDªÌ

hsiehªº«Øij:«Øij±z±N·Q­nÅã¥Üªºµ²ªGª½±µ¥Î¤âºâ¥X«á¡A¶ñ¤J·Q­n¹ê²{ªº¦ì¸m¡A¨Ã¦b¹j¾ÀÄæ¦ì¶ñ¤J§A­pºâªº¨Ì¾Ú
§Ú§â²£«~½s¸¹¤@¼Ëªº¶°¤¤,½Ð§â§A­nªºµª®×¶ñ¤J¨Ã§@»¡©ú,³o¼Ë¸û²M·¡(©Î¬O§Aµª®×­n¦p¦ó§e²{¤]¥t§@»¡©ú)
µªÃDªÌ¦³ºÃ´b,µo°ÝªÌ¥²¶·­nÀ°¦£Âç²M,¤£µM¤£·|¦³µª®×,¤[¤F¤]·|¥¢¥h­@¤ß

TOP

¥»©«³Ì«á¥Ñ white5168 ©ó 2012-4-30 15:15 ½s¿è

¦p¹Ï¤À§O¬°¸ê®Æ»P³Ì«á¸ê®Æ
³Ì«á¸ê®Æªº³¡¥÷¹ï©ó¤é´Á¬O¥i½Õ¾ãªº,¦p¤é´ÁÅÜ°Ê,«h³Ì«á¸ê®Æ©Ò§e²{ªºµe­±¤]·|§ïÅÜ
¬ÛÃöªºExcelÀɦbªþ¥ó¤¤,¦p¦³¤£²M·¡ªº½Ð¦A´£¥Xµo°Ý
¤p§Ì¤ñ¸û¤£²M·¡¦U¦ì©Ò»Ýªº¸ê°T¨ì¦óºØµ{«×?©Ò¥H¦p¦³«_¥Ç½Ð¦h¦h¨£½Ì

source.JPG (147.79 KB)

¸ê®Æ

source.JPG

finalscreen.JPG (120.04 KB)

§e²{µe­±

finalscreen.JPG

test.rar (2.85 KB)

TOP

¦^´_ 18# white5168
¶K¹Ïªº¸ê®Æ¨Ã¤£¬Oªþ¥ó¤¤CSVªº¸ê®Æ
¨Ì·Ó¤W­z¥ý¶i¥ý¥XÅÞ¿è¸ÕµÛ¼g¬Ý¬Ý¡A§A¦Û¤v¥h¤ñ¹ï¬Ý¬Ýµ²ªG¥¿¤£¥¿½T
play.gif
  1. Sub Get_Data()
  2. Dim Ar(), Ay(), x, y
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. Set d2 = CreateObject("Scripting.Dictionary")
  6. fs = ThisWorkbook.Path & "\DataBase.csv"
  7. Open fs For Input As #1
  8. Do Until EOF(1)
  9.    Line Input #1, mystr
  10.    a = Split(mystr, ",")
  11.    If Val(a(0)) > 0 And Val(a(0)) <= [B1] Then
  12.    If IsEmpty(d(a(1))) Then
  13.        For i = 1 To Val(a(3))
  14.           ReDim Preserve Ar(i)
  15.           Ar(i - 1) = Val(a(2))
  16.        Next
  17.        If Val(a(3)) > 0 Then d(a(1)) = Ar
  18.        Else
  19.        Ar = d(a(1))
  20.        s = UBound(Ar)
  21.          For i = 1 To Val(a(3))
  22.            ReDim Preserve Ar(s + i)
  23.            Ar(s + i - 1) = Val(a(2))
  24.          Next
  25.        s = UBound(Ar)
  26.          d(a(1)) = Ar
  27.     End If
  28.     If Val(a(4)) > 0 Then
  29.        If IsEmpty(d1(a(1))) Then
  30.        For i = 1 To Val(a(4))
  31.           ReDim Preserve Ar(i)
  32.           Ar(i - 1) = Val(a(2))
  33.        Next
  34.        If Val(a(4)) > 0 Then d1(a(1)) = Ar
  35.        Else
  36.        Ar = d1(a(1))
  37.        s = UBound(Ar)
  38.          For i = 1 To Val(a(4))
  39.            ReDim Preserve Ar(s + i)
  40.            Ar(s + i - 1) = Val(a(2))
  41.          Next
  42.          d1(a(1)) = Ar
  43.     End If
  44.     End If
  45.     End If
  46.    Erase Ay: Erase Ar
  47. Loop
  48. Close #1
  49. For Each ky In d1.keys
  50.    If IsArray(d1(ky)) Then Ar = d1(ky): x = UBound(Ar) Else x = 0 '¥X³f
  51.    If IsArray(d(ky)) Then Ay = d(ky): y = UBound(Ay) Else y = 0 '¶i³f
  52.    If x = 0 And y > 0 Then '¥u¶i¤£¥X
  53.       For i = 0 To y - 1
  54.         'sp = sp + Ar(i)
  55.         bp = bp + Ay(i)
  56.       Next
  57.       bp = bp / y
  58.       d2(ky) = Array(ky, y, 0, 0, Abs(y - x), y - x, Round(bp, 2), 0)
  59.       bp = 0
  60.       ElseIf y = 0 And x > 0 Then '¥u¥X¤£¶i
  61.       For i = 0 To x - 1
  62.         sp = sp + Ar(i)
  63.       Next
  64.       sp = sp / x
  65.       d2(ky) = Array(ky, y, x, 0, 0, y - x, 0, Round(sp, 2))
  66.       sp = 0
  67.       ElseIf x > 0 And y > 0 Then
  68.          If x > y Then '¥X¤j©ó¶i
  69.          w = 0: w1 = y - x
  70.          For i = 0 To y - 1
  71.          pr = pr + Ar(i) - Ay(i)
  72.          Next
  73.          For j = i To x - 1
  74.          nr = nr + Ar(i)
  75.          Next
  76.          nr = nr / (x - y) '¤£¨¬¶q
  77.          ElseIf x < y Then '¶i¤j©ó¥X
  78.          w1 = 0: w = y - x
  79.          For i = 0 To x - 1
  80.          pr = pr + Ar(i) - Ay(i)
  81.          Next
  82.          For j = i To y - 1
  83.          sr = sr + Ay(i)
  84.          Next
  85.          sr = sr / Abs(x - y) '¤£¨¬¶q
  86.          End If
  87.          
  88.          d2(ky) = Array(ky, y, x, pr, w, w1, Round(sr, 2), Round(nr, 2))
  89.          pr = 0: nr = 0: sr = 0
  90.    End If
  91.    Erase Ay: Erase Ar
  92. Next
  93. [A4:H65536] = ""
  94. [A4].Resize(d2.Count, 8) = Application.Transpose(Application.Transpose(d2.items))
  95. End Sub
½Æ»s¥N½X
¾Ç®üµL²P_¤£®¢¤U°Ý

TOP

«Ü·PÁÂHsieh¤j¤jÀ°¦£,¤£¹L¥Ø«e§ÚÁÙµLªk¤U¸ü©Ò¦³¤j¤j©Ò¦^ÂЪºªþ¥ó,¥u¯àµ¥¨ì¤É¯Å«á¤~¯à¬Ý¨ìµ²ªG
·Q½Ð°ÝHsieh¤j¤j, Excel VBAªºµ{¦¡,¬O§_¯à°µ¨ì¸òC,C++µ¥°ª¶¥»y¨¥¤@¼Ë¼Ò²Õ¤Æªºµ{«×?
³o¸Ì§Ú­n¼á²M»¡©ú,ªþ¥óªº­ì©l¸ê®Æªº½T¬O¶K¹Ïªº¸ê®Æ,§Ú¥u¬O±N­ì©l¸ê®Æ¤¤¤ñ¸û²³æªº¤£½ÆÂøªº¸ê®Æ¶µ­ç°£
¶K¹Ïªº¸ê®Æ¬O§Ú±N­ì©l¸ê®Æ¯d¤U½ÆÂøªº³¡¥÷¨Ó°µ»¡©ú¥Îªº
¦b¼¶¼gµ{¦¡ªº¹Lµ{¤¤·|¹J¨ì°ÝÃDªº¸ê®Æ,°ò¥»¤Wµ{¦¡¼¶¼g¥u­n½ÆÂøªº¯à¼gªº¥X¨Ó,¨ä¥Lªº³£¤£¦¨°ÝÃD
¥i¥H½ÐHsieh¤j¤j¦Û¦æ§R°£¤ñ¸û¤£½ÆÂø¥B²³æªº¸ê®Æ§Y¥i¬Ý¥X¸ò¶K¹Ï¸ê®Æ¬Û¦Pªº¤º®e
ÁÂÁÂ

TOP

        ÀR«ä¦Û¦b : ¤H¥Í³Ì¤jªº¦¨´N¬O±q¥¢±Ñ¤¤¯¸°_¨Ó¡C
ªð¦^¦Cªí ¤W¤@¥DÃD