เลือกแต่ละแถวที่ n ใน Excel


15

ฉันมีสเปรดชีต Excel ที่มีหลายพันแถว ฉันต้องการเลือกทุก ๆ 7 แถวจากสเปรดชีตนั้น (โดย "เลือก" ฉันหมายถึงลบแถวอื่น ๆ ทั้งหมดหรือคัดลอกแถวที่เลือกลงในแผ่นงานใหม่)

วิธีที่ง่ายที่สุดในการทำเช่นนั้นใน Excel 2003 คืออะไร

ดูเพิ่มเติม: เลือกแต่ละแถวที่ n ในเบอร์

คำตอบ:


19
  1. แทรกคอลัมน์
  2. ในสูตรแทรกแถวแรก = MOD (ROW (), 7)
  3. คัดลอกลง
  4. คัดลอก / วางพิเศษ / ค่า
  5. ข้อมูล / กรองสิ่งที่คุณต้องการ (0 หรือ 6 อาจจะ)
  6. ลบส่วนที่เหลือของแถวลบตัวกรองลบคอลัมน์

ไม่ใช่ทางออกที่ไม่ดี ฉันชอบมาโครของฉันดังนั้นมันจึงเป็นตัวเลือกแรกของฉัน แต่ก็สามารถใช้งานได้ด้วยความพยายามเล็กน้อย

2
= MOD (ROW (), 7) คุณต้องการอาร์กิวเมนต์ที่สอง
dkusleika

3

โดยส่วนตัวฉันจะบันทึกแมโครเพื่อทำสามหรือสี่บรรทัดแรก (ที่เพิ่มขึ้น 7 แถวแน่นอน) และคัดลอกบรรทัดไปยังชีตใหม่ จากนั้นฉันจะแก้ไขแมโครเพื่อใช้การวนซ้ำที่นับจำนวนแถวที่มีประชากรในแผ่นงานด้วยขั้นตอนที่ 7

ตัวอย่างรหัสเทียม:

Dim i as Integer

For i = 1 To 1000 Step 7
    'Add current row to selection
    ...
Next i

'Copy the selected rows to new sheet
...

หากคุณใช้แมโครให้ลองย้อนกลับ <code> <pre> Sub delrows () Dim i ตราบใดที่ i = 988 ถึง 1 ขั้นตอน -7 Sheet1.Cells (i, 1) .Offset (1, 0) (6) .EntireRow.Delete Next i End Sub </pre> </code> หากคุณลบแถวมันจะไม่วนซ้ำ
dkusleika

เขาไม่ได้ลบเพียงการเพิ่มแถวไปยังวัตถุช่วง (โดยนัยในความคิดเห็น)
DaveParillo

1
เขากล่าวว่า "โดยเลือกผมหมายถึงลบทั้งหมดแถวอื่น ๆ ..."
dkusleika

3

จริงๆเพิ่งเสร็จสิ้นความคิด Randolph Potter เริ่ม ....

สำหรับการบันทึกฉันไม่คิดว่าคุณจะได้สิ่งนี้ด้วยการบันทึก การบันทึกแมโครเป็นวิธีที่ดีในการทำความคุ้นเคยกับ Excel Object Model แต่ไม่ใช่วิธีที่ดีในการเขียนฟังก์ชั่นที่ใช้ซ้ำได้

Option Explicit

'A simple test that copies every 7th row from the active sheet to a new sheet.
Sub SimpleTest()
    Dim r As Range
    Dim ws As Worksheet

    Set r = GetEveryNthRow(7)
    If Not r Is Nothing Then
        Set ws = Worksheets.Add(Before:=Sheets(1))

        r.Copy ws.Range("A1")
    Else
        MsgBox "Nothing came back from GetEveryNthRow"
    End If
    Set ws = Nothing
    Set r = Nothing
End Sub

'
Function GetEveryNthRow(ByVal NthRow As Long) As Range
    Dim keepRows As Range
    Dim r As Range

    If NthRow > 0 Then
        Set keepRows = Rows(1)
        For Each r In ActiveSheet.UsedRange.Rows
            If (r.Row Mod NthRow) = 0 Then
                Set keepRows = Union(keepRows, Rows(r.Row))
            End If
        Next r
        Set GetEveryNthRow = keepRows
    Else
        MsgBox "The row multiple provided must be greater than 0"
    End If

    Set keepRows = Nothing
End Function

กับคุณในความคิดนำมาใช้ใหม่

3
  1. แทรกคอลัมน์
  2. 1ในแถวแรกมีแทรก
  3. คัดลอกลงไปที่แถว 7 ด้วยCtrlความกดดัน
  4. คว้าบล็อกนั้นแล้วทำแบบเดียวกันอีกครั้งจนจบ
  5. ข้อมูล / กรองสิ่งที่คุณไม่ต้องการและลบสิ่งเหล่านี้
  6. ลบคอลัมน์ที่แทรก

ขอบคุณสำหรับคำตอบ. คุณอธิบายรายละเอียดในขั้นตอนที่ 3 ได้ไหม? คุณหมายถึงกดปุ่ม Ctrl ค้างไว้ขณะลากเมาส์หรือไม่? ฉันไม่สามารถเข้าถึง Excel 2003 ได้ในขณะนี้ดังนั้นฉันจึงไม่สามารถทดสอบได้
Patrick McElhaney

1

เพื่อเลือกทุกแถวที่ 7 จะมีวิธีที่ง่ายกว่า: ใน 7 แถวแรกของคอลัมน์ของคุณ แต่คุณเขียนสิ่งที่อยู่ข้างใน (แถวแรก) จากนั้นคุณเลือก 7 แถวนี้และคัดลอกลงในคอลัมน์ทั้งหมด ตอนนี้สิ่งที่คุณต้องการเพียงไปที่ SELECT-> ไปที่พิเศษ -> เลือก BLANKS-> ตกลงคุณมีการเลือกแต่ละแถว 7 แถว ตอนนี้คุณสามารถทำสิ่งที่คุณต้องการ สนุก!


0

สำหรับทุก ๆ แถวที่ 7

  1. แทรกคอลัมน์
  2. ในแถวที่ 1 ถึงแถวที่ 6 ให้ใส่ "X"
  3. ในแถว 7 ใส่ 1
  4. เติมคอลัมน์ของคุณอัตโนมัติด้วยบล็อกนั้น
  5. ใช้ "Remove Duplicates" ในคอลัมน์นั้น
  6. ลบแถวที่ 1 (ด้วย "X" อันที่ 1)
  7. ลบคอลัมน์ที่เพิ่ม

ยินดีต้อนรับสู่ Super User นี่คือวิธีการที่นำเสนอในคำตอบที่ได้รับการยอมรับและโดย pnuts เป็นเพียงการทำงานมากขึ้น (และการทำลายล้าง) ไม่ชัดเจนว่ามันมีส่วนช่วยอะไร
fixer1234

เป็นเพียงการใช้เมนูอื่นไม่ทำงานในมุมมองของฉันหรือทำลายมากกว่าคำขอต้นฉบับโปสเตอร์ ("ลบแถวอื่น ๆ ทั้งหมด")
Ponch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.