Nhờ hướng dẫn tạo công thức nhập liệu

Liên hệ QC

chickenexcel

Thành viên hoạt động
Tham gia
24/8/12
Bài viết
152
Được thích
28
Giới tính
Nam
Em có file gồm 2 sheet Data và nhaplieu
Em muốn tại sheet nhaplieu, khi nhập tại cột tên thì sẽ lấy được những vật dụng tương ứng bên sheet data
Nhờ anh chị chỉ giúp!
Em cảm ơn!
 

File đính kèm

Em có file gồm 2 sheet Data và nhaplieu
Em muốn tại sheet nhaplieu, khi nhập tại cột tên thì sẽ lấy được những vật dụng tương ứng bên sheet data
Nhờ anh chị chỉ giúp!
Em cảm ơn!
Công thức thì chưa biết.
Dữ liệu trong sheet Data không để trống kiểu tự hiểu là "như trên" được.
Nếu bạn chịu dùng VBA thì xem file này
 

File đính kèm

Công thức thì chưa biết.
Dữ liệu trong sheet Data không để trống kiểu tự hiểu là "như trên" được.
Nếu bạn chịu dùng VBA thì xem file này

Cảm ơn anh Ba Tê rất nhiều!
Đúng là kết quả e mong muốn, mục đích em muốn dùng công thức vì công thức em còn mò mẫm gật gù được chút chứ xem code của anh em chỉ đoán mò, muốn sửa vào bảng gốc của mình cũng khó :p
Nếu được nhờ anh giải thích code cho em mở rộng tầm mắt với.
Em không thấy anh khai báo tên sheet nhaplieu và cột nhâp (C) nhưng tại sao chỉ đánh vào cột (C) sheet nhaplieu nó mới chạy?
Chỗ
Mã:
If .Column = 3 Then
    If .Row > 2 Then
        If .Count = 1 Then
nghĩa là gì?
Cảm ơn anh rất nhiều!
 
sau một hồi mày mò em cũng đã biết cách sửa lại 1 số đoạn code cho phù hợp, nhưng còn đoạn lấy cột (C) và (D) thì em không hiểu như nào? nhờ anh chỉ giúp với?nếu muốn lấy thêm cột (E) (F) nữa thì sửa thế nào ạ?
 
sau một hồi mày mò em cũng đã biết cách sửa lại 1 số đoạn code cho phù hợp, nhưng còn đoạn lấy cột (C) và (D) thì em không hiểu như nào? nhờ anh chỉ giúp với?nếu muốn lấy thêm cột (E) (F) nữa thì sửa thế nào ạ?
Bạn thử nhập công thức vào ô C10: =Column()
Ô C11: =Row()
Xem kết quả trong 2 ô đó rồi "ngâm kiếu" cái Column và Row trong VBA.
Tôi chỉ học "mò" VBA trên GPE, biểu giải thích thì hơi bị "đắm đuối".
 
Bạn thử nhập công thức vào ô C10: =Column()
Ô C11: =Row()
Xem kết quả trong 2 ô đó rồi "ngâm kiếu" cái Column và Row trong VBA.
Tôi chỉ học "mò" VBA trên GPE, biểu giải thích thì hơi bị "đắm đuối".
em đã thử rồi, 2 công thức đấy chỉ ra số dòng và cột tại vị trí đó, nhưng em không hiểu nó tương ướng với đoạn code nào của anh?
từ đoạn

Mã:
R = UBound(sArr)
            ReDim dArr(1 To R, 1 To 2)
            For I = 1 To R
                If UCase(sArr(I, 1)) = Tem Then
                    K = K + 1
                    dArr(K, 1) = sArr(I, 2)
                    dArr(K, 2) = sArr(I, 3)
                End If
            Next I
            If K Then
                .Offset(, 1).Resize(K, 2) = dArr
                .Offset(K, -2).Select
