vova2209
Thành viên tích cực
![](/diendan/data/PhoToDanhHieu/pip.gif)
![](/diendan/data/PhoToDanhHieu/pip.gif)
- Tham gia
- 5/4/17
- Bài viết
- 835
- Được thích
- 112
- Giới tính
- Nam
- Nghề nghiệp
- Đường bộ
View attachment 195202
Nhờ anh chị giúp đỡ code lấy giữ liệu:
VD + như dòng 6 Đắp đất 4, bên dưới cột phụ không có giữ liệu
+ Dòng 12~15 có giữ liệu liên tiếp sẽ lấy về dòng 11..
Sub Nghich_ty_nha()
Dim i As Long, Er As Long, Tem As String
Er = Range("C" & Rows.Count).End(xlUp).Row
For i = Er To 3 Step -1
If Tem = "" Then
Tem = "=" & Range("F" & i).Address
Else
Tem = Tem & Range("J1") & Range("F" & i).Address
End If
If Range("D" & i) = Empty Then
Range("G" & i) = Tem: Tem = ""
End If
Next i
End Sub
Cảm ơn chị! nhưng sao bị ngược thế nhỉMã:Sub Nghich_ty_nha() Dim i As Long, Er As Long, Tem As String Er = Range("C" & Rows.Count).End(xlUp).Row For i = Er To 3 Step -1 If Tem = "" Then Tem = "=" & Range("F" & i).Address Else Tem = Tem & Range("J1") & Range("F" & i).Address End If If Range("D" & i) = Empty Then Range("G" & i) = Tem: Tem = "" End If Next i End Sub
Vậy bạn thử cái này xemCảm ơn chị! nhưng sao bị ngược thế nhỉ
+ Chỉnh lại xuôi được không ạ chị
+ Mai chế hộ em nốt cái dấu ngăn cách
+ chạy xong value luôn cho nhẹ!
giúp e nốt nhé
Sub Nghich_ty_thoi()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), I As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range("D3", Range("F" & Rows.Count).End(3)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) = Empty Then Keys = "dong" & I
If Not Dic.Exists(Keys) Then
Dic.Add Keys, I
dArr(I, 1) = sArr(I, 3)
Else
dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 3)
End If
Next I
Range("H3").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Code trước quá đẹp, sao lại bỏVậy bạn thử cái này xem
Mã:Sub Nghich_ty_thoi() Dim Dic As Object, Keys As String Dim sArr(), dArr(), I As Long Set Dic = CreateObject("Scripting.Dictionary") sArr = Range("D3", Range("F" & Rows.Count).End(3)).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For I = 1 To UBound(sArr, 1) If sArr(I, 1) = Empty Then Keys = "dong" & I If Not Dic.Exists(Keys) Then Dic.Add Keys, I dArr(I, 1) = sArr(I, 3) Else dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 3) End If Next I Range("H3").Resize(I - 1) = dArr Set Dic = Nothing End Sub
Sub Nghich_ty_2()
Dim i As Long, Er As Long, Tem As String
Er = Range("C" & Rows.Count).End(xlUp).Row
For i = Er To 3 Step -1
If Tem = "" Then
Tem = Range("F" & i).Value
Else
Tem = Range("F" & i).Value & "; " & Tem
End If
If Range("D" & i) = Empty Then Range("G" & i) = Tem: Tem = ""
Next i
End Sub
Nhà họ nói em nó bị ngược Anh ạ. Em không biết đưa cái & "; " & vào trong VBA như thế nào. Anh giúp em vớiCode trước quá đẹp, sao lại bỏ
Mã:Sub Nghich_ty_2() Dim i As Long, Er As Long, Tem As String Er = Range("C" & Rows.Count).End(xlUp).Row For i = Er To 3 Step -1 If Tem = "" Then Tem = Range("F" & i).Value Else Tem = Range("F" & i).Value & "; " & Tem End If If Range("D" & i) = Empty Then Range("G" & i) = Tem: Tem = "" Next i End Sub
Ý nói kết quả bị ngược, còn code chạy ngược là quá ngon rồiNhà họ nói em nó bị ngược Anh ạ
Cái này chuẩn rồi chị ạ: em hỏi thêm tý nữa ạVậy bạn thử cái này xem
Mã:Sub Nghich_ty_thoi() Dim Dic As Object, Keys As String Dim sArr(), dArr(), I As Long Set Dic = CreateObject("Scripting.Dictionary") sArr = Range("D3", Range("F" & Rows.Count).End(3)).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For I = 1 To UBound(sArr, 1) If sArr(I, 1) = Empty Then Keys = "dong" & I If Not Dic.Exists(Keys) Then Dic.Add Keys, I dArr(I, 1) = sArr(I, 3) Else dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 3) End If Next I Range("H3").Resize(I - 1) = dArr Set Dic = Nothing End Sub
Sửa lại như vầyCái này chuẩn rồi chị ạ: em hỏi thêm tý nữa ạ
+ Muốn cho code chạy từ dòng thứ 10 trở đi làm như nào ạ
+ nếu muốn hiện lại hàm thì sửa chỗ nào nhỉ chị
Code chạy nhanh quá chóng hết cả mặt. Em cảm ơn nhiều à
Sub Nghich_ty_thoi()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), I As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range("D3", Range("F" & Rows.Count).End(3)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) = Empty Then Keys = "dong" & I
If Not Dic.Exists(Keys) Then
Dic.Add Keys, I
dArr(I, 1) = "=" & Range("F" & I + 2).Address
Else
dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & Range("J1") & Range("F" & I + 2).Address
End If
Next I
Range("H3").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Vâng được rồi chị ạ! em cảm ơn chị nhiều.. Chúc chị xjnh đẹp 1 ngày vui vẻ!Sửa lại như vầy
Vẫn phải mượn ô J1 nha bạnMã:Sub Nghich_ty_thoi() Dim Dic As Object, Keys As String Dim sArr(), dArr(), I As Long Set Dic = CreateObject("Scripting.Dictionary") sArr = Range("D3", Range("F" & Rows.Count).End(3)).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For I = 1 To UBound(sArr, 1) If sArr(I, 1) = Empty Then Keys = "dong" & I If Not Dic.Exists(Keys) Then Dic.Add Keys, I dArr(I, 1) = "=" & Range("F" & I + 2).Address Else dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & Range("J1") & Range("F" & I + 2).Address End If Next I Range("H3").Resize(I - 1) = dArr Set Dic = Nothing End Sub
Cuối cùng nó cũng chịu nghe lờiVâng được rồi chị ạ! em cảm ơn chị nhiều.. Chúc chị xjnh đẹp 1 ngày vui vẻ!
Sub Nghich_ty_thoi()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), I As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range("D10", Range("F" & Rows.Count).End(3)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) = Empty Then Keys = "dong" & I
If Not Dic.Exists(Keys) Then
Dic.Add Keys, I
dArr(I, 1) = Replace("=" & Range("F" & I + 9).Address, "$", "")
Else
dArr(Dic.Item(Keys), 1) = Replace(dArr(Dic.Item(Keys), 1) & " & ""; "" & " & Range("F" & I + 9).Address, "$", "")
End If
Next I
Range("H10").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Cái này mình nói vài lần... Cách nhớ là "gõ bồi".& "; " &
Em có vài cột phải lấy dữ liệu như này,Cuối cùng nó cũng chịu nghe lời
Mã:Sub Nghich_ty_thoi() Dim Dic As Object, Keys As String Dim sArr(), dArr(), I As Long Set Dic = CreateObject("Scripting.Dictionary") 'D3 là lây' du~ liêu tu` dòng 3 di xuông' sArr = Range("D3", Range("F" & Rows.Count).End(xlUp)).Value 'Côt D Diêu` kiên ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For I = 1 To UBound(sArr, 1) If sArr(I, 1) = Empty Then Keys = "dong" & I If Not Dic.Exists(Keys) Then Dic.Add Keys, I dArr(I, 1) = sArr(I, 3) Else dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 3) End If Next I 'BB3 là xuât' du~ liêu vào dòng 3 di xuông' Range("BB3").Resize(I - 1) = dArr 'Côt xuât' ra du liêu Set Dic = Nothing End Sub
Sub Nghich_ty_thoi()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), I As Long
Set Dic = CreateObject("Scripting.Dictionary")
'D3 là lây' du~ liêu tu` dòng 3 di xuông'
sArr = Range("D3", Range("F" & Rows.Count).End(xlUp)).Value 'Côt D Diêu` kiên
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) = Empty Then Keys = "dong" & I
If Not Dic.Exists(Keys) Then
Dic.Add Keys, I
dArr(I, 1) = sArr(I, 3)
Else
dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 3)
End If
Next I
'BB3 là xuât' du~ liêu vào dòng 3 di xuông'
Range("BB3").Resize(I - 1) = dArr 'Côt xuât' ra du liêu
Set Dic = Nothing
End Sub
Sub GopDuLieu_QTrinh()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), i As Long
Set Dic = CreateObject("Scripting.Dictionary")
'D3 là lây' du~ liêu tu` dòng 3 di xuông'
sArr = Range("D3", Range("AW" & Rows.Count).End(xlUp)).Value ' Diêu` kiên côt D & Vi trí Du Liêu côt AW
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For i = 1 To UBound(sArr, 1)
If sArr(i, 1) = Empty Then Keys = "dong" & i
If Not Dic.Exists(Keys) Then
Dic.Add Keys, i
dArr(i, 1) = sArr(i, 46) 'Côt thú 46 tính tu` côt D là côt dâu` tiên
Else
dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(i, 46) 'Côt thú 46 tính tu` côt D là côt dâu` tiên
End If
Next i
'BB3 là xuât' du~ liêu vào dòng 3 di xuông'
Range("BB3").Resize(i - 1) = dArr 'Côt xuât' ra du liêu
Set Dic = Nothing
End Sub
Bạn thử cái này xemEm tìm được cách lấy giữ liệu cột khác rồi!
Cho em hỏi thêm 1 xíu nữa:
+ Thêm 1 điều kiện nữa nếu tên trùng nhau nó sẽ bỏ qua và lấy các tên khác với điều kiện dữ liệu cột D như phần trên
1. VD như hình ảnh dưới dòng 28~30 Đắp đất 10, nên chỉ lấy Đắp đất 10; Đắp đất 13
View attachment 195258
Và nếu dòng đầu không có dữ liệu nó lại thừa dấu " ; "
View attachment 195268
Mã:Sub GopDuLieu_QTrinh() Dim Dic As Object, Keys As String Dim sArr(), dArr(), i As Long Set Dic = CreateObject("Scripting.Dictionary") 'D3 là lây' du~ liêu tu` dòng 3 di xuông' sArr = Range("D3", Range("AW" & Rows.Count).End(xlUp)).Value ' Diêu` kiên côt D & Vi trí Du Liêu côt AW ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For i = 1 To UBound(sArr, 1) If sArr(i, 1) = Empty Then Keys = "dong" & i If Not Dic.Exists(Keys) Then Dic.Add Keys, i dArr(i, 1) = sArr(i, 46) 'Côt thú 46 tính tu` côt D là côt dâu` tiên Else dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(i, 46) 'Côt thú 46 tính tu` côt D là côt dâu` tiên End If Next i 'BB3 là xuât' du~ liêu vào dòng 3 di xuông' Range("BB3").Resize(i - 1) = dArr 'Côt xuât' ra du liêu Set Dic = Nothing End Sub
Sub GopDuLieu_QTrinh()
Dim Dic As Object, Keys As String
Dim sArr(), dArr(), I As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range("D3", Range("AW" & Rows.Count).End(xlUp)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
If sArr(I, 1) = Empty Then Keys = "dong" & I
If Not Dic.Exists(Keys) Then
Dic.Add Keys, I
dArr(I, 1) = sArr(I, 46)
Else
If InStrRev(dArr(Dic.Item(Keys), 1), sArr(I, 46)) = 0 Then
If dArr(Dic.Item(Keys), 1) <> Empty Then
dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 46)
Else
dArr(Dic.Item(Keys), 1) = sArr(I, 46)
End If
End If
End If
Next I
Range("BB3").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Code chạy nuột! mãn nguyện quá.. em cảm ơn chị nhiều! chúc chị xjnh đẹp 1 ngày vui vẻBạn thử cái này xem
Mã:Sub GopDuLieu_QTrinh() Dim Dic As Object, Keys As String Dim sArr(), dArr(), I As Long Set Dic = CreateObject("Scripting.Dictionary") sArr = Range("D3", Range("AW" & Rows.Count).End(xlUp)).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 1) For I = 1 To UBound(sArr, 1) If sArr(I, 1) = Empty Then Keys = "dong" & I If Not Dic.Exists(Keys) Then Dic.Add Keys, I dArr(I, 1) = sArr(I, 46) Else If InStrRev(dArr(Dic.Item(Keys), 1), sArr(I, 46)) = 0 Then If dArr(Dic.Item(Keys), 1) <> Empty Then dArr(Dic.Item(Keys), 1) = dArr(Dic.Item(Keys), 1) & "; " & sArr(I, 46) Else dArr(Dic.Item(Keys), 1) = sArr(I, 46) End If End If End If Next I Range("BB3").Resize(I - 1) = dArr Set Dic = Nothing End Sub
Chị này vừa đẹp, lại vừa tốt bụng nhiệt tình giúp đỡ toàn việc hữu ích cho anh chị em khác lâu nay trên diễn đàn rồi!m
Code chạy nuột! mãn nguyện quá.. em cảm ơn chị nhiều! chúc chị xjnh đẹp 1 ngày vui vẻ