Page 1 of 1

ต้องการตรวจอุปกรณ์กับรหัสวัสดุตามไฟล์ฐานข้อมูลที่มี

Posted: Sun Jul 03, 2022 10:56 pm
by pipi
ดิฉันต้องการตรวจอุปกรณ์(Column A)กับรหัสวัสดุ(Column A) ตามไฟล์ฐานข้อมูลที่มีหากตรงตามฐานข้อมูล ให้แสดงว่า "TRUE" ที่ Column C

//อุปกรณ์ชื่อว่า "แอร์" จะมีรหัสวัสดุตามไฟล์ฐานข้อมูล(ไฟล์ชื่อ : รหัสmatt) คือ 30024135 , 30035881 , 30038309 , 30024136 ,30024128 และ 40000197 //

โค้ดที่พยายามลองเขียนไว้ได้คือ
1.ดึงข้อมูลจากไฟล์ฐานข้อมูล(ไฟล์ชื่อ : รหัสmatt) มาสร้างชีทใหม่ที่ไฟล์ที่จะใช้ทำงานตรวจสอบ (ไฟล์ชื่อ : Question)
2.ตรวจสอบชื่ออุปกรณ์(Product Type)ในColumn B และรหัสวัสดุ(Matt.)ในColumn A ตามฐานข้อมูลที่ดึงมาอยู่ในชีทใหม่(Sheet : รหัสMatt) หากตรงกัน ให้แสดงว่า "TRUE" ที่ Column C
แต่ลองเขียนแล้วรันดู ผลลัพธ์ดันแสดงเป็น FALSE หมดเลยค่ะ เลยอยากให้ท่านๆที่สะดวกช่วยเช็ครึแนะแนวทางหน่อยค่ะ ขอบคุณมากนะคะ
และขออภัยหากอธิบายตรงไหนไม่เข้าใจค่ะ

Code: Select all

 
Sub Matt()
Workbooks("ÃËÑÊMatt.xlsx").Worksheets("Sheet1").Range("A1:C1421").Copy

Sheets.Add
ActiveSheet.Name = "ÃËÑÊMatt"
Range("A1048576").End(xlUp).Select
Selection.PasteSpecial xlPasteValues

End Sub

Sub Check()

Dim rSH As Worksheet
Dim sSh As Worksheet
Set rSH = Worksheets("ÃËÑÊMatt")
Set sSh = Worksheets("data")

Dim ptype As String, Matt As String, result As String

Sheets("data").Select

Range("C1").Value = "Result"


For a = 2 To sSh.Range("A" & Rows.Count).End(xlUp).Row

        Matt = sSh.Range("A" & a).Value
        ptype = sSh.Range("B" & a).Value
        result = sSh.Range("C" & a).Value
        
        For b = 2 To rSH.Range("A" & Rows.Count).End(xlUp).Row
            If (rSH.Range("A" & b).Value = ptype And rSH.Range("B" & b).Value = Matt) Then
            sSh.Range("C" & a).Value = result
            Else
            sSh.Range("C" & a).Value = "False"
            
            Exit For
            
        End If
            
    Next b
Next a

Debug.Print "Completed"
            
End Sub

Sub Run()

Call Matt
Call Check

End Sub

หมายเหตุ : เนื่องจาก ไฟล์ข้อมูลจริง รหัสวัสดุและอุปกรณ์มีจำนวนมาก ดิฉันจึงคิดว่าหากนำมาเขียนไล่ลงใส่โค้ดให้เช็คแบบ IF ทีละตัวคงจะทำให้โค้ดยาวมาก ดิฉันเลยทำเป็นไฟล์ฐานข้อมูลแทน เพื่อเก็บรหัสวัสดุของแต่ละอุปกรณ์ แล้วจึงค่อยให้ดึงไฟล์จากฐานข้อมูลมาสร้างชีทใหม่ ในไฟล์ที่จะใช้ทำงานตรวจสอบ ดิฉันเป็นมือใหม่พึ่งเริ่มเรียน พยายามลองเขียนรึศึกษาArray แล้วแต่ก็ไม่สามารถรันได้ หากท่านใดมีความรู้แล้วสะดวกที่จะลองช่วยคิดรึแนะนำ จะยินดีเป็นอย่างยิ่งค่ะ ขอบคุณมากค่ะ

Re: ต้องการตรวจอุปกรณ์กับรหัสวัสดุตามไฟล์ฐานข้อมูลที่มี

Posted: Mon Jul 04, 2022 1:07 pm
by snasui
:D ตัวอย่างการปรับ Code กรณีใช้การ Loop ด้วย For ครับ

Code: Select all

Sub Check()

    Dim rSH As Worksheet
    Dim sSh As Worksheet
    Dim f As Boolean
    Set rSH = Workbooks("รหัสMatt.xlsx").Worksheets("รหัสMatt")
    Set sSh = ThisWorkbook.Worksheets("data")
    
    Dim ptype As String, Matt As String, result As String
    
    Sheets("data").Select
    sSh.Activate
    Range("C1").Value = "Result"
    
    
    For a = 2 To sSh.Range("A" & Rows.Count).End(xlUp).Row
    
            Matt = sSh.Range("A" & a).Value
            ptype = sSh.Range("B" & a).Value
            result = sSh.Range("C" & a).Value
            
            For b = 2 To rSH.Range("A" & Rows.Count).End(xlUp).Row
                If (rSH.Range("A" & b).Value = ptype And rSH.Range("B" & b).Value = Matt) Then
    '                sSh.Range("C" & a).Value = result
                    f = True
                    Exit For
    '            Else
    '                sSh.Range("C" & a).Value = "False"
    '                Exit For
                
                End If
                
            Next b
            If f Then
                sSh.Range("c" & a).Value = True
            Else
                sSh.Range("c" & a).Value = False
            End If
    Next a
    
    Debug.Print "Completed"
            
End Sub