³£¼û×ÖµäÓ÷¨¼¯½õ¼°´úÂëÏê½â£¨È«£© - À¶ÇÅÐþ˪ - ͼÎÄ

ʵÀý6 ¶àÌõ¼þ¸´ÔÓ»ã×Ü

ReDim b(1 To UBound(a), 1 To 8) For i = 1 To UBound(a)

ss = a(i, 1) & a(i, 2) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 8) If Not d.Exists(ss) Then

n = n + 1 d.Add ss, n

b(n, 1) = a(i, 2): b(n, 2) = a(i, 5): b(n, 3) = a(i, 6): b(n, 4) = a(i, 4) b(n, 5) = a(i, 1): b(n, 6) = a(i, 8): b(n, 7) = a(i, 9) Else

b(d(ss), 7) = b(d(ss), 7) & \& a(i, 9) End If Next

For i = 1 To d.Count

x = Split(b(i, 7), \For j = 0 To UBound(x)

w = w + x(j) Next j

b(i, 8) = b(i, 5) * b(i, 6) * w / 100: w = 0 Next

[b4].Resize(n, 8) = b End Sub

Èý¡¢´úÂëÏê½â

1¡¢Dim d As Object, a, b, j%, w! £ºDimÓï¾äÖеÄj% µÈͬÓÚDim j As Integer¡£w! µÈͬÓÚDim w As Single¡£ÀàËÆµÄ»¹ÓÐss$ µÈͬÓÚDim ss As String¡£»¹ÓÐË«¾«¶ÈÊý¾ÝÀàÐÍDoubleµÄÀàÐÍÉùÃ÷×Ö·ûΪ#¡¢»õ±ÒÊý¾ÝÀàÐÍCurrencyµÄÀàÐÍÉùÃ÷×Ö·ûΪ@¡£

2¡¢Me.UsedRange.Offset(3, 0) = \£ºOffsetÊÇRange¶ÔÏóµÄÊôÐÔ£¬Offset(3, 0)µÄµÚ

Ò»¸ö²ÎÊýÊÇÐÐÊý£»µÚ¶þ¸ö²ÎÊýÊÇÁÐÊý£¬Òâ˼ÊÇÍùÏÂÆ«ÒÆ3ÐУ¬Áв»±ä¡£MeÊǻ¹¤×÷±í£¬Ï൱ÓÚActivesheet; UsedRangeΪÒѾ­Ê¹Óõĵ¥Ôª¸ñÇøÓò¡£±¾¾ä¿É½âÊÍΪ£ºÇå¿ÕµÚ3ÐÐÒÔϵĵ¥Ôª¸ñ¡£

3¡¢a = Sheet1.Range(Sheet1.[a4], Sheet1.[i65536].End(xlUp)) £º°ÑԭʼÊý¾ÝËùÔڵıí1×ÔA4ÒÔϵÄIÁÐ×îºóµÄ·Ç¿Õµ¥Ôª¸ñÇøÓòµÄÖµ¸³¸ø±äÁ¿a¡£

4¡¢Set d = CreateObject(\£º´´½¨×Öµä¶ÔÏód¡£

5¡¢ReDim b(1 To UBound(a), 1 To 8) £º¸ù¾ÝÊý×éaµÄ´óÐ¡ÖØÐÂÉùÃ÷Êý×éb¡£ 6¡¢For i = 1 To UBound(a) £ºÔÚ1 ºÍÊý×éaµÚһάµÄÉϽçÖµÖ®¼äÖðһѭ»·¡£

25

³£¼û×ÖµäÓ÷¨¼¯½õ¼°´úÂëÏê½â

7¡¢ss = a(i, 1) & a(i, 2) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 8) £º°Ñ¶à¸öÌõ¼þ±ÈÀý¡¢Î»Öá¢ÏîÄ¿Ãû³Æ¡¢´óϵͳ±àºÅ¡¢Ð¡ÏµÍ³±àºÅºÍÏàͬ¥²ãÊýÓÃÁ¬½Ó·ûºÅ&Á¬³ÉÒ»¸ö×Ö·û´®£¬È»ºó¸³¸ø±äÁ¿ss¡£

8¡¢If Not d.Exists(ss) Then £ºIf¡­Then½á¹¹ÀûÓÃÁË×ÖµäµÄExists·½·¨ºÍNotÀ´ÅжϣºÈç¹û×ÖµädÀïÃæ²»´æÔÚss±íʾµÄ¹Ø¼ü×Ö£¬ÄÇôִÐÐÏÂÃæµÄÓï¾ä¡£ 9¡¢n = n + 1 £º°Ñ±äÁ¿nÔö¼Ó1ÒÔºóÈÔÈ»¸³¸øn¡£

10¡¢d.Add ss, n £º°ÑssµÄÖµ×÷Ϊ¹Ø¼ü×Ö£¬nµÄÖµ×÷Ϊ¶ÔÓ¦µÄÏîÒ»Æð¼ÓÈë×ÖµädÖС£nµÄֵʵ¼ÊÊǹؼü×ÖµÄλÖôÎÐò£¬Èçn=1ʱÊǵÚÒ»¸ö¹Ø¼ü×Ö£»n=2ʱÊǵڶþ¸ö¹Ø¼ü×Ö¡£

11¡¢b(n, 1) = a(i, 2): b(n, 2) = a(i, 5): b(n, 3) = a(i, 6): b(n, 4) = a(i, 4) £ºÎªÁËʹ´úÂë¿´ÆðÀ´¼ò¶ÌһЩ£¬¿ÉÒÔÓÃðºÅ¡±:¡±°Ñ¶à¸öÓï¾äÁ¬³ÉÒ»ÐС£4¸öÓï¾ä·Ö±ð¸øÊý×ébµÄ¸÷¸öÔªËØ¸³ÒÔ¶ÔÓ¦µÄÖµ¡£

12¡¢b(n, 5) = a(i, 1): b(n, 6) = a(i, 8): b(n, 7) = a(i, 9) £ºÓëÉÏÊöµÄ11ÌõÏàͬ¡£

13¡¢·ñÔòÖ´ÐÐÕâ¾ä£ºb(d(ss), 7) = b(d(ss), 7) & \& a(i, 9) £ºd(ss)µÈÓڹؼü×Ö¶ÔÓ¦µÄÏÔÚ±¾ÀýÀïµÈÓÚ¶ÔÓ¦µÄnµÄÖµ¡£±¾¾äÊǰÑͼֽ³¤¶Èa(i, 9)ÓÃ\Á¬ÆðÀ´¸³¸øÊý×éb£¬ÕâÑù¾ÍµÃµ½Á˳¤¶ÈÃ÷ϸһÀ¸Êý¾Ý¡£

14¡¢For i = 1 To d.Count £ºÔÚ×ֵ乨¼ü×ÖÊýÄ¿ÖÐÖðһѭ»·¡£

15¡¢x = Split(b(i, 7), \ £ºÔËÓÃVBAº¯ÊýSplit°Ñb(i, 7)£¨³¤¶ÈÃ÷ϸ£©°´ÕÕ\·Ö¸î£¬·µ»ØÒ»¸öϱê´ÓÁ㿪ʼµÄһάÊý×éx¡£Èç¹ûÒªÏêϸÁ˽âSplitº¯ÊýµÄ£¬¿É²Î¼ûÎÒµÄÁíһƪÎÄÕ¡°³£ÓÃVBAº¯Êý¾«Ñ¡ºÏ¼¯¡±¡£http://club.excelhome.net/thread-387253-1-1.html

16¡¢For j = 0 To UBound(x) £ºÔÚÉÏÃæµÄxÊý×éÖ®¼äÖðһѭ»·¡£

17¡¢w = w + x(j) £º°Ñ±äÁ¿w¼Óx(j)Êý×éµÄÒ»¸öÔªËØÒÔºóÈÔÈ»¸³¸øw¡£Êµ¼ÊµÃµ½xÊý×éµÄÀÛ¼ÓÖµ¡£

18¡¢b(i, 8) = b(i, 5) * b(i, 6) * w / 100: w = 0 £ºwÇó³öºó¾­¹ý°´ÒªÇó¼ÆËãµÃµ½µÄÖµ¸³¸øÊý×ébµÄµÚ8ÁÐÔªËØ¡££¨ÊýÁ¿ÁУ©ÁíÒ»¾ä°Ñ±äÁ¿wÖÃ0¡£±ÜÃâÔÚÐÂÒ»´ÎµÄÑ­»·ÖÐÎó¼Ó½øÈ¥¡£

19¡¢[b4].Resize(n, 8) = b £º×îºó°ÑÊý×éb¸³¸øB4¿ªÊ¼µÄµ¥Ôª¸ñÇøÓò¡£

´úÂëÖ´ÐкóÈçͼʵÀý6-1Ëùʾ¡£

26

ʵÀý7 ×ֵ䷨ÅÅÐò

ͼ ʵÀý6-1ʾÀý

ʵÀý7 ×ֵ䷨ÅÅÐò

Ò»¡¢ÎÊÌâµÄÌá³ö£º

AÁÐBÁÐÊǰ´Ë³ÐòÅÅÁеÄÈ«²¿¹ÉƱ´úÂëºÍ¹ÉƱÃû³Æ£¬CÁÐDÁкÍEÁÐFÁÐÊÇÁíÍâ°´Ìõ¼þɸѡ³öÀ´µÄÎÞÐòµÄÊý¾Ý£¬ ÒªÇó±àдһ¶Î´úÂ룬½«ËüÃÇÅÅÁе½ÓëAÁÐÏàͬµÄ¹ÉƱÐÐÀïÃæ¡£

´úÂëÖ´ÐÐǰÈçͼʵÀý7-1Ëùʾ¡£

27

³£¼û×ÖµäÓ÷¨¼¯½õ¼°´úÂëÏê½â

ͼ ʵÀý7-1ʾÀý

¶þ¡¢´úÂ룺

Private Sub CommandButton1_Click() ?by:oobird Dim d As Object, rng, i%, j%, arr Set d = CreateObject(\rng = Range(\& [a65536].End(xlUp).Row) ReDim arr(1 To UBound(rng), 1 To 4) For i = 1 To UBound(rng)

d(CStr(rng(i, 1))) = i Next i

For j = 3 To 5 Step 2

For i = 1 To Cells(65536, j).End(xlUp).Row - 2

If d(CStr(rng(i, j))) <> \Then

arr(d(CStr(rng(i, j))), j - 2) = rng(i, j) arr(d(CStr(rng(i, j))), j - 1) = rng(i, j + 1) End If Next i Next j

28

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)