: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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#1

Post by nakhonchai »

ผมไม่ทราบว่าจะเขียนสูตรในการตรวจสอบเงื่อนไขนี้อย่างไรครับ
ผมเขียนแบบ Copy ปกติได้
ผมจึงไคร่ขอคำชี้แนะเรื่องสูตรการ Copy ข้อมูลด้วย VBA แบบมีเงื่อนไขดังนี้ครับ
ถ้าตรวจว่าในคอลัมน์ D ทั้งคอลัมน์ในไฟล์ Book2 ว่าตรงชื่อไหนให้ Copy ข้อมูลที่กำหนดของแถวชื่อนั้นไปใส่ที่ Sheet ที่กำหนดในไฟล์ Book1
เช่น ถ้าคอลัมน์ D ในไฟล์ Book2 เจอว่ามีแค่ AL-46 จะนำข้อมูลของแถว AL-46 ในช่องสีฟ้าไปใส่ที่ Sheet ชื่อ SL46 ในช่องที่กำหนดใน Book1
เพราะบางครั้งข้อมูลที่ได้มาจะไม่มีแถว AL-41 หรือ AL-42 บ้างในกรณี ข้อมูลของ AL-46 ก็จะขยับขึ้นมาอยู่แถวบนแทน
#ผมได้แนบไฟล์ตัวอย่างและไฟล์ VBA ที่เขียนมาไว้แล้วครับ (ปล.เห็นใส่ช่องที่ใส่โค้ด VBA เวลาโพสกัน ผมใส่ไม่เป็นครับ)
#ขอบคุณมา ณ ที่นี้มากครับ

H8 ของ Book2 ==> F98 ของ Book1
H9 ของ Book2 ==> F99 ของ Book1
H10 ของ Book2 ==> F100 ของ Book1
I8 ของ Book2 ==> H98 ของ Book1
I9 ของ Book2 ==> H99 ของ Book1
I10 ของ Book2 ==> H100 ของ Book1
J8 ของ Book2 ==> J98 ของ Book1
J9 ของ Book2 ==> J99 ของ Book1
J10 ของ Book2 ==> J100 ของ Book1
K8 ของ Book2 ==> L98 ของ Book1
K9 ของ Book2 ==> L99 ของ Book1
K10 ของ Book2 ==> L100 ของ Book1
L8 ของ Book2 ==> N98 ของ Book1
L9 ของ Book2 ==> N99 ของ Book1
L10 ของ Book2 ==> N100 ของ Book1
M8 ของ Book2 ==> P98 ของ Book1
M9 ของ Book2 ==> P99 ของ Book1
M10 ของ Book2 ==> P100 ของ Book1
#ขอขอบคุณมา ณ ที่นี่ด้วยครับ
Attachments
Book1.xlsx
(153.87 KiB) Downloaded 9 times
Book2.xlsx
(13.03 KiB) Downloaded 6 times
VBA.xlsb
(14.55 KiB) Downloaded 13 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#2

Post by snasui »

:D กรอกข้อมูลตัวอย่างใน Book2.xlsx และข้อมูลตัวอย่างปลายทางที่ตรงกันกับข้อมูลต้นทางแล้วแนบไฟล์ตัวอย่างทั้งหมดมาใหม่ครับ

สำหรับการวาง Code ให้แสดงเป็น Code อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนครับ :roll:
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#3

Post by nakhonchai »

สวัสดีครับอาจารย์
ก่อนอื่นขอขอบคุณมากครับสำหรับปัญหาของผม
ผมได้กรอกข้อมูลต้นทางที่ Book2.xlsx และข้อมูลปลายทางที่ Book1.xlsx แล้วครับ

Code: Select all

