Page 1 of 1
ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Mon Dec 22, 2014 11:36 am
by Totem

เรียนอาจารย์และเพื่อนสมาชิก
ต้องการให้คัดลอกข้อมูล ซึ่งไม่สามารถคัดลอกข้อมูลในส่วนที่ค้นหามาได้ทั้งหมด ให้มาวางต่อกันตั้งแต่ H1 : L3 ให้ข้อมูลที่ได้จากตารางทางซ้ายเรียงจากบนลงล่าง - ถ้าหากเกิดช่องว่าง เช่น ช่อง D2 เป็นช่องว่างให้คัดลอกตั้งแต่ B2 : F2 ไปวางไว้ที่ H1 : L1 เป็นต้น ครับ ช่วยดู CODE
Code: Select all
Sub Foundcopy()
Dim nRange As Range, aCell As Range, bCell As Range
Dim SearchString As String, FoundAt As String
Dim ws As Worksheet
Dim ExitLoop As Boolean
On Error GoTo Err
Set ws = Worksheets("sheet1")
Set nRange = ws.Range("B2:F11")
Name = Application.InputBox("ãÊè¢éÍÁÙÅ·Õèµéͧ¡Òäé¹ËÒ", "*")
Set aCell = nRange.Find(What:=Name, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
FoundAt = aCell.Address
Do While ExitLoop = False
Set aCell = nRange.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
FoundAt = FoundAt & ", " & aCell.Address
Else
ExitLoop = True
End If
Loop
Else
MsgBox SearchString & "äÁ辺¢éÍÁÙÅ"
End If
MsgBox "µÓá˹觷Õ辺: " & FoundAt
Range(FoundAt).Select
Range(Selection, Selection.End(xlToRight)).Copy
Range("H1").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Exit Sub
Err:
MsgBox Err.Description
End Sub
ตรงนี้ครับ
Code: Select all
Range(FoundAt).Select
Range(Selection, Selection.End(xlToRight)).Copy
ผมลองปรับดูแล้วยังไม่สำเร็จครับ
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Mon Dec 22, 2014 8:37 pm
by snasui

ตัวอย่างการปรับ Code ตามด้านล่างครับ
Code: Select all
Sub Foundcopy()
Dim nRange As Range, aCell As Range, bCell As Range
Dim SearchString As String, FoundAt As String
Dim ws As Worksheet
Dim ExitLoop As Boolean
Dim r As Range, rString As String
'Other code
MsgBox "ตำแหน่งที่พบ: " & FoundAt
For Each r In Range(FoundAt)
rString = rString & "," & r.Resize(, 5).Address
Next r
Range(Mid(rString, 2)).Copy
Range("H1").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Exit Sub
Err:
MsgBox Err.Description
End Sub
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Tue Dec 23, 2014 11:16 am
by Totem
snasui wrote:
ตัวอย่างการปรับ Code ตามด้านล่างครับ
Code: Select all
Sub Foundcopy()
Dim nRange As Range, aCell As Range, bCell As Range
Dim SearchString As String, FoundAt As String
Dim ws As Worksheet
Dim ExitLoop As Boolean
Dim r As Range, rString As String
'Other code
MsgBox "ตำแหน่งที่พบ: " & FoundAt
For Each r In Range(FoundAt)
rString = rString & "," & r.Resize(, 5).Address
Next r
Range(Mid(rString, 2)).Copy
Range("H1").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Exit Sub
Err:
MsgBox Err.Description
End Sub

ปรับ code แล้ว ได้ตามต้องการครับ ขอบคุณครับอาจารย์
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Thu Dec 25, 2014 5:24 pm
by Totem

ถ้าหาค้นหาแล้วพบข้อมูลในเซลใดๆ ต้องการให้คัดลอกทั้งแถวนั้นๆ จะปรับ code อย่างไรครับ
Code: Select all
Sub Foundcopy()
Dim nRange As Range, aCell As Range, bCell As Range
Dim SearchString As String, FoundAt As String
Dim ws As Worksheet
Dim ExitLoop As Boolean
Dim r As Range, rString As String
Dim lastRow As Long
On Error GoTo Err
Set ws = Worksheets("sheet1")
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set oRange = ws.Range("A2:F" & lastRow)
Name = Application.InputBox("ãÊè¢éÍÁÙÅ·Õèµéͧ¡Òäé¹ËÒ", "*")
Set aCell = nRange.Find(What:=Name, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
FoundAt = aCell.Address
Do While ExitLoop = False
Set aCell = nRange.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
FoundAt = FoundAt & ", " & aCell.Address
Else
ExitLoop = True
End If
Loop
Else
MsgBox SearchString & "äÁ辺¢éÍÁÙÅ"
End If
MsgBox "µÓá˹觷Õ辺: " & FoundAt
For Each r In Range(FoundAt)
rString = rString & "," & r.Resize(, 5).Address
Next r
Range(Mid(rString, 2)).Copy
Range("H1").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Exit Sub
Err:
MsgBox Err.Description
End Sub
ขอบคุณครับ
Foundcopy one.xlsm
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Fri Dec 26, 2014 8:49 am
by snasui

ที่เขียนมาเองแล้วติดปัญหาอย่างไร หรือติดปัญหาที่บรรทัดใดครับ
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Tue Dec 30, 2014 1:50 pm
by Totem
Code: Select all
Sub Foundcopy()
Dim nRange As Range, aCell As Range, bCell As Range
Dim SearchString As String, FoundAt As String
Dim ws As Worksheet
Dim ExitLoop As Boolean
Dim r As Range, rString As String
Dim lastRow As Long
On Error GoTo Err
Set ws = Worksheets("sheet1")
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set nRange = ws.Range("A2:F" & lastRow)
Name = Application.InputBox("ãÊè¢éÍÁÙÅ·Õèµéͧ¡Òäé¹ËÒ", "*")
Set aCell = nRange.Find(What:=Name, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
Set bCell = aCell
FoundAt = aCell.Address
Do While ExitLoop = False
Set aCell = nRange.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
FoundAt = FoundAt & ", " & aCell.Address
Else
ExitLoop = True
End If
Loop
Else
MsgBox SearchString & "äÁ辺¢éÍÁÙÅ"
End If
MsgBox "µÓá˹觷Õ辺: " & FoundAt
For Each r In Range(FoundAt)
rString = rString & "," & r.Resize(1, 6).Address
Next r
Range(Mid(rString, 2)).Copy
Range("H1").PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Exit Sub
Err:
MsgBox Err.Description
End Sub
ปัญหาคือ ถ้าผมค้นหาข้อความหรือตัวเลขได้แล้วให้ คัดลอกมาทั้งแถว ยกตัวอย่าง
ค้นหา a1 มีในช่อง a2 , d5 , b8 แล้ว ให้คัดลอก a2:f2 , a5:f5 , a8:f8 มาวางไว้ที่ h1 ตามลำดับที่แสดงไว้ใน
ไฟล์แนบครับ
จะปรับอย่างไรครับ
คัดลอกมาได้แต่ไม่ได้ตามที่ต้องการครับ
Foundcopy 2.xlsm
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Tue Dec 30, 2014 4:03 pm
by niwat2811
Code: Select all
Sub test()
Dim r As Range
Name = Application.InputBox("ãÊè¢éÍÁÙÅ·Õèµéͧ¡Òäé¹ËÒ", "*")
For Each r In Range("A2:F11")
If r.Value = Name Then
r.End(xlToLeft).Resize(1, 6).Copy Range("H" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next r
Range("H1").Resize(1, 6).Delete Shift:=xlUp
End Sub
ลองแบบนี้ว่าใช้ได้ตามต้องการไหมครับ
Re: ค้นหารายการที่ต้องการและคัดลอกมาอัตโนมัติ
Posted: Sun Jan 04, 2015 6:43 pm
by Totem
niwat2811 wrote:Code: Select all
Sub test()
Dim r As Range
Name = Application.InputBox("ãÊè¢éÍÁÙÅ·Õèµéͧ¡Òäé¹ËÒ", "*")
For Each r In Range("A2:F11")
If r.Value = Name Then
r.End(xlToLeft).Resize(1, 6).Copy Range("H" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next r
Range("H1").Resize(1, 6).Delete Shift:=xlUp
End Sub
ลองแบบนี้ว่าใช้ได้ตามต้องการไหมครับ

ลองปรับแล้ว ได้ผลตามต้องการครับ ขอบคุณครับ คุณ niwat2811