là em không mò được nữa rồi :(
 
em đã thử rồi, 2 công thức đấy chỉ ra số dòng và cột tại vị trí đó, nhưng em không hiểu nó tương ướng với đoạn code nào của anh?
từ đoạn
Vậy thì thua rồi.
Bạn nghiên cứu về VBA, Tôi thì chịu, không biết giải thích đâu.
Nếu cần thì bạn đưa file dữ liệu "giống thật" lên đây nhờ các bạn GPE hỗ trợ.
Hỏi 1 đàng, file thật một nẽo, áp dụng không được lại mất công.
 
em đã thử rồi, 2 công thức đấy chỉ ra số dòng và cột tại vị trí đó, nhưng em không hiểu nó tương ướng với đoạn code nào của anh?
từ đoạn

Mã:
R = UBound(sArr)
            ReDim dArr(1 To R, 1 To 2)
            For I = 1 To R
                If UCase(sArr(I, 1)) = Tem Then
                    K = K + 1
                    dArr(K, 1) = sArr(I, 2)
                    dArr(K, 2) = sArr(I, 3)
                End If
            Next I
            If K Then
                .Offset(, 1).Resize(K, 2) = dArr
                .Offset(K, -2).Select
là em không mò được nữa rồi :(
Theo mình hiểu thì dòng lấy cột C,D là dòng này thì phải
For I = 1 To R
If UCase(sArr(I, 1)) = Tem Then
K = K + 1
dArr(K, 1) = sArr(I, 2) 'Lay cot C ben Data
dArr(K, 2) = sArr(I, 3)'Lay cot D ben Data
End If
Muốn lấy thêm cột E F thì phải mở rộng thêm các mảng dArr, sArr và thêm dòng để lấy dữ liệu nữa
 
mục đích em muốn dùng công thức vì công thức em còn mò mẫm gật gù được chút chứ xem code của anh em chỉ đoán mò, muốn sửa vào bảng gốc của mình cũng khó :p
Muốn công thức thì tham khảo sau:
Mã:
D3=IFERROR(OFFSET(Data!C$2,AGGREGATE(15,6,ROW($1:$9)/(LOOKUP("zzz",$C$3:$C3)=LOOKUP(COUNTIFS(OFFSET(Data!$B$3,,,ROW($1:$9)),"<>"),Data!$A$3:$A$11,Data!$B$3:$B$11)),ROW(A1)),),"")
Enter, fill qua cột số lượng, rồi kéo xuống dưới.
Xem file kèm. hihi ^o^
 

File đính kèm

Bạn nghiên cứu về VBA, Tôi thì chịu, không biết giải thích đâu.
Nếu cần thì bạn đưa file dữ liệu "giống thật" lên đây nhờ các bạn GPE hỗ trợ.
Hỏi 1 đàng, file thật một nẽo, áp dụng không được lại mất công.
Xin lỗi anh Ba Tê
như nhiều thành viên khác gửi câu hỏi lên GPE, họ đều đưa 1 file dạng mẫu gần giống với file của họ để nhờ anh/chị giúp đỡ, vì gửi file gốc lên sẽ làm lộ thông tin của công ty, là 1 trong những điều cấm kỵ của hầu hết các công ty hiện tại, mặc dù những dữ liệu đó chẳng có ý nghĩa, lợi lộc gì với anh cả
Bản thân em cũng cố gắng mày mò đến mức tối đa, mục đích là để nâng cao kỹ năng Excel vốn như các nick name của mình, việc nhờ vả mọi người cũng là bất đắc dĩ do yêu cầu đã nằm ngoài khả năng của mình.Mặc dù công việc của em không liên quan nhiều đến máy tính nhưng em luôn muốn chuyển đổi những công việc của mình sang nó để giảm thiểu những sai sót trong công việc
Em muốn hiểu công thức của anh để hạn chế phải nhờ anh nhiều lần nữa
Vậy em gửi lại file có cấu trúc "gần giống" với file gốc, nhờ anh xem giúp (có thêm số cột)
Em cảm ơn!
 

File đính kèm

mình sửa code như thế này. Bạn xem thử đã được chưa?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Tem As String
With Target
If .Column = 3 Then
If .Row > 2 Then
If .Count = 1 Then
Tem = UCase(.Value)
sArr = Sheets("Data").Range("B3", Sheets("Data").Range("B3").End(xlDown)).Resize(, 9).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 8)
For I = 1 To R
If UCase(sArr(I, 1)) = Tem Then
K = K + 1
dArr(K, 1) = sArr(I, 2)
dArr(K, 2) = sArr(I, 3)
dArr(K, 3) = sArr(I, 4)
dArr(K, 4) = sArr(I, 5)
dArr(K, 5) = sArr(I, 6)
dArr(K, 6) = sArr(I, 7)
dArr(K, 7) = sArr(I, 8)
dArr(K, 8) = sArr(I, 9)
End If
Next I
If K Then
.Offset(, 1).Resize(K, 8) = dArr
.Offset(K,-2).Select
End If
End If
End If
End If
End With
End Sub
 
Lần chỉnh sửa cuối:
Tuyệt quá, cảm ơn anh Ba tê và thanh.bq lần nữa nhé!
Lúc đọc gợi ý của
thanh.bq cũng hý hoáy sửa chỗ dArr nhưng bị lỗi, hóa ra là còn phải thay 1 số thông số nữa!
Cảm ơn GPE!
 
gửi anh Ba Tê thanh.bq
File của anh bate và code của thanh.bq sửa chạy rất tốt, nhưng trong quá trình làm việc phát sinh thêm việc data có thiết lập 1 số công thức
Sau khi chạy code thì bảng nhập liệu chỉ cho ra dữ liệu dạng Value (không chứa công thức)
Vậy nhờ 2 bác chỉnh sửa code giúp làm sao lấy được giá trị bên cột data mà vẫn giữ nguyên công thức (như file đính kèm là cột I bôi vàng chứa công thức)
Cảm ơn rất nhiều ạ!
 

File đính kèm

Muốn công thức thì tham khảo sau:
Mã:
D3=IFERROR(OFFSET(Data!C$2,AGGREGATE(15,6,ROW($1:$9)/(LOOKUP("zzz",$C$3:$C3)=LOOKUP(COUNTIFS(OFFSET(Data!$B$3,,,ROW($1:$9)),"<>"),Data!$A$3:$A$11,Data!$B$3:$B$11)),ROW(A1)),),"")
Enter, fill qua cột số lượng, rồi kéo xuống dưới.
Xem file kèm. hihi ^o^
Em góp công thức siêu dài :D
PHP:
=IFERROR(OFFSET(Data!C$2,AGGREGATE(15,6,ROW(A$1:A$9)/(MATCH(LOOKUP("zzz",$C$3:$C3),Data!$B$3:$B$11,0)=AGGREGATE(15,6,ROW(A$1:A$9)/(Data!$B$3:$B$11<>""),COUNTIF(OFFSET(Data!$B$3,,,ROW(A$1:A$9)),"<>"))),1+COUNTIF(INDEX(INDEX($C$3:$C$29,IFERROR(MATCH(LOOKUP("zzz",$C$3:$C3),$C$3:$C$29,0),0)):$C3,),"")),),"")
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn cả nhà ạ!
Do đang nghỉ lễ nên e chưa test được, có j nhờ mọi người chỉ bảo thêm ạ
Thực sự rất muốn dùng công thức của Mộng thường và dazkangen, tuy nhiên trình độ giới hạn nên nhìn đã hoa mắt, cái hàm offset thì học hoài chẳng biết ứng dụng. Còn "zzz“ trong hàm lookup có ý nghĩa như nào?... Hix
Cảm ơn và chúc cả nhà nghỉ lễ vui vẻ!
 
gửi anh Ba Tê thanh.bq
File của anh bate và code của thanh.bq sửa chạy rất tốt, nhưng trong quá trình làm việc phát sinh thêm việc data có thiết lập 1 số công thức
Sau khi chạy code thì bảng nhập liệu chỉ cho ra dữ liệu dạng Value (không chứa công thức)
Vậy nhờ 2 bác chỉnh sửa code giúp làm sao lấy được giá trị bên cột data mà vẫn giữ nguyên công thức (như file đính kèm là cột I bôi vàng chứa công thức)
Cảm ơn rất nhiều ạ!
Thay Code cũ bằng cái này coi sao.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Tem As String
With Target
    If .Column = 3 Then
        If .Row > 2 Then
            If .Count = 1 Then
                Tem = UCase(.Value)
                sArr = Sheets("Data").Range("B3", Sheets("Data").Range("B3").End(xlDown)).Resize(, 9).FormulaR1C1
                R = UBound(sArr)
                ReDim dArr(1 To R, 1 To 8)
                For I = 1 To R
                    If UCase(sArr(I, 1)) = Tem Then
                        K = K + 1
                        For J = 1 To 8
                            dArr(K, J) = sArr(I, J + 1)
                        Next J
                    End If
                Next I
                If K Then .Offset(, 1).Resize(K, 8) = dArr
            End If
        End If
    End If
End With
End Sub
 
Rất tuyệt ạ!
code của thanh.bq đáp ứng được công việc hiện tại do copy được cột có công thức (cột I), còn của bác Ba Tê lại copy được toàn bộ công thức, cả những cột khác, thích hợp để phòng ngừa phát sinh công việc sau này
Một lần nữa cảm ơn cả nhà ạ!
 
Web KT

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

Back
Top Bottom