Page 1 of 1

รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Wed May 15, 2013 4:52 pm
by MRK_9000
ช่วยด้วยครับถ้าเราจะกำหนด Range บรรทัดสุดท้าย "AutoFill Destination:=Range("L4:AJ7")" ตามตัวอย่างด้านล่างให้เป็น Dynamic Range ต้องเขียน Code อย่างไร

Sub SUBMIT()
'
' SUBMIT Macro
'
' Keyboard Shortcut: Ctrl+s
'
Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False

Range("L4:AJ4").Select
Selection.AutoFill Destination:=Range("L4:AJ7")[/color]
End Sub

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Wed May 15, 2013 5:19 pm
by snasui
การทำให้ Dynamic สามารถปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Selection.AutoFill Destination:=Range("L4", Range("AJ" & Rows.Count).End(xlup))
สำหรับการโพสต์ Code ให้เป็น Code ดูตัวอย่างที่นี่ครับ viewtopic.php?f=2&t=1187

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 16, 2013 10:07 am
by MRK_9000
snasui wrote:การทำให้ Dynamic สามารถปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Selection.AutoFill Destination:=Range("L4", Range("AJ" & Rows.Count).End(xlup))
สำหรับการโพสต์ Code ให้เป็น Code ดูตัวอย่างที่นี่ครับ viewtopic.php?f=2&t=1187

ขอบพระคุณอาจารย์มากครับที่ตอบกระทู้นี้ และมีเรื่องเรียนสอบถามเพิ่มเติมครับเนื่องจากผมต้องการให้ AutoFill L4:AJ4 ให้มีจำนวนเท่ากับ ข้อมูลที่ Filter ได้จากช่วง E1:K1 ซึ่งจะมีจำนวน Row ที่ไม่แน่นอน ผมจะต้องเขียน Code เพื่ออ้างอิงได้อย่างไรบ้างครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 16, 2013 12:09 pm
by snasui
:D แนบไฟล์ตัวอย่างและอธิบายด้วยว่า ปัญหาคืออะไร ต้องการคำตอบที่ชีทไหน เซลล์ไหน หน้าตาเป็นอย่างไร เพื่อจะได้เข้าใจตรงกันครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 16, 2013 5:09 pm
by MRK_9000
snasui wrote::D แนบไฟล์ตัวอย่างและอธิบายด้วยว่า ปัญหาคืออะไร ต้องการคำตอบที่ชีทไหน เซลล์ไหน หน้าตาเป็นอย่างไร เพื่อจะได้เข้าใจตรงกันครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 16, 2013 6:37 pm
by snasui
:D ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 10:26 am
by MRK_9000
snasui wrote::D ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 11:20 am
by snasui
MRK_9000 wrote:4. สิ่งที่ต้องการให้พื้นที่สีเหลืองนั้น AutoFill สูตรบรรทัดที่ 3 L4: AJ4ผันแปรตาม ข้อมูลที่ Filter ได้ในคอลัมน์ E:K ครับ โดยให้ AutoFill ถึงแค่ Row สุดท้ายที่ E:K มีข้อมูล
อ่านแล้วไม่เข้าใจครับ สูตรในบรรทัดที่ 3 คืออะไร อยู่ในชีทไหน ช่วงเซลล์ไหนครับ

ในพื้นที่สีเหลือง ช่วยโยงให้เห็นว่ามาจากข้อมูลใด ด้วยเงื่อนไขใด จะได้เข้าใจตรงกันครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 11:46 am
by MRK_9000
snasui wrote:
MRK_9000 wrote:4. สิ่งที่ต้องการให้พื้นที่สีเหลืองนั้น AutoFill สูตรบรรทัดที่ 3 L4: AJ4ผันแปรตาม ข้อมูลที่ Filter ได้ในคอลัมน์ E:K ครับ โดยให้ AutoFill ถึงแค่ Row สุดท้ายที่ E:K มีข้อมูล
อ่านแล้วไม่เข้าใจครับ สูตรในบรรทัดที่ 3 คืออะไร อยู่ในชีทไหน ช่วงเซลล์ไหนครับ

ในพื้นที่สีเหลือง ช่วยโยงให้เห็นว่ามาจากข้อมูลใด ด้วยเงื่อนไขใด จะได้เข้าใจตรงกันครับ

ขอโทษครับพอดีทำชีทใหม่ไม่ได้ล้อสูตรติดมาด้วยทำให้ใหม่แล้วครับรบกวนดูให้ด้วยนะครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 4:10 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub SUBMIT()
    Dim FillRow As Integer
    With Sheets("REPORT6")
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
    Range("E5:K5").Select
    Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
End Sub

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 4:51 pm
by MRK_9000
snasui wrote::D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub SUBMIT()
    Dim FillRow As Integer
    With Sheets("REPORT6")
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
    Range("E5:K5").Select
    Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
End Sub

