Page 1 of 1

ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sat Nov 16, 2019 3:53 pm
by nakhonchai
สวัสดีครับอาจารย์

ผมขอคำชี้แนะสูตร VBA ดึงข้อมูลบางส่วนแบบมีเงื่อนไขหน่อยครับ

สิ่งที่ต้องการ
- ดึงหรือ Copy ข้อมูลจากไฟล์ ME1586 & ME17814 มาไฟล์ Format Graph NG
- ข้อมูลที่ต้องการจากไฟล์ ME1586 & ME17814 คือในส่วน Column C สีส้ม, Column G สีฟ้า
และ ข้อมูลในแถว TOTAL OUTPUT QTY สีเหลือง

ปัญหาคือ
- ในไฟล์ต้นทางในแต่ละ Sheet ข้อมูลใน Column C และ Column G มีไม่เท่ากันเพราะเป็นไฟล์รับมาอีกที
ต้องการว่าถ้า Column G มีข้อมูลถึงบรรทัดไหน ให้ Copy ข้อมูล Column C มาด้วยเท่านั้น
(ดังตัวอย่างข้อมูลที่ต้องการในไฟล์ Format Graph NG ที่แนบมาครับ)
- และข้อมูลในแถว TOTAL OUTPUT QTY สีเหลือง บาง Sheet อยู่คนละแถวกันผมไม่ทราบต้องกำหนดสูตรเงื่อนไขอย่างไรครับ

ที่ผมเขียนได้ ก็ประมาณนี้น่ะครับ แต่ปัญหาจากไฟล์ที่รับมา ตามที่แจ้ง จึงใคร่ขอคำแนะนำด้วยครับ
#ขอบคุณอาจารย์มากๆครับ

Code: Select all

