Excel - Vba แทรกแถวและคงความเป็นสมาชิกช่วง

ปัญหา

ใน 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

คถัดไป

ส่วนท้าย

บันทึก

ขอบคุณ venkat1926 สำหรับคำแนะนำนี้
บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม