Quét dữ liệu và điền giá trị vào bảng theo điều kiện (4 người xem)

Liên hệ QC

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

wanbitan

Thành viên chính thức
Tham gia
9/2/15
Bài viết
63
Được thích
16
Chào mọi người,

Mình có thắc mắc như file đính kèm. Đã mô tả rõ chi tiết.

Xin các cao nhân giúp mình với ạ.

Mình xin cảm ơn trước!
 

File đính kèm

Chào mọi người,

Mình có thắc mắc như file đính kèm. Đã mô tả rõ chi tiết.

Xin các cao nhân giúp mình với ạ.

Mình xin cảm ơn trước!
Ô B25976 bạn gõ số 1 vào, sau đó nhập công thức mảng này ở D7:
Mã:
D7=IF(SUM(B7:B8)=2,B7,1/SUM(OFFSET(C8,-MATCH(1,N(OFFSET(B8,-ROW($1:$100),)),),):OFFSET(C7,MATCH(1,B8:$B$25976,)-1,)))
Yêu cầu bấm CTrl+Shift+Enter rồi copy xuống!!!
p/s: chỗ ROW($1:$100) tôi đang cho dữ liệu bạn nhiều nhất có 100 ô rông liên tiếp nếu nhiều hơn bạn có thể sửa thành: ROW($1:$1000) hay ROW($1:$10000) hoặc ROW(INDIRECT("1:"&ROWS($B$7:B7))), càng nhiều thì công thức càng nặng.
 
Em thấy dữ lieu đến 25972 dòng nên em góp vui 1 tẹo
Mã:
Sub Ketquamongdoi()
    Dim sArr, dArr, tArr, I As Long
    Dim Dic As Object, N As Long, Irow As String, Kq As Double
sArr = Range("B7", Range("B65535").End(xlUp)).Value
ReDim tArr(1 To UBound(sArr), 1 To 2)
Set Dic = CreateObject("Scripting.Dictionary")
For I = 1 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty Then
        Irow = I: N = sArr(I, 1)
    End If
    If Not Dic.Exists(Irow) Then
        Dic.Add Irow, I
        tArr(I, 1) = N: tArr(I, 2) = 1
    Else
        tArr(Dic.Item(Irow), 2) = tArr(Dic.Item(Irow), 2) + 1
    End If
Next I
ReDim dArr(1 To UBound(tArr), 1 To 1)
For I = 1 To UBound(tArr, 1)
    If tArr(I, 2) <> Empty Then Kq = tArr(I, 1) / tArr(I, 2)
    dArr(I, 1) = Kq
Next I
Range("E7").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Ô B25976 bạn gõ số 1 vào, sau đó nhập công thức mảng này ở D7:
Mã:
D7=IF(SUM(B7:B8)=2,B7,1/SUM(OFFSET(C8,-MATCH(1,N(OFFSET(B8,-ROW($1:$100),)),),):OFFSET(C7,MATCH(1,B8:$B$25976,)-1,)))
Yêu cầu bấm CTrl+Shift+Enter rồi copy xuống!!!
p/s: chỗ ROW($1:$100) tôi đang cho dữ liệu bạn nhiều nhất có 100 ô rông liên tiếp nếu nhiều hơn bạn có thể sửa thành: ROW($1:$1000) hay ROW($1:$10000) hoặc ROW(INDIRECT("1:"&ROWS($B$7:B7))), càng nhiều thì công thức càng nặng.

Mình làm được rồi. Cảm ơn bác ạ.
 
Em thấy dữ lieu đến 25972 dòng nên em góp vui 1 tẹo
Mã:
Sub Ketquamongdoi()
    Dim sArr, dArr, tArr, I As Long
    Dim Dic As Object, N As Long, Irow As String, Kq As Double
sArr = Range("B7", Range("B65535").End(xlUp)).Value
ReDim tArr(1 To UBound(sArr), 1 To 2)
Set Dic = CreateObject("Scripting.Dictionary")
For I = 1 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty Then
        Irow = I: N = sArr(I, 1)
    End If
    If Not Dic.Exists(Irow) Then
        Dic.Add Irow, I
        tArr(I, 1) = N: tArr(I, 2) = 1
    Else
        tArr(Dic.Item(Irow), 2) = tArr(Dic.Item(Irow), 2) + 1
    End If
Next I
ReDim dArr(1 To UBound(tArr), 1 To 1)
For I = 1 To UBound(tArr, 1)
    If tArr(I, 2) <> Empty Then Kq = tArr(I, 1) / tArr(I, 2)
    dArr(I, 1) = Kq
