ขอคำแนะนำเกี่ยวกับการเขียน VBA เพื่อหาแถวสุดท้ายเพื่อใส่ค่าใน Range
Posted: Thu Nov 10, 2016 12:39 pm
สวัสดีครับพอดีผมมีปัญหาเรื่องการเขียน VBA ครับ
จากไฟล์ตัวอย่างที่ได้แนบมาครับ ผมจะเริ่มจากการกรอกข้อมูลลงในคอลัมน์ B จนถึง E ของ Sheet Input data ครับ
หลังจากนั้นผมต้องการจะ ใช้ VBA คัดลอกข้อมูลจาก คอลัมน์ B-E ของ Sheet Input data มาไว้ใน Format ครับ
โดยเป็นการ Copy แบบแถวเว้นแถวครับ ซึ่งผมจะใช้ คอลัมน์ O ของ Format sheet กับคอลัมน์ A ของ Input data sheet มา Match กันเพื่ออ้างอิงแถวที่จะลง Data ซึ่งตอนนี้ทำได้แล้ว
แต่ผมติดปัญหาที่ผมอยากจะให้ VBA check แถวสุดท้ายของ Input data เพื่อนำมาใส่ใน
และอยากได้ คอลัมน์สุดท้ายของ Format โดยมีเงื่อนไขว่า
ถ้าเลขหน้าคอลัมน์ B ของ Input data ที่แถวสุดท้าย ต้องตรงกับตัวเลขที่อยู่ใน Column O ใน Format ให้คืนค่าของ Row นั้นมาเพื่อใส่ใน
ซึ่งตอนนี้ผมยังหาทางแก้ไขไม่ได้ครับ
รบกวนพี่ๆ ช่วยแนะนำทีครับ
ตัวอย่าง Code ที่ผมลองเขียนครับ
จากไฟล์ตัวอย่างที่ได้แนบมาครับ ผมจะเริ่มจากการกรอกข้อมูลลงในคอลัมน์ B จนถึง E ของ Sheet Input data ครับ
หลังจากนั้นผมต้องการจะ ใช้ VBA คัดลอกข้อมูลจาก คอลัมน์ B-E ของ Sheet Input data มาไว้ใน Format ครับ
โดยเป็นการ Copy แบบแถวเว้นแถวครับ ซึ่งผมจะใช้ คอลัมน์ O ของ Format sheet กับคอลัมน์ A ของ Input data sheet มา Match กันเพื่ออ้างอิงแถวที่จะลง Data ซึ่งตอนนี้ทำได้แล้ว
แต่ผมติดปัญหาที่ผมอยากจะให้ VBA check แถวสุดท้ายของ Input data เพื่อนำมาใส่ใน
Code: Select all
Set rColA = Sheets("Input data").Range("A2:A" & lastrow)ถ้าเลขหน้าคอลัมน์ B ของ Input data ที่แถวสุดท้าย ต้องตรงกับตัวเลขที่อยู่ใน Column O ใน Format ให้คืนค่าของ Row นั้นมาเพื่อใส่ใน
Code: Select all
iTemNo In Range("O16:O" & lastrow)รบกวนพี่ๆ ช่วยแนะนำทีครับ
ตัวอย่าง Code ที่ผมลองเขียนครับ
Code: Select all
Sub InspectionData()
Dim iTemNo As Range, rColA As Range, lastrow As Long, lastrow2 As Long, lCount As Long, _
rHeadNoData As Range, rHeadNoInput As Range, rFind As Range, rnHead As Range
Worksheets("format").Activate
Set rHeadNoData = ActiveSheet.Range("a13:c13")
Set rHeadNoInput = Sheets("Input data").Range("c1:e1")
lastrow = Sheets("Input data").Range("B:B").End(xlUp).Row
lastrow2 = Sheets("Input data").Range("R:R").End(xlUp).Row
Set rColA = Sheets("Input data").Range("A2:A" & lastrow)
For Each iTemNo In Range("O16:O" & lastrow)
lCount = Application.CountIf(rColA, iTemNo)
If lCount > 0 Then
lCount = Application.Match(iTemNo, rColA, 0) + 1
For Each rnHead In rHeadNoData
Set rFind = rHeadNoInput.Find(what:=rnHead.Value)
If Not rFind Is Nothing Then
rnHead.Offset(iTemNo.Row - rnHead.Row, 0).Value = _
rFind.Offset(lCount - 1, 0).Value
Else
rnHead.Offset(iTemNo.Row - rnHead.Row, 0).Value = ""
End If
Next rnHead
End If
Next iTemNo
MsgBox ("InspectionData Finish")
End Sub