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

ʵÀý7 ×ֵ䷨ÅÅÐò

[c3].Resize(UBound(rng), 4) = arr End Sub

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

1¡¢Dim d As Object, rng, i%, j%, arr £ºÉùÃ÷¸÷¸ö±äÁ¿¡£

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

3¡¢rng = Range(\& [a65536].End(xlUp).Row) £º°ÑAÁе½FÁеĵ¥Ôª¸ñÇøÓòµÄÖµ¸³¸ø±äÁ¿rng¡£

4¡¢ReDim arr(1 To UBound(rng), 1 To 4) £º¸ù¾ÝÊý×érngµÄ´óÐ¡ÖØÐÂÉùÃ÷¶¯Ì¬Êý×é±äÁ¿µÄ´óС£¬ÕâÀïÊǰ´×î´óÊýÁ¿À´ÉùÃ÷£¬¿É±ÜÃâÒòÉùÃ÷µÃСÁ˶øµ¼Ö´úÂë³ö´í¡£ 5¡¢For i = 1 To UBound(rng) £ºÔÚrngÊý×éÖÐÖðһѭ»·¡£

6¡¢d(CStr(rng(i, 1))) = i £º°ÑAÁÐµÄ¹ÉÆ±´úÂëµÄÖµÓÃVBAת»»º¯ÊýCStrת»»³É×Ö·û´®ÒÔºó×÷Ϊ¹Ø¼ü×Ö£¬ÒòΪÈç¹û²»×÷´¦ÀíÓÐʱºòÓöµ½00¿ªÊ¼µÄÊý¾Ý£¬¿ÉÄÜ»áÊ§È¥Ç°ÃæµÄ0¡£¹ÉƱ´úÂëÔÚÊý×éÖеÄÐÐλÖÃi×÷Ϊ¹Ø¼ü×Ö¶ÔÓ¦µÄÏһÆð¼ÓÈë×Öµäd¡£ 7¡¢For j = 3 To 5 Step 2 £ºÇ°ÃæµÄÑ­»·µÃµ½ÁËÕû¸ö×ֵ䣬ÏÂÃæÕâÁ½¸öÑ­»·ÓÃÀ´Óë×ÖµäÖеĹؼü×ֱȶԶøÖØÐÂÅÅλ¡£Step 2ÊÇÑ­»·µÄ²½³¤£¬j=3Ö´ÐÐÒÔºó£¬j=3+2=5£¬´Ó¶øÌø¹ýj=4ÁË¡£ºÇºÇ£¬ÕâÊÇFor¡­NextÑ­»·½á¹¹µÄ»ù´¡ÖªÊ¶£¬Ëµ¶àÁË¡£

8¡¢For i = 1 To Cells(65536, j).End(xlUp).Row ¨C 2 £ºÒòΪCÁкÍEÁеÄ×îºóÒ»¸ö·Ç¿Õµ¥Ôª¸ñµÄλÖò»Ò»Ñù£¬ËùÒÔÓÃÁËCells(65536, j).End(xlUp).RowÔÚÑ­»·ÖзֱðµÃµ½ÕâÁ½ÁеÄ×îºóÒ»¸ö·Ç¿Õµ¥Ôª¸ñµÄÐÐÊý£¬ÓÉÓÚÊý×érngÊÇ´ÓµÚ3ÐпªÊ¼µÄ£¬ÎªÁËÓëÏÂÃæÒýÓõÄrngÊý×é¶ÔÓ¦£¬ËùÒÔÐèÒª¼õÈ¥2¡£È«¾äÊÇÔÚCÁкÍEÁÐÖÐÖðһѭ»·¡£

9¡¢If d(CStr(rng(i, j))) <> \ £ºrng(i, j)ÊÇCÁлòÕßEÁÐµÄ¹ÉÆ±´úÂ룬±¾¾äÊÇÈç¹ûÕâ¸ö¹ÉƱ´úÂë¹Ø¼ü×Ö¶ÔÓ¦µÄÏî²»µÈÓÚ¿ÕµÄʱºò£¬Ö´ÐÐÏÂÃæµÄ´úÂë¡£

