Nhờ anh chị giúp đỡ code lấy giữ liệu từ 1 cột phụ (1 người xem)

  • Thread starter Thread starter vova2209
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

vova2209

Thành viên tích cực
Tham gia
5/4/17
Bài viết
835
Được thích
112
Giới tính
Nam
Nghề nghiệp
Đường bộ
Untitled.png
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..
 

File đính kèm

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..
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
 

File đính kèm

Upvote 0
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
Cả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é
 
Upvote 0
Cả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é
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
 
Upvote 0
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
Code trước quá đẹp, sao lại bỏ :p
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
 
Upvote 0
Code trước quá đẹp, sao lại bỏ :p
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
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ới
 
Upvote 0
Tiếng Việt, "Nghich" nghĩa là gì? Bị ngược là phải lý rồi.

Private Function NghichLai(byVal s as string, byVal delim as string) as string
' đảo ngược các chuỗi con trong một chuỗi
Dim s2 as variant, stmp as string, i1 as integer, i2 as integer
s2 = Split(s, delim)
i1 = lbound(s2)
i2 = ubound(s2)
if i1 = i2 Then ' chỉ có 1 chuỗi con
NghichLai = s
Else ' nhiều chuõi con
Do While i2 > i1
stmp = s2(i1)
s2(i1) = s2(i2)
s2(i2) = stmp
i1 = i1 + 1
i2 = i2 - 1
Loop
NghichLai = Join(s2, delim)
End If
End Function

...
If Range("D" & i) = Empty Then
Range("G" & i) = NghichLai(Tem, ";")
Tem = ""
End If
...

Nếu muốn nghịch nữa thì như vầy:
Range("G" & i) = NghichLai(NghichLai(Tem, ";"), ";")
 
Lần chỉnh sửa cuối:
Upvote 0
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
Cá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ị
+ Chị Hướng dẫn ghi chú code cho em hiểu với
Mảng array chạy nhanh hơn vòng for nhiều nhỉ chị. Code chạy nhanh quá chóng hết cả mặt. Em cảm ơn nhiều à
 
Lần chỉnh sửa cuối:
Upvote 0
Cá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 à
Sửa lại như vầy
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) = "=" & 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ẫn phải mượn ô J1 nha bạn
 
Upvote 0
Sửa lại như vầy
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) = "=" & 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ẫn phải mượn ô J1 nha bạn
Vâng được rồi chị ạ! em cảm ơn chị nhiều.. Chúc chị xjnh đẹp 1 ngày vui vẻ!
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng được rồi chị ạ! em cảm ơn chị nhiều.. Chúc chị xjnh đẹp 1 ngày vui vẻ!
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")
    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
 
Upvote 0
Upvote 0
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
Em có vài cột phải lấy dữ liệu như này,
Sài code này đi ạ. Thay đổi cột lấy dữ liệu đoạn code nào chị nhỉ. em mò ko ra
 
Upvote 0
Chị ơi! Thay đổi cột dữ liệu là sửa code nào chỉ nhỉ
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
 
Upvote 0
Em 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

Untitled.png

Và nếu dòng đầu không có dữ liệu nó lại thừa dấu " ; "

Untitled.png
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
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em 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
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
 
Upvote 0
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ẻ
 
Upvote 0
m
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
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ẻ
 
Upvote 0
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ẻ
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!
Giờ bạn mới biết cũng không có gì là lạ!
hihi ^o^
/-*+//-*+//-*+/
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom