:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#1

Post 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
Attachments
Format Graph NG.xlsx
(452.52 KiB) Downloaded 12 times
VBA.xlsm
(14.06 KiB) Downloaded 11 times
ME1586 & ME17814.xlsx
(42.14 KiB) Downloaded 11 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post 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
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#3

Post 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 เงื่อนไขอย่างไรครับ

#ขอบคุณอาจารย์มากๆครับ
Attachments
VBA.xlsm
(15 KiB) Downloaded 3 times
Format Graph NG.xlsx
(452.52 KiB) Downloaded 3 times
ME1586 & ME17814.xlsx
(42.14 KiB) Downloaded 3 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

:D การจะตอบว่าเขียนอย่างไร จะต้องเขียนมาเองก่อน เขียนได้เท่าไรก็เท่านั้นครับ

ถ้าไม่เขียนมาเองก่อนจะไม่ได้รับคำตอบ และหากเขียนมาเองแล้วให้แจ้งมาด้วยว่าเขียนไว้ตรงไหน อย่างไร จะได้เข้าถึงส่วนที่เป็นปัญหาโดยเร็วครับ
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#5

Post 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
Attachments
ME1586 & ME17814.xlsx
(42.59 KiB) Downloaded 12 times
Format Graph NG.xlsx
(452.55 KiB) Downloaded 11 times
VBA.xlsm
(17.31 KiB) Downloaded 12 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#6

Post 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
Post Reply