: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

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

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#1

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post 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
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#3

Post 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 เพื่ออ้างอิงได้อย่างไรบ้างครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

:D แนบไฟล์ตัวอย่างและอธิบายด้วยว่า ปัญหาคืออะไร ต้องการคำตอบที่ชีทไหน เซลล์ไหน หน้าตาเป็นอย่างไร เพื่อจะได้เข้าใจตรงกันครับ
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#5

Post by MRK_9000 »

snasui wrote::D แนบไฟล์ตัวอย่างและอธิบายด้วยว่า ปัญหาคืออะไร ต้องการคำตอบที่ชีทไหน เซลล์ไหน หน้าตาเป็นอย่างไร เพื่อจะได้เข้าใจตรงกันครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#6

Post by snasui »

:D ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#7

Post by MRK_9000 »

snasui wrote::D ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#8

Post by snasui »

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

ในพื้นที่สีเหลือง ช่วยโยงให้เห็นว่ามาจากข้อมูลใด ด้วยเงื่อนไขใด จะได้เข้าใจตรงกันครับ
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#9

Post by MRK_9000 »

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

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

ขอโทษครับพอดีทำชีทใหม่ไม่ได้ล้อสูตรติดมาด้วยทำให้ใหม่แล้วครับรบกวนดูให้ด้วยนะครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#10

Post 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
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#11

Post 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 เลย และอยากจะศึกษาเป็นเรื่องเป็นราวอาจารย์มีคำแนะนำอย่างไรบ้างครับ)
You do not have the required permissions to view the files attached to this post.
niwat2811
Bronze
Bronze
Posts: 350
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

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

#12

Post 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
ลองแบบนี้ดูว่าได้ตรงตามความต้องการไหมครับ ถ้าไม่ได้คงต้องรอให้ท่านอาจารย์หรือผู้รู้ท่านอื่นช่วยครับ
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#13

Post by MRK_9000 »

ขอบคุณอาจารย์และ niwat2811 ครับ
ทำได้ตามที่ต้องการแล้วครับ ^_^
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#14

Post 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 อย่างไรครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#15

Post 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 ครับ
MRK_9000
Member
Member
Posts: 9
Joined: Thu Mar 21, 2013 9:31 am

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

#16

Post 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 แรกของผม"
Post Reply