ขอบคุณมากครับ
ผมลองปรับตามดูแล้วครับอาจารย์ แต่มันยังมี bug อยู่เมื่อเลือกตัวแปรใน Report6 "C2" สลับไปสลับมาครับ
ผมขออนุญาตรบกวนให้ข้อมูลเพิ่มเติมนะครับ คือว่าตัวแปรใน Report6 "C2" อาจจะมีมากกว่านี้ตามข้อมูลใน Sheet "GUI" ซึ่งคอลัมน์ E:K นั้นข้อมูลจริงอาจจะมีตั้งแต่ 10 ถึง 1000 Row หรือมากกว่านั้นครับ (ผมลองพยายามปรับจากที่อาจไกด์มาแล้วแต่เนื่องจากไม่มีพื้นฐาน VBA เลย และอยากจะศึกษาเป็นเรื่องเป็นราวอาจารย์มีคำแนะนำอย่างไรบ้างครับ)

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Fri May 17, 2013 5:28 pm
by niwat2811

Code: Select all

Sub SUBMIT()
Dim FillRow As Integer
Dim lr As Long
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
lr = Cells(Rows.Count, 12).End(xlUp).Row
    With Sheets("REPORT6")
        Range("L5:AJ" & lr).Clear
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    Range("E5:K5").Select
    Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
End Sub
ลองแบบนี้ดูว่าได้ตรงตามความต้องการไหมครับ ถ้าไม่ได้คงต้องรอให้ท่านอาจารย์หรือผู้รู้ท่านอื่นช่วยครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Mon May 20, 2013 8:21 am
by MRK_9000
ขอบคุณอาจารย์และ niwat2811 ครับ
ทำได้ตามที่ต้องการแล้วครับ ^_^

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 23, 2013 2:43 pm
by MRK_9000
niwat2811 wrote:

Code: Select all

Sub SUBMIT()
Dim FillRow As Integer
Dim lr As Long
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
lr = Cells(Rows.Count, 12).End(xlUp).Row
    With Sheets("REPORT6")
        Range("L5:AJ" & lr).Clear
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    Range("E5:K5").Select
    Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
End Sub
ลองแบบนี้ดูว่าได้ตรงตามความต้องการไหมครับ ถ้าไม่ได้คงต้องรอให้ท่านอาจารย์หรือผู้รู้ท่านอื่นช่วยครับ

รบกวนครับถ้าผมจะเป็นเปลี่ยนเงื่อนไขการ AutoFill สูตร ตามไฟลที่แนบเพิ่มมา ควรจะเขียน CODE อย่างไรครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 23, 2013 4:22 pm
by snasui
:D จาก
4. ต้องการให้ข้อมูลสูตรบรรทัด L2:AJ2 เมื่อกดปุ่ม SUBMIT นั้น Autofill ผันแปรตามข้อมูลตราง E:K ตามข้อ 3โดยมี (ข้อยกเว้น) ไม่ต้อง Autofill สูตรบรรทัด L2:AJ2 ในกรณีถ้าหาก
4.1 E:K ไม่มีข้อมูล หรือ
4.2 E:K มีข้อมูลแค่ 1 รายการหรือ 1 ROW
ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Sub SUBMIT()
    Dim FillRow As Integer
    Dim lr As Long
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
    lr = Rows.Count
    With Sheets("REPORT6")
        Range("L3:AJ" & lr).Clear
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    If Range("E3") <> "" Then
        Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
    End If
End Sub
ในคราวหน้าให้ลองปรับ Code มาเองดูก่อนครับ กรณีที่ปรับเองไม่ได้เลย ไม่แนะนำให้ใช้ VBA ครับ

Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)

Posted: Thu May 23, 2013 4:36 pm
by MRK_9000
snasui wrote::D จาก
4. ต้องการให้ข้อมูลสูตรบรรทัด L2:AJ2 เมื่อกดปุ่ม SUBMIT นั้น Autofill ผันแปรตามข้อมูลตราง E:K ตามข้อ 3โดยมี (ข้อยกเว้น) ไม่ต้อง Autofill สูตรบรรทัด L2:AJ2 ในกรณีถ้าหาก
4.1 E:K ไม่มีข้อมูล หรือ
4.2 E:K มีข้อมูลแค่ 1 รายการหรือ 1 ROW
ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Sub SUBMIT()
    Dim FillRow As Integer
    Dim lr As Long
    Sheets("GUI").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("E1:K1"), Unique:=False
    lr = Rows.Count
    With Sheets("REPORT6")
        Range("L3:AJ" & lr).Clear
        FillRow = .Range("E" & Rows.Count).End(xlUp).Row - _
            .Range("L" & Rows.Count).End(xlUp).Row + 1
    End With
    If Range("E3") <> "" Then
        Range("L" & Rows.Count).End(xlUp).Resize(FillRow, 25).FillDown
    End If
End Sub
ในคราวหน้าให้ลองปรับ Code มาเองดูก่อนครับ กรณีที่ปรับเองไม่ได้เลย ไม่แนะนำให้ใช้ VBA ครับ
ขอบคุณอาจารย์มากครับ ^_^

"คราวหน้าจะปรับ Code เอง และถ้าติดช่วงไหนแล้วถึงจะขอคำแนะนำครับ เนื่องจากเดิมผมใช้งานแต่ Funtion บน Excel
เพิ่งจะเริ่มใช้งานการบันทึก Macro เพื่อศึกษาการเขียน Code VBA ครับ และกระทู้นี้เป็น Case Study แรกของผม"