Sub Copy()
    Set wbSource = Workbooks("Book2.xlsx")
    Set shSource = wbSource.Sheets("Data")
    Set wbTaget = Workbooks("Book1.xlsx")
    Set shTaget1 = wbTaget.Sheets(" SL41")
    Set shTaget2 = wbTaget.Sheets(" SL42")
    Set shTaget3 = wbTaget.Sheets(" SL46")
    Set shTaget4 = wbTaget.Sheets(" SL37")
    '-----------------------------------------------------------------------------------
        shTaget1.Range("F98:F100").Value = shSource.Range("H2:H4").Value
        shTaget1.Range("H98:H100").Value = shSource.Range("I2:I4").Value
        shTaget1.Range("J98:J100").Value = shSource.Range("J2:J4").Value
        shTaget1.Range("L98:L100").Value = shSource.Range("K2:K4").Value
        shTaget1.Range("N98:N100").Value = shSource.Range("L2:L4").Value
        shTaget1.Range("P98:P100").Value = shSource.Range("M2:M4").Value
        
        shTaget2.Range("F98:F100").Value = shSource.Range("H5:H7").Value
        shTaget2.Range("H98:H100").Value = shSource.Range("I5:I7").Value
        shTaget2.Range("J98:J100").Value = shSource.Range("J5:J7").Value
        shTaget2.Range("L98:L100").Value = shSource.Range("K5:K7").Value
        shTaget2.Range("N98:N100").Value = shSource.Range("L5:L7").Value
        shTaget2.Range("P98:P100").Value = shSource.Range("M5:M7").Value
        
        shTaget3.Range("F98:F100").Value = shSource.Range("H8:H10").Value
        shTaget3.Range("H98:H100").Value = shSource.Range("I8:I10").Value
        shTaget3.Range("J98:J100").Value = shSource.Range("J8:J10").Value
        shTaget3.Range("L98:L100").Value = shSource.Range("K8:K10").Value
        shTaget3.Range("N98:N100").Value = shSource.Range("L8:L10").Value
        shTaget3.Range("P98:P100").Value = shSource.Range("M8:M10").Value
        
        shTaget4.Range("F98:F100").Value = shSource.Range("H11:H13").Value
        shTaget4.Range("H98:H100").Value = shSource.Range("I11:I13").Value
        shTaget4.Range("J98:J100").Value = shSource.Range("J11:J13").Value
        shTaget4.Range("L98:L100").Value = shSource.Range("K11:K13").Value
        shTaget4.Range("N98:N100").Value = shSource.Range("L11:L13").Value
        shTaget4.Range("P98:P100").Value = shSource.Range("M11:M13").Value
End Sub

nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#4

Post by nakhonchai »

