VBA คัดลอก / วางแถวไปยังแผ่นงานอื่นหากเซลล์มากกว่าเซลล์ในคอลัมน์อื่น


1

ใหม่สำหรับ VBA และทำให้สับสนพยายามที่จะคิดออกคำสั่งหลายรายการพร้อมกัน

ฉันต้องการเปรียบเทียบค่าในคอลัมน์ K กับค่าในคอลัมน์ I และถ้าค่าในคอลัมน์ K มากกว่าให้คัดลอกแถวนั้นและวางลงใน Sheet9 เพื่อให้มีรายการอินสแตนซ์ทั้งหมดที่ K> I

นี่คือสิ่งที่ฉันมี:

    Sub compareresult()

Dim i As Integer

For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        ActiveCell.EntireRow.Select
        Selection.copy
        Sheets("Sheet9").range("A65000").End(xlUp).Offset(1, 1).PasteSpecial
    End If
Next i

End Sub

ตอนนี้ฉันได้รับข้อความแสดงข้อผิดพลาด 400 ครั้ง แต่เมื่อถึงจุดหนึ่งระหว่างที่ฉันทำมันจะคัดลอกและวางค่าที่อยู่ด้านบนของกันและกันใน Sheet9 เพื่อที่จะจบลงด้วยการแสดงครั้งสุดท้าย K> I. มีความคิดอะไรบ้าง?


ทำไมคุณเปลี่ยนคำตอบที่ถูกต้องเรื่อย ๆ
wizlog

คำตอบ:


0

ตรวจสอบสิ่งนี้:

Sub compareresult()

Dim i As Long, K As Long

K = 1
For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        Cells(i, 11).EntireRow.Copy Sheets("Sheet9").Range("A" & K)
        K = K + 1
    End If
Next i

End Sub

หมายเหตุ:

  1. เราหลีกเลี่ยงการเลือก
  2. เราคัดลอก / วางในคำสั่งเดียว
  3. เราย้ายแถวปลายทางลงทีละหนึ่งแถว

ฉันได้รับข้อความแสดงข้อผิดพลาด "ตัวห้อยอยู่นอกช่วง"
rontob452

@ rontob452 อาจเป็นไปได้ว่าชื่อแผ่นมีการสะกดผิด ตัวอย่างเช่น"Sheet9"กับ"Sheet 9"
Gary's Student

2

ยินดีต้อนรับสู่ Superuser

สิ่งนี้ค่อนข้างตรงไปตรงมาลองใช้รหัสด้านล่าง ตรวจสอบให้แน่ใจว่าได้แทนที่ "sheet1" ด้วยแผ่นตัวเลขใด ๆ ก็ตามที่แหล่งของคุณคือ

 Sub compareresult()

 Dim row1 As Integer
 Dim row2 As Integer

 row2 = 1
 For row1 = 8 To 500
     If sheet1.Cells(row1, 11).value > sheet1.Cells(row1, 9).value Then
         sheet1.Cells(row1, 1).EntireRow.Copy Sheets(11).Cells(row2, 1)
         row2 = row2 + 1
     End If
 Next row1

 End Sub

สิ่งที่ควรสังเกต:

  1. เราไม่ใช้การเลือกหรือการเปิดใช้งานใด ๆ ซึ่งเร็วกว่า
  2. เราคัดลอกและวางในหนึ่งคำสั่งซึ่งเร็วกว่า
  3. เราย้ายแถวปลายทางลงทีละครั้งซึ่งทำให้รหัสของเราเร็วขึ้น
  4. เราย้ายอ้างอิงทั้งแผ่นข้อมูลต้นทางและปลายทางตามหมายเลขซึ่งปลอดภัยยิ่งขึ้น
  5. เราใช้ชื่อตัวแปรที่มีความหมายซึ่งช่วยให้สามารถอ่านรหัสของเราได้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.