Page 1 of 1

หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 12:04 am
by hydrotaxonomy
หนูต้องการ หาค่าสัมบูรณ์โดยการเรียกฟังก์ชัน MAE ลากเม้าส์เพื่อหา nData คะ หนูต้องการลากข้อมูลแล้วให้เป็นค่าสัมบูรณ์ก่อน

แล้วจึงทำค่านั้นไปหาค่าเฉลี่ยคะ

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 1:01 am
by bank9597
:D ไม่แน่ใจว่าใช่หรือไม่

ที่ D2 คีย์ =ABS(A2) คัดลอกลงมาครับ

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 1:52 am
by hydrotaxonomy
ต้องการเขียน คำสั่งนั้น ใน VBA คะ คือทำทุกค่าในตารางให้เป็นค่าสัมบูรณ์ทั้งหมด ก่อนที่จะมาทำการหาค่าเฉลี่ยคะ

ตรงช่อง E1 ใช้เรียกฟังชัน MAE ซึ่งจะแสดงผล ค่าเฉลี่ยอย่างเดียวคะ

หนูอาจจะอธิบายไม่เข้า แต่ช่วยเข้าใจหนูหน่อยเถอะคะ :D

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 1:58 am
by hydrotaxonomy

Code: Select all

Option Explicit
Public Function MAE(list As Variant) As Single
Dim item As Variant
Dim ndata As Integer
Dim mynum
Dim mean As Single
ndata = 0
    For Each item In list
        ndata = ndata + 1
    Next item

        mean = Application.WorksheetFunction.Average(list)
        MAE = mean
End Function
หนูแก้โค้ดแล้วเหลือหาค่าสัมบูรณ์คะ
ที่หนูคิดคือ วน loop เก็บข้อมูลทั้งหมดลงใน array แต่ไม่รู้ว่าเอาค่าใน array มาทำให้เป็นค่าสัมบูรณ์ยังไงคะ
ขอคำแนะนำด้วยคะ ขอบคุณมากๆ คะ

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 8:55 am
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Public Function MAE(list As Range) As Single
    Dim item As Range
    Dim ab() As Variant
    Dim i As Integer
    For Each item In list
        i = i + 1
        ReDim Preserve ab(i)
        ab(i) = Abs(list(i))
    Next item
    MAE = Application.Average(ab)
End Function

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 10:43 am
by hydrotaxonomy
ขอบคุณคะอาจารย์ :D :D :D :D :D

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 4:33 pm
by hydrotaxonomy
แล้วถ้าหนูต้องการ ใส่ฟังก์ชันใน cell ไหนก็ได้ แต่ผลลัพธ์ไปอยู่ที่ E1ล่ะคะ หนูไปดู http://snasui.blogspot.com/2011/07/blog-post_01.html

บทความนี้มา แต่หนูเขียนแล้วมันไม่ออกอย่างที่คิดเลยคะ :flw: :flw: :flw:

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 5:45 pm
by snasui
:D แนบไฟล์ที่เขียนพร้อม Code มาด้วยครับ

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 5:59 pm
by hydrotaxonomy

Code: Select all

Option Explicit
Public Function MAE(list As Range) As Single
    Dim item As Range
    Dim ab() As Variant
    Dim i As Integer
    For Each item In list
        i = i + 1
        ReDim Preserve ab(i)
        ab(i) = Abs(list(i))
    Next item
    MAE = Application.Average(ab)
    Application.ScreenUpdating = False
    With item
        If .i > 1 Then
        ElseIf .Column = 2 And .Offset(1, 0) = "" _
            And .Offset(-1, 0) = "" Then
                .Offset(0, -1).Resize(, 2).Cut
                .End(xlUp).Offset(1, -1) _
                    .Resize(, 2).Insert shift:=xlDown
        End If
    End With
    Application.ScreenUpdating = True

End Function

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 6:03 pm
by hydrotaxonomy
แนบไฟล์มาให้ด้วยคะ ขอบคุณสำหรับคำแนะนำและช่วยเหลือหนูตลอดคะ

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 9:05 pm
by snasui
:D ลองเพิ่ม Code ที่ Sheet1 ตามด้านล่าง

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    On Error Resume Next
    If UCase(Mid(Target.Formula, 2, 3)) = "MAE" Then
        Range("E1") = Target.Value
        Target.ClearContents
    End If
    Application.EnableEvents = True
End Sub
ส่วนที่ Module1 ก็เป็น Code เดิมครับ :ard:
snasui wrote: :D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Public Function MAE(list As Range) As Single
    Dim item As Range
    Dim ab() As Variant
    Dim i As Integer
    For Each item In list
        i = i + 1
        ReDim Preserve ab(i)
        ab(i) = Abs(list(i))
    Next item
    MAE = Application.Average(ab)
End Function

Re: หาค่าสัมบรณ์ใน Array

Posted: Tue Jul 24, 2012 9:11 pm
by hydrotaxonomy
ขอบคุณคะ ขอบคุณจริงๆ คะ ขอบคุณที่ช่วยเหลือคะ :D :D :D