ขอโทษครับอาจารย์
ผมลืมแนบไฟล์ครับ
Attachments
Book1.xlsx
(153.86 KiB) Downloaded 13 times
Book2.xlsx
(12.89 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#5

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub Test0()
    Dim rall As Range, shStr As String
    Dim rs As Range, rt As Range
    Dim i As Integer, j As Integer
    With Workbooks("Book2.xlsx").Worksheets("Data")
        Set rall = .Range("d2", .Range("d" & .Rows.Count).End(xlUp))
        For i = 1 To rall.Count Step 3
            shStr = Replace(rall(i).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f98")
            For j = 4 To 8
                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
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#6

Post by nakhonchai »

ขอบคุณอาจารย์มากๆเลยครับตรงตามต้องการเลยครับ
รบกวนอาจารย์ช่วยอธิบายสูตรคำสั่งให้หน่อยได้ไหมครับ
หรือแนะนำให้ผมหน่อยว่าจะศึกษาคำสั่งสูตรได้จากไหนบ้างครับ
ผมไม่มีความรู้เรื่องคำสั่งเลย สูตรที่ผมเขียนก่อนหน้า
ผมหาศึกษาทางเนตแล้วมาแปลงเอาน่ะครับ
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#7

Post by nakhonchai »

สวัสดีครับอาจารย์
รบกวนขอถามสูตรเพิ่มครับ
ถ้าเป็นกรณีต้องการนำข้อมูล จาก Book2 ที่คอลัมน์อื่นด้วย มาเพิ่มข้อมูลในตำแหน่งอื่นของ Book1 ครับ
พยายามแกะสูตรของอาจารย์เพื่อจะศึกษาทำความเข้าใจ หมดทางจริงๆครับ
ผมได้แนบไฟล์ กรอกข้อมูลที่ต้องการ ต้นทาง Book2 และปลายทาง Book1 มาให้แล้วครับ
รบกวนช่วยพิจารณาด้วยนะครับ
ขอบคุณอาจารย์มากๆครับ
Attachments
Book1.xlsx
(244.34 KiB) Downloaded 6 times
Book2.xlsx
(18.91 KiB) Downloaded 7 times
VBA.xlsb
(19.35 KiB) Downloaded 6 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#8

Post by snasui »

nakhonchai wrote: Mon Aug 19, 2019 7:57 am ขอบคุณอาจารย์มากๆเลยครับตรงตามต้องการเลยครับ
รบกวนอาจารย์ช่วยอธิบายสูตรคำสั่งให้หน่อยได้ไหมครับ
หรือแนะนำให้ผมหน่อยว่าจะศึกษาคำสั่งสูตรได้จากไหนบ้างครับ
ผมไม่มีความรู้เรื่องคำสั่งเลย สูตรที่ผมเขียนก่อนหน้า
ผมหาศึกษาทางเนตแล้วมาแปลงเอาน่ะครับ
:D กรุณาถามในส่วนที่ไม่เข้าใจ ผมขออภัยที่ไม่แปล Code เป็นรายบรรทัดครับ
nakhonchai wrote: Mon Aug 19, 2019 12:28 pm สวัสดีครับอาจารย์
รบกวนขอถามสูตรเพิ่มครับ
ถ้าเป็นกรณีต้องการนำข้อมูล จาก Book2 ที่คอลัมน์อื่นด้วย มาเพิ่มข้อมูลในตำแหน่งอื่นของ Book1 ครับ
พยายามแกะสูตรของอาจารย์เพื่อจะศึกษาทำความเข้าใจ หมดทางจริงๆครับ
ผมได้แนบไฟล์ กรอกข้อมูลที่ต้องการ ต้นทาง Book2 และปลายทาง Book1 มาให้แล้วครับ
รบกวนช่วยพิจารณาด้วยนะครับ
ขอบคุณอาจารย์มากๆครับ
ได้ปรับ Code มาแล้วหรือไม่ครับ หากปรับมาแล้วกรุณาโพสต์ Code นั้นมาด้วยพร้อมทั้งอธิบายว่าต้องการจะเขียนให้ทำงานในลักษณะใด จะได้ทราบปัญหาโดยสังเขปครับ
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#9

Post by nakhonchai »

ผมลองเพิ่มเติมสูตรของอาจารย์ให้สามารถ copy ในคอลัมน์อื่นๆ
รบกวนอาจารย์ช่วยตรวจสอบให้ทีครับ

Code: Select all

Sub Test0()
    Dim rall As Range, shStr As String
    Dim rs As Range, rt As Range
    Dim i As Integer, j As Integer
    Dim k As Integer, l As Integer
    Dim m As Integer, n As Integer
    Dim o As Integer, p As Integer
    Dim q As Integer, r As Integer
    Dim v As Integer, w As Integer
    
    With Workbooks("Book2.xlsx").Worksheets("Data")
        Set rall = .Range("d2", .Range("d" & .Rows.Count).End(xlUp))
        For i = 1 To rall.Count Step 3
            shStr = Replace(rall(i).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f101")
            For j = 4 To 9
                rt.Resize(3).Value = _
                    rall(i).Offset(0, j).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next j
        Next i
         
        For k = 1 To rall.Count Step 3
            shStr = Replace(rall(k).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f104")
            For l = 12 To 17
                rt.Resize(3).Value = _
                    rall(k).Offset(0, l).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next l
        Next k
        
        For m = 1 To rall.Count Step 3
            shStr = Replace(rall(m).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f98")
            For n = 24 To 29
                rt.Resize(3).Value = _
                    rall(m).Offset(0, n).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next n
        Next m
        
        For o = 1 To rall.Count Step 3
            shStr = Replace(rall(o).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f119")
            For p = 38 To 40
                rt.Resize(3).Value = _
                    rall(o).Offset(0, p).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next p
        Next o
        
        For q = 1 To rall.Count Step 3
            shStr = Replace(rall(q).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f116")
            For r = 41 To 46
                rt.Resize(3).Value = _
                    rall(q).Offset(0, r).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next r
        Next q
        
            For v = 1 To rall.Count Step 3
            shStr = Replace(rall(v).Value, "A", " S")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book1.xlsx").Worksheets(shStr).Range("f113")
            For w = 47 To 52
                rt.Resize(3).Value = _
                    rall(v).Offset(0, w).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next w
        Next v
        
    End With

End Sub
Attachments
VBA.xlsb
(19.38 KiB) Downloaded 11 times
Book1.xlsx
(245.48 KiB) Downloaded 10 times
Book2.xlsx
(18.91 KiB) Downloaded 10 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#10

Post by snasui »

:D Code ที่เขียนมานั้นผิดพลาดตรงไหน อย่างไร ช่วยอธิบายประกอบด้วยครับ
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#11

Post by nakhonchai »

Code ที่เขียนสามารถใช้ได้ปกติครับ
เลยอยากให้ช่วยชี้แนะเพิ่มเติม แค่นั้นครับ
ขอบคุณอาจารย์มากๆครับ
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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#12

Post by snasui »

:D กรณี Code ทำงานได้ไม่จำเป็นต้องปรับ ควรใช้ตามที่เราเข้าใจไปก่อน ค่อย ๆ ศึกษาครับ

เอาไว้มีปัญหาค่อยถามกันมาใหม่ครับ
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#13

Post by nakhonchai »

สวัสดีครับอาจารย์
ผมขอรบกวนขอคำชี้แนะเนื่องสูตร VBA ครับ
จากคราวก่อนที่อาจารย์ได้แนะนำสูตรการ Copy ไว้ให้ ผมลองมาแก้ไขเพิ่มเติม แต่ไม่สามารถทำงานได้
เนื่องจากมีเงื่อนไขเพิ่มเข้ามาครับ เงื่อนไขที่ว่า คือ ต้องการ Copy ข้อมูลจาก 2 ไฟล์มาไว้ที่ไฟล์เดียวกัน
ถ้าคอลัมน์ D ในไฟล์ Lower และ Upper เจอว่ามี M-5A จะนำข้อมูลที่ต้องการของแถว M-5A ไปใส่ที่ Sheet ชื่อ M-5A ในช่องที่กำหนดในไฟล์ Book
****ถ้าชื่อ Sheet เป็นลักษณะ M-5_9A แบบนี้สูตร VBA ทำได้มั้ยครับ
ผมได้แนบไฟล์ตัวอย่างการลงข้อมูลมาให้แล้วครับ และไฟล์ที่ลองแก้ไขแต่ไม่เวิร์ค 5555
#ขอบคุณมา ณ ที่นี้มากครับ

Code: Select all

Sub Test0()
    Dim rall As Range, shStr As String
    Dim rs As Range, rt As Range
    Dim i As Integer, j As Integer
    Dim k As Integer, l As Integer
    Dim m As Integer, n As Integer
    Dim o As Integer, p As Integer
    Dim q As Integer, r As Integer
    Dim v As Integer, w As Integer
        
    With Workbooks("ME15812 LOWER.xlsx").Worksheets("LOWER")
        Set rall = .Range("d2", .Range("d" & .Rows.Count).End(xlUp))
        For i = 1 To rall.Count Step 8
            shStr = Replace(rall(i).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E98")
            For j = 4 To 4
                            rt.Resize(3).Value = _
                    rall(i).Offset(0, j).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next j
        Next i
         
        For k = 1 To rall.Count Step 8
            shStr = Replace(rall(k).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("H108")
            For l = 5 To 7
                rt.Resize(3).Value = _
                    rall(k).Offset(0, l).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next l
        Next k
        
        For m = 1 To rall.Count Step 8
            shStr = Replace(rall(m).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E117")
            For n = 10 To 15
                rt.Resize(3).Value = _
                    rall(m).Offset(0, n).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next n
        Next m
        
        For o = 1 To rall.Count Step 8
            shStr = Replace(rall(o).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E126")
            For p = 17 To 22
                rt.Resize(3).Value = _
                    rall(o).Offset(0, p).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next p
        Next o
        
        
        With Workbooks("ME15812 UPPER.xlsx").Worksheets("UPPER")
        For q = 1 To rall.Count Step 8
            shStr = Replace(rall(q).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E108")
            For r = 4 To 6
                rt.Resize(3).Value = _
                    rall(q).Offset(0, r).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next r
        Next q
        
            For v = 1 To rall.Count Step 8
            shStr = Replace(rall(v).Value, "M", " M")
            shStr = Replace(shStr, "-", "")
            Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E162")
            For w = 7 To 9
                rt.Resize(3).Value = _
                    rall(v).Offset(0, w).Resize(3).Value
                Set rt = rt.Offset(0, 1)
            Next w
        Next v
               
        End With

End Sub

Attachments
Book.xlsx
(277.93 KiB) Downloaded 4 times
LOWER.xlsx
(28.1 KiB) Downloaded 4 times
UPPER.xlsx
(22.73 KiB) Downloaded 4 times
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#14

Post by nakhonchai »

ไฟล์ VBA ที่ลองแก้ไขครับ
Attachments
VBA Copy.xlsb
(18.27 KiB) Downloaded 7 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#15

Post by snasui »

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

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

#16

Post by nakhonchai »

ขอโทษอาจารย์ด้วยครับ ผมลืมเปลี่ยนชื่อไฟล์ให้สอดคล้องกัน
เมื่อผมกดให้ทำงาน ขึ้นหน้า Run-time Error '9': แล้วผมกดปุ่ม Debug จะฟ้องที่บรรทัดนี้ครับ
ขอบคุณอาจารย์มากๆครับ

Code: Select all

Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E98")
Attachments
ME15812 LOWER.xlsx
(28.1 KiB) Downloaded 8 times
ME15812 UPPER.xlsx
(22.73 KiB) Downloaded 6 times
Book.xlsx
(277.93 KiB) Downloaded 5 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#17

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
With Workbooks("ME15812 LOWER.xlsx").Worksheets("LOWER")
    Set rall = .Range("d2", .Range("d" & .Rows.Count).End(xlUp))
    For i = 1 To rall.Count Step 8
'            shStr = Replace(rall(i).Value, "M", " M")
'            shStr = Replace(shStr, "-", "")
        shStr = rall(i).Value
        Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E98")
        For j = 4 To 4
                rt.Resize(3).Value = _
                rall(i).Offset(0, j).Resize(3).Value
            Set rt = rt.Offset(0, 1)
        Next j
    Next i     
'Other code   

End With

With Workbooks("ME15812 UPPER.xlsx").Worksheets("UPPER")
'Other code
:!: หมายเหตุ
  1. ไฟล์ Book แก้ชื่อชีตใหม่ทุกชีตห้ามมีวรรค
  2. ก่อนจะขึ้นไฟล์ Upper ใน Code ต้องปิดด้วย End With เสียก่อน
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#18

Post by nakhonchai »

เรียนอาจารย์
ผมลองใส่ตามที่อาจารย์แนะนำ มันยังแจ้ง Error อยู่ครับ รบกวนช่วยชี้แนะด้วยครับ
***ไฟล์ Book ชื่อชีททุกชีทผมแก้ไม่มีเว้นวรรคแล้ว
ตามไฟล์แนบครับ

บรรทัดที่แสดง Error

Code: Select all


Set rt = Workbooks("Book.xlsx").Worksheets(shStr).Range("E98")

Attachments
Book.xlsx
(277.98 KiB) Downloaded 5 times
VBA Copy.xlsb
(18.28 KiB) Downloaded 6 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 copy ข้อมูลจากไฟล์หนึ่งไปอีกไฟล์ แบบมีเงื่อนไข

#19

Post by snasui »

:D ผมยังพบค่าวรรคหลังชือชีตครับ

เมื่อลบ - ออกจากชื่อชีตของไฟล์ Book.xlsx ค่าในคอลัมน์ D ของไฟล์ที่ลงท้ายด้วย Upper, Lower จะต้องลบ - ออกด้วยเช่นกัน ถ้ามี - ก็ต้องมีให้เหมือนกันครับ
Attachments
Space.png
Space.png (14.71 KiB) Viewed 267 times
nakhonchai
Member
Member
Posts: 67
Joined: Fri Jan 25, 2019 6:45 pm
Excel Ver: 2016

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

#20

Post by nakhonchai »

เรียนอาจารย์
เรื่องชื่อชีทผมผิดพลาดต้องขออภัยด้วยครับ ผมดูไม่รอบคอบเองครับ

หลังแก้ไขแล้ว ผมอลงใส่สูตรให้ดึงค่ามาแค่ชีทเดียว
สามารถ copy ข้อมูลมาได้แค่ 3 บรรทัด และมีข้อมูลอยู่ในชีทอื่นด้วยครับ
รบกวนอาจารย์ช่วยชี้แนะด้วยครับ
ข้อมูลเป็นดังเอกสารแนบครับ
ขอบคุณอารย์มากครับ
Attachments
Book.xlsx
(276.8 KiB) Downloaded 6 times
VBA Copy.xlsb
(18.23 KiB) Downloaded 5 times
Post Reply