Page 2 of 2

Re: สอบถามสูตรการ วนLoop นำข้อมูลไปบันทึก

Posted: Wed Nov 06, 2019 2:45 pm
by sakajohn
จากcodeนี้เราสามารถปรับให้codeกระชับกว่านี้ได้มั้ยครับ กรณีที่เราต้องการเพิ่มบรรทัดในการบันทึกจะได้สะดวกมากขึ้นครับ

Code: Select all

If Range("A6").Value <> "" Then
    Application.Goto Reference:="OFFSET(R6C1,0,5,1,5)"
       Selection.Copy
  ThisWorkbook.Activate
    Application.Goto Reference:= _
        "OFFSET('[DataBase.xlsx]Sheet1'!R1C1,MATCH(R6C1,INDEX('[DataBase.xlsx]Sheet1'!R2C1:R50000C1,0),0),37)"
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
      ThisWorkbook.Activate
   End If
Codeจะอยู่ใน Module 5 การทำงานคือที่ไฟล์ Daily5 จะถูกป้อนข้อมูลโดยที่ข้อมูลที่ป้อนแต่ละครั้งจะมีข้อมูลที่ไม่เท่ากัน เช่น 5 บรรทัด 10บรรทัด สูงสุดอยู่ที่ 18บรรทัด จากนั้นจะทำการcopyข้อมูลจากไฟล์ Daily5 ไปวางในไฟล์ DataBaseให้ตรงตามรหัส จากนั้นCopyไฟล์ Daily5 ไปวางในไฟล์DataPlanให้ตรงตามรหัสเหมือนกัน

Re: สอบถามสูตรการ วนLoop นำข้อมูลไปบันทึก

Posted: Wed Nov 06, 2019 9:51 pm
by snasui
:D ตัวอย่าง Code สำหรับ Update ข้อมูลลงในไฟล์ Database ครับ

Code: Select all

Dim rngSourceAll As Range, rngSource As Range
Dim rngTargetAll As Range, i As Integer
With ThisWorkbook.Worksheets("M011")
    Set rngSourceAll = .Range("a6", .Range("a" & .Rows.Count).End(xlUp))
End With
With Workbooks("Database.xlsx").Worksheets("Sheet1")
    Set rngTargetAll = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
End With
For Each rngSource In rngSourceAll
    If Application.CountIf(rngTargetAll, rngSource) > 0 Then
        i = Application.Match(rngSource, rngTargetAll, 0)
        rngTargetAll(i).Offset(0, 37).Resize(1, 5).Value = rngSource.Offset(0, 5).Resize(1, 5).Value
    End If
Next rngSource
ส่วนการ Update ไฟล์อื่นใดนอกเหนือจากนี้ก็ใช้รูปแบบนี้ได้ ลองประยุกต์ใช้ดูครับ

Re: สอบถามสูตรการ วนLoop นำข้อมูลไปบันทึก

Posted: Wed Nov 06, 2019 10:23 pm
by sakajohn
ขอบคุณครับ