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
Công thức thì chưa biết.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
If .Column = 3 Then
If .Row > 2 Then
If .Count = 1 Then
Bạn thử nhập công thức vào ô C10: =Column()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 ạ?
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?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".
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
Vậy thì thua 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
Theo mình hiểu thì dòng lấy cột C,D là dòng này thì phảiem đã 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
là em không mò được nữa rồiMã: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
Muốn công thức thì tham khảo sau: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ó
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)),),"")
Xin lỗi anh Ba Tê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.
Bạn xem file.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!
Em góp công thức siêu dàiMuốn công thức thì tham khảo sau:
Enter, fill qua cột số lượng, rồi kéo xuống dưới.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)),),"")
Xem file kèm. hihi ^o^
=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,),"")),),"")
Thay Code cũ bằng cái này coi sao.gửi anh Ba Tê và 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 ạ!
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