Page 1 of 2
ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Thu Jan 08, 2015 12:25 pm
by yui123
Code: Select all
Dim input1 As Range, iRow As Long
Dim tempRow As Long, cell As Range
Dim nRange As Range, aCell As Range, bCell As Range
Set input1 = Worksheets(1).Range("b1") 'ªèͧ·Õè¨Ð¡ÃÍ¡¤ÓãËé¤é¹ËÒ
Worksheets(1).Range("a3").Resize(1000, 10).ClearContents
For Each cell In Worksheets(4).UsedRange.Offset(1, 0)
If cell.Value = input1.Value Then
Worksheets(4).Cells(cell.Row, 1).Resize(1, 7).Copy
With Worksheets(1)
Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End With
End If
Next cell
# ต้องการให้นำข้อมูลที่ค้นหาเจอมาไว้ในเซลเดียวกัน. (เพราะข้อมูลในฐานข้อมูลอยู่คนละคอลัมน์)
Re: ขอช่วยหน่อยนะค่ะ
Posted: Thu Jan 08, 2015 1:35 pm
by snasui

ช่วยเขียนหัวกระทู้ให้เป็นไปตามกฎการใช้บอร์ดข้อ 2 ด้านบนด้วยครับ

Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Thu Jan 08, 2015 3:17 pm
by yui123
yui123 wrote:Code: Select all
Dim input1 As Range, iRow As Long
Dim tempRow As Long, cell As Range
Dim nRange As Range, aCell As Range, bCell As Range
Set input1 = Worksheets(1).Range("b1") 'ªèͧ·Õè¨Ð¡ÃÍ¡¤ÓãËé¤é¹ËÒ
Worksheets(1).Range("a3").Resize(1000, 10).ClearContents
For Each cell In Worksheets(4).UsedRange.Offset(1, 0)
If cell.Value = input1.Value Then
Worksheets(4).Cells(cell.Row, 1).Resize(1, 7).Copy
With Worksheets(1)
Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End With
End If
Next cell
# ต้องการให้นำข้อมูลที่ค้นหาเจอมาไว้ในเซลเดียวกัน. (เพราะข้อมูลในฐานข้อมูลอยู่คนละคอลัมน์)
Re: ขอช่วยหน่อยนะค่ะ
Posted: Thu Jan 08, 2015 3:54 pm
by snasui

Code นี้เป็น Code ที่ผมเขียนตอบท่านอื่น
ให้แนบไฟล์ตัวอย่างของตนเองมาพร้อมทั้งปรับ Code ด้วยตนเองให้เป็นไปตามที่ต้องการ ติดแล้วค่อยถามกันต่อครับ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Fri Jan 09, 2015 10:18 pm
by yui123
อาจารย์ค่ะ คือต้องการให้ชีทที่ 2 เมื่อค้นหาข้อมูลเสร็จเรียบร้อยแล้ว เราสามารถเพิ่มข้อมูลลงไปในชีทได้
แล้วเมื่อกดปุ่มบันทึก ข้อมูลที่ถูกเพิ่มล่าสุดจะไปอยู่ต่อท้ายของข้อมูลบรรทัดสุดท้ายในชีท profile ค่ะ
โค้ดการบันทึกข้อมูลจะอยู่ในชีทที่ 2 ในปุ่ม บันทึก
(แนบไฟล์ไม่ได้ค่ะ เป็นไฟล์ขนาดใหญ่)
โค้ดในปุ่มบันทึก
Code: Select all
Sub savedata1()
Dim check1 As Long
Dim i As Integer
Dim z1 As Long
check1 = Worksheets(2).Range("a4").End(xlDown).Row
For i = endrow1 To check1
Worksheets(6).Cells(z1 + 1, 1).Value = Worksheets(2).Cells(i, 1).Value
Worksheets(6).Cells(z1 + 1, 2).Value = Worksheets(2).Cells(i, 2).Value
Worksheets(6).Cells(z1 + 1, 3).Value = Worksheets(2).Cells(i, 3).Value
Worksheets(6).Cells(z1 + 1, 4).Value = Worksheets(2).Cells(i, 4).Value
Worksheets(6).Cells(z1 + 1, 5).Value = Worksheets(2).Cells(i, 5).Value
Next i
End Sub
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Fri Jan 09, 2015 10:20 pm
by yui123
โค้ดในปุ่มค้นหา ชีทที่ 2 (เพื่ออาจารย์ต้องการจะดูควบคู่ไปด้วยค่ะ)
Code: Select all
Sub Button1_คลิก()
Dim z1 As Long
Dim endrow1 As Long
Dim input1 As Range, irow As Long
Dim tempRow As Long, cell As Range
Dim nRange As Range, aCell As Range, bCell As Range
Set input1 = Worksheets(2).Range("b1")
Worksheets(2).Range("a5").Resize(1000, 10).ClearContents
For Each cell In Worksheets(5).UsedRange.Offset(1, 0)
If cell.Value = input1.Value Then
Worksheets(5).Cells(cell.Row, 1).Resize(1, 5).Copy
With Worksheets(2)
Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End With
End If
Next cell
Worksheets(2).Range("a1").End(xlDown).Offset(1, 0).Select
endrow1 = Selection.Row
endrow1 = endrow1 + 1
z1 = Worksheets(6).End(xlDown).Select.Row
End Sub
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 6:30 am
by snasui