10¡¢arr(d(CStr(rng(i, j))), j - 2) = rng(i, j) £ºd(CStr(rng(i, j)))=i¼ûÉÏÊö6µÄ½âÊÍ£¬±íʾÊý×éarrµÄµÚ1ά£¬Ï൱ÓÚÐУ»j-2ÊÇËæ×Åj=3µÄʱºò£¬j-2=1£»j=5µÄʱºòj-2=3£¬Ï൱ÓÚÊý×éÁеIJÎÊý¡£°ÑÏàÓ¦µÄ¹ÉƱ´úÂ븳¸øÏàͬ¹ÉƱ´úÂëµÄµÚ1ÁлòÕßÊǵÚ3ÁС£ 11¡¢arr(d(CStr(rng(i, j))), j - 1) = rng(i, j + 1) £º°ÑÏàÓ¦µÄ¹ÉƱÃû³Æ¸³¸øÏàͬ¹ÉƱ´úÂëµÄµÚ2ÁлòÕßÊǵÚ4ÁС£

12¡¢[c3].Resize(UBound(rng), 4) = arr £º°ÑÊý×éarr¸³¸øC3¿ªÊ¼µÄµ¥Ôª¸ñÇøÓò¡£

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

29

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

ͼ ʵÀý7-2ʾÀý

ʵÀý8 2¼¶¶¯Ì¬Êý¾ÝÓÐЧÐÔÎÊÌâ

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

AÁÐÊÇÔ´Ãû³Æ£¬ÖмäÓпոñ£¬BÁÐΪ¸÷¸öÔ´Ãû³Æ¶ÔÓ¦µÄÊýÄ¿²»Í¬µÄ´úºÅ£¬CÁÐÊÇÄ¿±êÃû³ÆÀ´Ô´ÓÚÔ´Ãû³Æ£¬ÒªÇóÔÚCÁÐÉèÖò»Öظ´µÄ¡¢Ã»ÓпոñµÄÊý¾ÝÓÐЧÐÔ¹©Ñ¡Ôñ£»Í¬Ê±DÁÐÄ¿±ê´úºÅ£¬ÒªÇóËæ×ÅCÁÐÑ¡ÔñµÄÄ¿±êÃû³ÆµÄ²»Í¬£¬Ìṩ¶ÔÓ¦µÄ´úºÅ¹©Ñ¡Ôñ£¬ÊÇΪµÚ2¼¶Êý¾ÝÓÐЧÐÔ¡£

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

30

ʵÀý8 2¼¶¶¯Ì¬Êý¾ÝÓÐЧÐÔÎÊÌâ

ͼ ʵÀý8-1ʾÀý

¶þ¡¢´úÂ룺

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub

If Target.Column <> 4 And Target.Column <> 3 Then Exit Sub Dim d, i&, Myr&, Arr, r%, Arr1(), cp$, ks&, js&, j& Set d = CreateObject(\Myr =[b65536].End(xlUp).Row Arr = Range(\& Myr) If Target.Column = 3 Then For i = 1 To UBound(Arr) If Arr(i, 1) <> \Then d(Arr(i, 1)) = \ End If Next

With Target.Validation .Delete

31

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

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:=Join(d.keys, \ End With

Target.Offset(0, 1) = \

ElseIf Target.Column = 4 And Target.Offset(0, -1) <> \Then For i = 1 To UBound(Arr) If Arr(i, 1) <> \Then r = r + 1

ReDim Preserve Arr1(1 To r) Arr1(r) = i End If Next i For i = 1 To r

If Arr(Arr1(i), 1) = Target.Offset(0, -1).Text Then If i <> r Then

js = Arr1(i + 1) - 1 Else

js = Myr - 1 End If ks = Arr1(i) For j = ks To js

cp = cp & Arr(j, 2) & \ Next End If Next i

cp = Left(cp, Len(cp) - 1) With Target.Validation .Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:=cp End With

Target = Split(cp, \

32

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