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

EXCEL ¦Û°Ê¥[¤Jªí®æ

¦^´_ 1# sschristy


    ÁÂÁ«e½úµoªí¦¹¥DÃD»P±¡¹Ò
«ØÄ³¤W¶Ç­Ó½d¨Ò
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¦^´_ 3# sschristy


    http://forum.twbts.com/viewthread.php?tid=34&extra=page%3D1
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¦^´_ 1# sschristy


    ²q´ú±¡¹Ò:
¥H¿z¿ï¥X»Ý¨D¸ê®Æ¥[¤J¥Dªí®æ
20231006.zip (21.7 KB)


Option Explicit
Sub ¥[¤J¥Dªí®æ()
Dim Crr(1 To 100, 1 To 6), Q, i&, j%, A, n&
Dim sh1 As Worksheet, sh2 As Worksheet, Frng As Range
For Each Q In Worksheets
   If Q.[F1] = "«ØÄ³¼tµP" Then Set sh1 = Q
   If Q.[G3] = "«ØÄ³¼tµP" Then Set sh2 = Q
Next
A = Array(1, 2, 4, 5, 6)
With sh1: .Activate
   If .AutoFilter Is Nothing Then
      .[A2].AutoFilter
      With ActiveWindow
         .FreezePanes = False: .SplitRow = 1: .FreezePanes = True
      End With
   End If
   If .[B65536].End(3).Row = 1 Then MsgBox "¨S¦³¸ê®Æ": Exit Sub
   For i = 2 To .[B65536].End(3).Row
      If Rows(i).EntireRow.Hidden = True Then GoTo i02
      n = n + 1
      For j = 0 To 4
         Crr(n, A(j)) = Cells(i, j + 2)
      Next
i02: Next
End With
With sh2.[B65536].End(3)(2).Resize(n, 6)
   .Value = Crr
   sh2.Activate
   .Select
End With
Set sh1 = Nothing: Set sh2 = Nothing: Set Frng = Nothing: Erase Crr
End Sub

Sub ²M°£¶µ¥Ø()
Dim Q
For Each Q In Worksheets
   If Q.[G3] = "«ØÄ³¼tµP" Then Q.UsedRange.Offset(3, 0).EntireRow.Delete: Exit Sub
Next
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¦^´_ 7# Andy2483

½Æ²ß,­×¥¿»Pµù¸Ñ
Option Explicit
Sub ¥[¤J¥Dªí®æ()
Dim Crr(1 To 100, 1 To 6), Q, i&, j%, A, n&
'¡ô«Å§iCrrÅܼƬO¤Gºû°}¦CÁa¦V½d³ò1¨ì 100,¾î¦V½d³ò±q1¨ì 6
'(Q,A)¬O³q¥Î«¬ÅܼÆ,(i,n)¬Oªø¾ã¼Æ,j¬Oµu¾ã¼Æ

Dim sh1 As Worksheet, sh2 As Worksheet, Frng As Range
'¡ô«Å§i(sh1,sh2)¬O¤u§@ªíÅܼÆ,Frng¬OÀx¦s®æÅܼÆ
For Each Q In Worksheets
'¡ô³]³v¶µ°j°é!¥OQ¬O¬¡­¶Ã¯¤¤ªº¤u§@ªí
   If Q.[F1] = "«ØÄ³¼tµP" Then Set sh1 = Q
   '¡ô¦pªG¤u§@ªí¤¤ªº[F1]Àx¦s®æ­È¬O"«ØÄ³¼tµP"!´N¥Osh1ÅܼƬO¤u§@ªíQ
   If Q.[G3] = "«ØÄ³¼tµP" Then Set sh2 = Q
   '¡ô¦pªG¤u§@ªí¤¤ªº[G3]Àx¦s®æ­È¬O"«ØÄ³¼tµP"!´N¥Osh2ÅܼƬO¤u§@ªíQ
Next
A = Array(1, 2, 4, 5, 6)
'¡ô¥OAÅܼƬO¤@ºû°}¦C,0~4¯Á¤Þ¸¹°}¦C­È¨Ì§Ç¬O(1, 2, 4, 5, 6)
With sh1: .Activate
'¡ô¥H¤U¬OÃö©ó¤u§@ªísh1ªºµ{§Ç
'¡ô¥O¿E¬¡¸Ó¤u§@ªí

   If .AutoFilter Is Nothing Then
   '¡ô¦pªG¤u§@ªí¨S¦³¿z¿ïªº¥\¯à?
      .[A2].AutoFilter
      '¡ô¥O¸Óªí±q¸Óªí[A2]Àx¦s®æ«Ø¥ß¿z¿ï¥\¯à
      With ActiveWindow
      '¡ô¥H¤U¬OÃö©óµøµ¡ªºµ{§Ç
         .FreezePanes = False: .SplitRow = 1: .FreezePanes = True
         '¡ô¥O­áµ²µøµ¡¸Ñ°£,²Ä1¦C¤À³Îµøµ¡:¥O­áµ²µøµ¡
      End With
   End If
   If .[B65536].End(3).Row = 1 Then MsgBox "¨S¦³¸ê®Æ": Exit Sub
   '¡ô¦pªG¸ÓªíBÄæ³Ì«á¦³¤º®eÀx¦s®æ¦C¸¹¬O1? True´N¸õ¥X´£µøµ¡,µ²§ôµ{¦¡°õ¦æ
   For i = 2 To .[B65536].End(3).Row
   '¡ô³]¶¶°j°é!i±q2¨ì¸ÓªíBÄæ³Ì«á¦³¤º®eÀx¦s®æ¦C¸¹
      If .Rows(i).EntireRow.Hidden = True Then GoTo i02
      '¡ô¦pªG¸Ó¦C¬OÁôÂêº!´N¸õ¨ì¼Ð¥Üi02¦ì¸mÄ~Äò°õ¦æ
      n = n + 1
      '¡ô¥OnÅܼƲ֥[1
      For j = 0 To 4
      '¡ô³]¶¶°j°é!j±q0¨ì 4
         Crr(n, A(j)) = Cells(i, j + 2)
         '¡ô¥OnÅܼƦC(jÅܼÆA°}¦C­È)ÄæªºCrr°}¦C­È¬OiÅܼƦCjÅܼÆ+2ÄæÀx¦s®æ­È
      Next
i02: Next
End With
With sh2.[B65536].End(3)(2).Resize(n, 6)
'¡ô¥H¤U¬OÃö©ó¤u§@ªísh2±q¤U©¹¤W§ä¨ìªºBÄæ²Ä1­ÓªÅ¥Õ®æ¦V¤UÂX®inÅܼƦC,
'¦V¥kÂX®i6ÄæÀx¦s®æªºµ{§Ç

   .Value = Crr
   '¡ô¥OÀx¦s®æ­È¥HCrr°}¦C­È±a¤J
   sh2.Activate
   '¡ô¥O¿E¬¡¤u§@ªí
   .Select
   '¡ô¥O¿ï¨ú¸Ó½d³òÀx¦s®æ
End With
Set sh1 = Nothing: Set sh2 = Nothing: Set Frng = Nothing: Erase Crr
'¡ô¥OÄÀ©ñÅܼÆ
End Sub

Sub ²M°£¶µ¥Ø()
Dim Q
For Each Q In Worksheets
   If Q.[G3] = "«ØÄ³¼tµP" Then Q.UsedRange.Offset(3, 0).EntireRow.Delete: Exit Sub
Next
'¡ô¥Oµ²ªGªí²M°£²Ä3¦C¥H«áªº¸ê®Æ(§t)
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-10-14 12:44 ½s¿è

¦^´_ 8# sschristy


    '¥H¤U¬O°Ñ¦Òªí1 ¿ï¨ú¦h¦C §å¦¸¥[¤Jªº«ØÄ³¤è®×
Private Sub CommandButton1_Click()
Dim Q, A(10000), i&, n&
wst = "°Ñ¦Òªí1"
For Each Q In Split(Selection.Cells.EntireRow.Address(0, 0), ",")
   For i = 0 To -Evaluate(Replace(Q, ":", "-"))
      A(n) = Val(Q) + i
      n = n + 1
   Next
Next
For i = 0 To n - 1
   j = A(i)
   Application.Run "Module1.test"
Next
Sheets("¥Dªí®æ").Activate
End Sub

20231014.zip (30.85 KB)
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-10-24 07:26 ½s¿è

¦^´_ 13# sschristy


Private Sub CommandButton2_Click()
Dim xA As Range, xB As Range, xI As Range
Set xA = Range([A1], ActiveSheet.UsedRange)
Set xB = [A:G]
Set xI = Intersect(xA, xB)
xI.Offset(3, 0).ClearContents
End Sub

https://learn.microsoft.com/zh-t ... worksheet.usedrange
https://learn.microsoft.com/zh-t ... plication.intersect
https://learn.microsoft.com/zh-t ... /excel.range.offset
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-10-25 07:45 ½s¿è

¦^´_ 13# sschristy


    ¥H¤U¬O½Æ²ßªº¤ß±oµù¸Ñ,½Ð«e½ú°Ñ¦Ò

Private Sub CommandButton2_Click()
Dim xA As Range, xB As Range, xI As Range
'¡ô«Å§i(xA,xB,xI)¦U¬OÀx¦s®æÅܼÆ
Set xA = Range([A1], ActiveSheet.UsedRange)
'¡ô¥OxA³oÀx¦s®æÅܼƬO²[»\[A1]Àx¦s®æ»P¦¹ªí¤w¨Ï¥ÎÀx¦s®æ,
'²[»\³o°Ï¶¡ªº³Ì¤p¤è¥¿½d³òÀx¦s®æ

Set xB = [A:G]
'¡ô¥OxB³oÀx¦s®æÅܼƬO[A:G]Àx¦s®æ
Set xI = Intersect(xA, xB)
'¡ô¥OxI³oÀx¦s®æÅܼƬO xA»PxBÅܼƥ涰ªºÀx¦s®æ
xI.Offset(3, 0).ClearContents
'¡ô¥OxIÅܼƩ¹¤U°¾²¾3¦Cªº³o·s½d³òÀx¦s®æ²M°£¨ä¤º®e
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¦^´_ 16# sschristy


    ¥H¤U¬O§å¦¸§R°£¿ï¨úªº¦C¸ê®Æ(¿ï¨ú®æ¦CÄd>«ö¶s) ©Î ¥þ³¡¦C¸ê®Æ§R°£(¾ãªí¿ï¨ú>«ö¶s)

Private Sub CommandButton2_Click()
Dim Q, A$, i&, n&, xI As Range, Brr, xA As Range, xB As Range
Set xA = Selection.Cells: Set xB = ActiveSheet.UsedRange
If xA.EntireRow.Count > xB.Rows.Count Then Set xA = Intersect(xA, xB)
If xA Is Nothing Then Exit Sub
Set xI = Intersect(Range([A1], xB), [A:G]): Brr = xI
For Each Q In Split(xA.EntireRow.Address(0, 0), ",")
   For i = Split(Q, ":")(0) To Split(Q, ":")(1)
      A = IIf(A = "", "/" & Val(i) & "/", A & Val(i) & "/")
   Next
Next
For i = 4 To xI.Rows.Count
   If InStr(A, "/" & i & "/") Then GoTo i01 Else n = n + 1
   For j = 1 To UBound(Brr, 2): Brr(n, j) = Brr(i, j): Next
i01: Next
xI.Offset(3, 0).ClearContents
If n = 0 Then Exit Sub
[A4].Resize(n, UBound(Brr, 2)) = Brr
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

¥»©«³Ì«á¥Ñ Andy2483 ©ó 2023-10-25 15:01 ½s¿è

¦^´_ 16# sschristy


    ¥H¤U¥t¤@¤èªk,½Ð«e½ú°Ñ¦Ò
Private Sub CommandButton2_Click()
Dim xU As Range, xA As Range, xB As Range
Set xA = Selection.Cells: Set xB = ActiveSheet.UsedRange.Offset(3)
Set xU = Union(xA, xB)
If xU.Count <> xB.Count Then Exit Sub
Intersect(xA.EntireRow, [A:G]).Delete Shift:=xlUp
End Sub
¥Î¦æ°Ê¸Ë¸mÂsÄý½×¾Â¾Ç²ß«Ü¤è«K,ÁÂÁ½׾¸gÀç¹Î¶¤
½Ð¤j®a¤@°_¤W½×¾Â¨Ó¥æ¬y

TOP

        ÀR«ä¦Û¦b : ¦h°µ¦h±o¡C¤Ö°µ¦h¥¢¡C
ªð¦^¦Cªí ¤W¤@¥DÃD