Sub Test01()
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME17814-1").Select
    Range("C4:C27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME17814-1").Select
    Range("B15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME17814-1").Select
    Range("G4:G27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME17814-1").Select
    Range("C15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME17814-2").Select
    Range("C4:C27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME17814-2").Select
    Range("B15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME17814-2").Select
    Range("G4:G27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME17814-2").Select
    Range("C15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
 
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME1586").Select
    Range("C4:C27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME1586").Select
    Range("B15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    Workbooks("ME1586 & ME17814.xls").Activate
    Sheets("ME1586").Select
    Range("G4:G27").Copy
    Workbooks("Format Graph NG.xlsx").Activate
    Sheets("ME1586").Select
    Range("C15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
     
End Sub

Re: ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sat Nov 16, 2019 6:58 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim sh As Worksheet
Dim rng As Range
For Each sh In Workbooks("ME1586 & ME17814.xlsx").Worksheets
    Set rng = sh.Range("g4", sh.Range("g4").End(xlDown))
    Set rng = Union(rng, rng.Offset(0, -4))
    rng.Copy
    Workbooks("Format Graph NG.xlsx").Worksheets(sh.Name) _
        .Range("b15").PasteSpecial xlPasteValues
Next sh
สำหรับ Code VBA หรือ Macro เราไม่เรียกว่า "สูตร" แต่จะเรียกว่า "โค้ด" หรือทับศัพท์เป็น Code ครับ

ส่วนที่เป็นสูตร VBA ก็มีเช่นกันเพื่อใช้หาค่าใด ๆ ที่ต้องนำไปใช้ต่อใน Code ซึ่งจะมี 3 ตัวหลัก
  1. เป็นฟังก์ชั่นของ VBA เอง
  2. เป็นฟังกชั่นของ Excel ที่ใช้ใน VBA ได้
  3. ผู้ใช้เขียนขึ้นมาเอง โดยปกติในภาษาของ Developer จะเรียกว่า UDF หรือชื่อเต็ม ๆ ว่า User Define Function

Re: ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sat Nov 16, 2019 8:14 pm
by nakhonchai
สำหรับ Code VBA หรือ Macro เราไม่เรียกว่า "สูตร" แต่จะเรียกว่า "โค้ด" หรือทับศัพท์เป็น Code ครับ

ส่วนที่เป็นสูตร VBA ก็มีเช่นกันเพื่อใช้หาค่าใด ๆ ที่ต้องนำไปใช้ต่อใน Code ซึ่งจะมี 3 ตัวหลัก
เป็นฟังก์ชั่นของ VBA เอง
เป็นฟังกชั่นของ Excel ที่ใช้ใน VBA ได้
ผู้ใช้เขียนขึ้นมาเอง โดยปกติในภาษาของ Developer จะเรียกว่า UDF หรือชื่อเต็ม ๆ ว่า User Define Function
ขอบคุณอาจารย์มากครับ สำหรับความรู้และคำแนะนำครับ

รบกวนอาจารย์ชี้แนะในส่วนนี้ให้ด้วยครับ

จากไฟล์ ME1586 & ME17814
- จาก Sheet ME1586 ข้อมูลที่ G34 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10
- จาก Sheet ME17814-1 ข้อมูลที่ G37 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10
- และจาก Sheet ME17814-2 ข้อมูลที่ G37 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10

- ซึ่งข้อมูลในแถว TOTAL OUTPUT QTY สีเหลือง ของไฟล์ ME1586 & ME17814
ที่ Sheet ME1586 จะอยู่คนละแถวกับ Sheet ME17814-1, Sheet ME17814-2
ไม่ทราบว่าต้องใช้ Code เงื่อนไขอย่างไรครับ

#ขอบคุณอาจารย์มากๆครับ

Re: ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sat Nov 16, 2019 8:27 pm
by snasui
:D การจะตอบว่าเขียนอย่างไร จะต้องเขียนมาเองก่อน เขียนได้เท่าไรก็เท่านั้นครับ

ถ้าไม่เขียนมาเองก่อนจะไม่ได้รับคำตอบ และหากเขียนมาเองแล้วให้แจ้งมาด้วยว่าเขียนไว้ตรงไหน อย่างไร จะได้เข้าถึงส่วนที่เป็นปัญหาโดยเร็วครับ

Re: ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sun Nov 17, 2019 1:14 pm
by nakhonchai
สวัสดีครับอาจารย์

ผมลองเขียน Code ในส่วนที่ต้องการ Copy แต่ยังไม่สามารถ Run ต่อได้ ขึ้น Error "9"
รบกวนอาจารย์ช่วยให้คำแนะนำด้วยครับในส่วนของ

"Copy ยอดผลิตทั้งหมดที่แถว TOTAL INPUT QTY (VISUAL) แต่ Cell ข้อมูลของแต่ละ Sheet ไม่ตรงกัน"

ข้อมูลในแถว TOTAL INPUT QTY (VISUAL) สีเหลือง
ของไฟล์ ME1586 & ME17814 ที่ Sheet ME1586 จะอยู่คนละแถวกับ Sheet ME17814-1, Sheet ME17814-2
จากไฟล์ ME1586 & ME17814
- จาก Sheet ME1586 ข้อมูลที่ G33 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10
- จาก Sheet ME17814-1 ข้อมูลที่ G36 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10
- และจาก Sheet ME17814-2 ข้อมูลที่ G36 มาใส่ที่ไฟล์ Format Graph NG ที่ Sheet ME1586 ที่ Cell D10

Code: Select all


Sub Test01()
    
Dim sh As Worksheet
Dim rng As Range
'เขียนเพิ่มเข้ามาใหม่
Dim rall As Range, shStr As String
Dim rs As Range, rt As Range
Dim i As Integer, j As Integer

'Copy ข้อมูลที่มีระยะไม่เท่ากันแต่ละ Sheet โดยอ้างอิง Column G เป็นหลัก

For Each sh In Workbooks("ME1586 & ME17814.xlsx").Worksheets
    Set rng = sh.Range("g4", sh.Range("g4").End(xlDown))
    Set rng = Union(rng, rng.Offset(0, -4))
    rng.Copy
    Workbooks("Format Graph NG.xlsx").Worksheets(sh.Name) _
        .Range("b15").PasteSpecial xlPasteValues
Next sh

'Copy ยอดผลิตทั้งหมดที่แถว TOTAL INPUT QTY (VISUAL) แต่ Cell ข้อมูลของแต่ละ Sheet ไม่ตรงกัน

With Workbooks("ME1586 & ME17814.xlsx").Worksheets("ME17814-1")
        Set rall = .Range("B4", .Range("B" & .Rows.Count).End(xlUp))
        For i = 1 To rall.Rows.Count
            shStr = rall(i).Value = "TOTAL INPUT QTY (VISUAL)"
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Format Graph NG.xlsx").Worksheets(shStr).Range("D10")
            For j = 5 To 5
                rt.Resize(3).Value = _
                    rall(i).Offset(0, j).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next j
        Next i
        
End With

End Sub

Re: ขอสูตร VBA ดึงข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

Posted: Sun Nov 17, 2019 1:34 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim sh As Worksheet, rng As Range, dblTt As Double
For Each sh In Workbooks("ME1586 & ME17814.xlsx").Worksheets
    dblTt = Application.SumIf(sh.Range("b:b"), _
        "TOTAL INPUT QTY (VISUAL)", sh.Range("g:g"))
    Set rng = sh.Range("g4", sh.Range("g4").End(xlDown))
    Set rng = Union(rng, rng.Offset(0, -4))
    rng.Copy
    With Workbooks("Format Graph NG.xlsx").Worksheets(sh.Name)
        .Range("b15").PasteSpecial xlPasteValues
        .Range("d10").Value = dblTt
    End With
Next sh