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

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

ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ
Re: รบกวนสอนวิธีเขียน Dynamic Range (มือใหม่)
Posted: Fri May 17, 2013 10:26 am
by MRK_9000
snasui wrote:
ช่วยทำมาเป็นไฟล์ตัวอย่าง ซึ่งไม่ควรมีขนาดใหญ่ครับ
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

ลองปรับ 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:
ลองปรับ 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

จาก
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:
จาก
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 แรกของผม"