ตัวอย่างการบันทึกข้อมูลลงฐานข้อมูลดูที่นี่ครับ
viewtopic.php?f=9&t=7248
สำหรับไฟล์แนบให้ทำมาเป็นไฟล์ตัวอย่างซึ่งไม่ควรมีขนาดใหญ่ครับ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 12:52 pm
by yui123
อาจารย์ค่ะลองนำโค้ดไปใส่ดูแล้ว และเปลี่ยนในส่วนของชีทข้อมูลแล้ว
แต่เมื่อกดบันทึก มันจะนำเอาข้อมูลเดิมที่มีอยู่ไปใส่ในชีท Profile ค้ะ แต่ที่ต้องการคือนำข้อมูลใหม่ที่ได้เพิ่มไปล่าสุดนำไปใส่ไว้ค้ะ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 7:15 pm
by snasui

ตัวอย่าง Code ตามด้านล่าง เป็นการเขียน Code ให้จัดการกับ Table เนื่องจากมีการนำ Table มาใช้
Code: Select all
Sub save1()
Dim lastRow As Long, sourceRange As Range
With Sheets("Sheet3")
lastRow = .ListObjects("Table1").ListRows.Count
Set sourceRange = .ListObjects("Table1").ListRows(lastRow).Range
End With
With Sheets("Sheet4")
.Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 5).Value = _
sourceRange.Value
End With
End Sub
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 10:01 pm
by yui123
อาจารย์ค่ะ เมื่อกด save แล้วไม่มีอะไรเปลี่ยนแปลงเลยค้ะยังเหมือนเดิม.
ทำงานกับชีทอันที่ 2 ชื่อ sheet3 เมื่อใส่ไอดีละกดค้นหาข้อมูลจะแสดง และเมื่อเรากรอกข้อมูลเพิ่ม แล้วกดบันทึกข้อมูลจะไปอยู่ในแถวสุดท้ายของชีทชื่อว่า profile
โค้ดการบันทึกอยู่ในปุ่ม save ในชีทอันที่ 2 ค้ะ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 11:25 pm
by snasui

Code นั้นทำงานถูกต้องแล้ว โดยจะ Copy เอาบรรทัดสุดท้ายของ Table ไปไว้ในชีท Profile โดย Table
นั้นจะต้องไม่มีบรรทัดว่าง ดูภาพประกอบด้านล่าง
แต่ที่เป็นปัญหาคือ เมื่อกดแป้นค้นหาแล้ว Table มีการแทรกบรรทัดว่างขึ้นมา ควรแก้ไขตรงนี้เสียก่อนครับ
ที่บอกว่ากรอกข้อมูลเพิ่ม กรอกที่บรรทัดใดของ Table ครับ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 11:37 pm
by yui123
อาจารย์ค่ะ แล้วถ้ากรณีที่ไม่ใช่ตาราง ต้องปรับแก้ตรงไหนหรอค้ะ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 11:39 pm
by snasui

ตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Sub tttt()
Dim sourceRange As Range
With Sheets("Sheet3")
Set sourceRange = .Range("a" & .Rows.Count).End(xlUp).Resize(1, 5)
End With
With Sheets("profile")
.Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 5).Value = _
sourceRange.Value
End With
End Sub
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 11:50 pm
by yui123
ถ้ากรณีที่ผู้ใช้เพิ่มรายชื่อไปมากกว่าหนึ่งชื่อ ต้องแก้ไขตรงไหนหรอค้ะ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sat Jan 10, 2015 11:58 pm
by snasui

แก้มาเองครับ ติดตรงไหนค่อยถามกันต่อ
การสร้างโปรแกรมลักษณะนั้นจะมีความยุ่งยากเพิ่มขึ้น เพราะต้องทราบก่อนว่าเดิมข้อมูลมีกี่บรรทัด ที่เพิ่มเข้ามามีกี่บรรทัด แล้วค่อยเลือกเฉพาะที่เพิ่ม ปัญหาคือ ทราบได้อย่างไรว่าบรรทัดไหนของเดิม บรรทัดไหนที่เพิ่มเข้ามา
แนวทางหนึ่งที่ทำได้คือในตอนค้นหา ให้นับบรรทัดมาด้วยว่าค้นพบข้อมูลและนำมาแสดงกี่บรรทัด ค่าบรรทัดนี้จะต้องเก็บไว้ที่เซลล์ใดเซลล์หนึ่งเพื่อเอาไว้อ้างอิงกรณีมีการเพิ่มข้อมูล เพราะต้องนำจำนวนข้อมูลทั้งหมดหักกับบรรทัดที่ค้นหามาได้ ผลต่างคือจำนวนบรรทัดที่เพิ่ม
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sun Jan 11, 2015 12:01 am
by yui123
ขอบคุณค่ะ จะลองพยายามปรับแก้ดูนะค้ะอาจารย์
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sun Jan 11, 2015 12:09 am
by yui123
Code: Select all
Sub savedata1()
Dim check1 As Long
Dim i As Integer
Dim z1 As Long
check1 = Worksheets(2).Range("a4").End(xlDown).Row
z1 = Worksheets(6).End(xlDown).Select.Row
End Sub
ใช้ในการจัดเก็บข้อมูล พอนำมาใส่โค้ดจะ Debug ตรง z1 ค้ะ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sun Jan 11, 2015 12:12 am
by snasui

ก่อนจะ End(xlUp) หรือ End(xlDonw) หรืออื่น ๆ จะต้องเป็น Range ไม่ใช่อ้างแค่ชีท สังเกตตัวอย่างในโพสต์ก่อน ๆ ครับ
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sun Jan 11, 2015 12:16 am
by yui123
Re: ช่วยเหลือเรื่อง VBA ในส่วนของการแสดงข้อความจากหลายคอลัมน์เป็นเซลล์เดียวกันหน่อยค่ะ
Posted: Sun Jan 11, 2015 12:18 am
by snasui

อ่านที่ผมตอบแล้วทำตามนั้น ไม่เข้าใจข้อความใดที่ผมตอบ ให้นำข้อความนั้นมาถามครับ