Page 1 of 1

ต้องการเขียนFunction ให้ทำงานในรูปแบบ FormulaArray

Posted: Tue Sep 07, 2021 2:28 pm
by eyepop99
ต้องการสร้างฟังก์ชันใช้งานจากสูตร
=INDEX($A$2:$A$13,MATCH(0,COUNTIF($C$1:C1,$A$2:$A$13),0),1)
ซึ่งให้ทำงานในรูปแบบ Array
x = Range ข้อมูลIndex และ Range criteria Countif ซึ่งจะเป็นช่วงเดียวกัน
y = เป็นตัว Range สำหรับCountif

Code: Select all

Function dup(x As Range, y As Range)

	With Application.WorksheetFunction
		dup = .Index(x, .Match(0, .CountIf(y, x), 0), 1)
	End With

End Function

Re: ต้องการเขียนFunction ให้ทำงานในรูปแบบ FormulaArray

Posted: Tue Sep 07, 2021 7:47 pm
by snasui
:D กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงผลลัพธ์ที่ต้องการ จะได้สะดวกต่อการตอบของเพื่อนสมาชิกครับ

Re: ต้องการเขียนFunction ให้ทำงานในรูปแบบ FormulaArray

Posted: Wed Sep 08, 2021 9:12 am
by eyepop99
snasui wrote: Tue Sep 07, 2021 7:47 pm :D กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงผลลัพธ์ที่ต้องการ จะได้สะดวกต่อการตอบของเพื่อนสมาชิกครับ
ไฟล์แนบเพิ่มเติมครับตามที่อาจารย์แจ้งครับ

Re: ต้องการเขียนFunction ให้ทำงานในรูปแบบ FormulaArray

Posted: Wed Sep 08, 2021 7:55 pm
by snasui
:D ปกติการเขียนสูตรใช้เองจะใช้เมื่อไม่มีฟังก์ชันของ Excel ให้ใช้ สำหรับกรณีนี้สามารถใช้ฟังก์ชันปกติทำงานได้ไม่จำเป็นต้องเขียนฟังก์ชันด้วย VBA แต่อย่างใดครับ

ตัวอย่างด้านล่างเพื่อใช้เป็นกรณีศึกษาในการเขียนฟังก์ชันหาค่าไม่ซ้ำขึ้นมาใช้เอง

Code: Select all

Function Abcdef(rngs As Range) As Variant
    Dim r As Range
    Dim c As New Collection, it As Variant
    Dim a() As Variant, l As Long
    On Error Resume Next
    
    For Each r In rngs
        c.Add r.Value, r.Value
    Next r
    For Each it In c
        ReDim Preserve a(l)
        a(l) = it
        l = l + 1
    Next it
    Abcdef = Application.Transpose(a)
End Function
วิธีการใช้ เซลล์ใด คีย์

=Abcdef(A4:A21)

Enter

หากใช้ Excel 2010 อาจจะใช้ Index เข้าไปช่วยเช่น

=INDEX(Abcdef($A$4:$A$21),ROWS(C$4:C4))

Enter > Copy ลงด้านล่าง

Re: ต้องการเขียนFunction ให้ทำงานในรูปแบบ FormulaArray

Posted: Thu Sep 09, 2021 9:07 am
by eyepop99
snasui wrote: Wed Sep 08, 2021 7:55 pm :D ปกติการเขียนสูตรใช้เองจะใช้เมื่อไม่มีฟังก์ชันของ Excel ให้ใช้ สำหรับกรณีนี้สามารถใช้ฟังก์ชันปกติทำงานได้ไม่จำเป็นต้องเขียนฟังก์ชันด้วย VBA แต่อย่างใดครับ

ตัวอย่างด้านล่างเพื่อใช้เป็นกรณีศึกษาในการเขียนฟังก์ชันหาค่าไม่ซ้ำขึ้นมาใช้เอง

Code: Select all

Function Abcdef(rngs As Range) As Variant
    Dim r As Range
    Dim c As New Collection, it As Variant
    Dim a() As Variant, l As Long
    On Error Resume Next
    
    For Each r In rngs
        c.Add r.Value, r.Value
    Next r
    For Each it In c
        ReDim Preserve a(l)
        a(l) = it
        l = l + 1
    Next it
    Abcdef = Application.Transpose(a)
End Function
วิธีการใช้ เซลล์ใด คีย์

=Abcdef(A4:A21)

Enter

หากใช้ Excel 2010 อาจจะใช้ Index เข้าไปช่วยเช่น

=INDEX(Abcdef($A$4:$A$21),ROWS(C$4:C4))

Enter > Copy ลงด้านล่าง
ขอบคุนครับ ได้ผลลัพธ์ตามต้องการ
ส่วนฟังก์ชันนี้จัดทำเป็นกรณีศึกษาต้องการให้คนที่ไม่ถนัดในการเขียนสูตรใช้งานได้ง่ายขึ้น