Next I
Range("E7").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Macro hay quá. Cảm ơn bạn!
 
Em thấy dữ lieu đến 25972 dòng nên em góp vui 1 tẹo
Mã:
Sub Ketquamongdoi()
    Dim sArr, dArr, tArr, I As Long
    Dim Dic As Object, N As Long, Irow As String, Kq As Double
............................
Range("E7").Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Góp thêm một Sub, không "chơi" Dic.
Thấy "chủ nhơn" chỉ nhờ "cao nhân" giúp nên bỏ qua, nhưng "chưa đủ liều để ngủ" lại gặp Dic mừng quá ... bỏ Dic luôn!

Xin các cao nhân giúp mình với ạ.
(Xin lỗi vì không phải cao nhân cũng "xía" vào.)
PHP:
Sub GPE()
Dim sArr(), I As Long, J As Long, K As Long, R As Long
sArr = Range("B7", Range("C7").End(xlDown)).Value2
R = UBound(sArr)
For I = 1 To R - 1
    If sArr(I + 1, 1) = "" Then
        For J = I + 1 To R
            If sArr(J, 1) = "" Then
                K = K + 1
            Else
                Exit For
            End If
        Next J
        For J = I To I + K
            sArr(J, 1) = 1 / (K + 1)
        Next J
        K = 0
    End If
Next I
Range("D7").Resize(R) = sArr
End Sub
 
Lần chỉnh sửa cuối:
Cột B và C bạn có toàn số 1 nhưng tôi đoán là cột C sẽ có các số khác nhau. Còn cột B tôi đoán là bạn có toàn số 1. Vì ngược lại thì bạn sẽ không viết
Mình làm được rồi. Cảm ơn bác ạ.
Bởi nếu thay vd. thành B7 = 2 thì kết quả không đúng.

Bạn nên luôn mô tả dữ liệu.

Nếu cột B toàn 1 và trống thì quá đơn giản.
Công thức cho D7
Mã:
=IF(B7="",D6,1/SUM(OFFSET(C7,,,MATCH(1,OFFSET(B8,,,100),0))))

Yêu cầu:
0. Tại B25976 bạn gõ số 1
1. Công thức bình thường
2. Giả thiết là mỗi đoạn có nhiều nhất là 100 ô. Nếu cần thì sửa lại.
------------
Nếu bạn thấy B25976 = 1 ngứa mắt thì thôi không nhập 1 vào B25976 nữa. Lúc đó công thức là
Mã:
=IF(B7="",D6,1/SUM(OFFSET(C7,,,IFERROR(MATCH(1,OFFSET(B8,,,100),0),100))))
 
Cảm ơn mọi người đã nhiệt tình chỉ giáo.

Mình có thêm thắc mắc như file đính kèm. Mong mọi người chỉ giáo thêm!
 

File đính kèm

Cảm ơn mọi người đã nhiệt tình chỉ giáo.

Mình có thêm thắc mắc như file đính kèm. Mong mọi người chỉ giáo thêm!
Bạn sửa CT lại như vầy:
Mã:
E7=IF(SUM(B7:B8)=2,B7,D7/SUM(OFFSET(D8,-MATCH(1,N(OFFSET(B8,-ROW($1:$100),)),),):OFFSET(D7,MATCH(1,B8:$B$25976,)-1,)))
Yêu cầu bấm CTrl+Shift+Enter rồi copy xuống!!!
p/s: chỗ ROW($1:$100) tôi đang cho dữ liệu bạn nhiều nhất có 100 ô rông liên tiếp nếu nhiều hơn bạn có thể sửa thành: ROW($1:$1000) hay ROW($1:$10000) hoặc ROW(INDIRECT("1:"&ROWS($B$7:B7))), càng nhiều thì công thức càng nặng.
 
Bạn sửa CT lại như vầy:
Mã:
E7=IF(SUM(B7:B8)=2,B7,D7/SUM(OFFSET(D8,-MATCH(1,N(OFFSET(B8,-ROW($1:$100),)),),):OFFSET(D7,MATCH(1,B8:$B$25976,)-1,)))
Yêu cầu bấm CTrl+Shift+Enter rồi copy xuống!!!
p/s: chỗ ROW($1:$100) tôi đang cho dữ liệu bạn nhiều nhất có 100 ô rông liên tiếp nếu nhiều hơn bạn có thể sửa thành: ROW($1:$1000) hay ROW($1:$10000) hoặc ROW(INDIRECT("1:"&ROWS($B$7:B7))), càng nhiều thì công thức càng nặng.
Cho mình hỏi B25976 có cần điền số 1 không ạ?
 
Web KT

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

Back
Top Bottom