Excel - Vba แทรกแถวและคงความเป็นสมาชิกช่วง
![](http://img.brin-designs.com/img/games/386/excel-vba-inserting-row.png)
ปัญหา
ใน VBA ฉันจะคัดลอก / แทรก (เข้าที่) แถวได้อย่างไรและตรวจสอบให้แน่ใจว่าถ้าแถวต้นทางตัดกันช่วงคอลัมน์แถวใหม่จะอยู่ในช่วงและช่วงจะเพิ่มขึ้น 1 (เช่นแถวแทรก) .หากเคอร์เซอร์อยู่ในแถวที่อยู่ด้านบนสุดของช่วงแถวใหม่จะไม่กลายเป็นสมาชิกของช่วงและช่วงจะไม่เพิ่มขนาดทีละหนึ่งแถว
xlUp และ xlDown ไม่ได้สร้างความแตกต่างและไม่ปล่อยให้พวกเขาออกไป (ซึ่ง Excel บอกว่าเป็นสิ่งที่ดีที่สุดที่จะทำถ้าคุณมีการตัดช่วงคอลัมน์เรียง)
สารละลาย
ฉันทำให้มันเป็นไปโดยอัตโนมัติอย่างสมบูรณ์ คุณไม่จำเป็นต้องตั้งชื่อช่วง แมโคร "ทดสอบ" ทำ อินพุตที่คุณต้องใส่เท่านั้นคือคุณต้องพิมพ์จำนวนแถวที่จะลบเช่น 2 หรือ 3 หรือ 4 เมื่อกล่องอินพุตปรากฏขึ้น แมโคร "เลิกทำ" เลิกทำสิ่งที่แมโครทำฐานข้อมูลเป็นแบบนี้ตั้งแต่ A1 ถึง A5
1
2
3
4
5
อย่าทำอะไรเลยเพียงแค่เรียกใช้แมโคร "ทดสอบ" (ควรคัดลอกมาโครทั้งสองในโมดูล) ขออภัยนี่เป็นมาโครที่ซับซ้อน ฉันพยายามใช้ "ปรับขนาด" ไม่อย่างใดก็แล้วแต่ฉันไม่ประสบความสำเร็จ บางทีผู้เชี่ยวชาญบางคนสามารถให้ทางออกที่ดีกว่า แต่วิธีนี้ใช้ได้ผล หากคุณต้องการช่วงของช่วงที่มีชื่อแตกต่างกันแก้ไขคำสั่งนี้ในแมโคร "ทดสอบ" เพื่อให้เหมาะกับคุณ
ช่วง ("A2: a4"). ชื่อ = "myrange"
มาโครคือ:
มาโคร 1
การทดสอบย่อย ()Dim r As Range, As As Integer, K As Integer, m As Integer
แก้
ช่วง ("A2: a4"). ชื่อ = "myrange"
ตั้งค่า r = พิสัย ("myrange")
m = WorksheetFunction.Count (r)
MsgBox m
k = InputBox ("พิมพ์จำนวนแถวที่จะเลือก")
แถว (k) .Select
ตั้งค่า r = พิสัย ("myrange")
j = ช่วง ("myrange"). เซลล์ (1, 1). แถว
'MsgBox j
Selection.Rows.Insert
ถ้า Selection.Row = j แล้ว
ActiveWorkbook.Names ( "MyRange"). ลบ
ช่วง (เซลล์ (Selection.Row, "A"), r.Cells (m, 1)) Name = "myrange"
สิ้นสุดถ้า
ช่วง MsgBox ("myrange") ที่อยู่
ส่วนท้าย
มาโคร 2
เลิกทำย่อย ()Dim r As Range, c As Range
ตั้งค่า r = ช่วง (ช่วง ("A1"), เซลล์ (แถวจำนวน "A") สิ้นสุด (xlUp))
สำหรับแต่ละคอิน
ถ้า c = "" ดังนั้น c.EntireRow.Delete
คถัดไป
ส่วนท้าย