dhm.hungvuong
Thành viên mới
- Tham gia
- 6/4/21
- Bài viết
- 8
- Được thích
- 8
Anh cho em số điện thoại để em hỏi trực tiếp được ko?VLookup thì tôi rất hiểu. Nhưng "ko" là gì thì còn bí.
Chịu khó đợi tôi đi tra từ điển xong, hoặc có bạn nào hiểu sẽ giúp.
Bạn ko nên viết tắt bạn nhé ! Bạn chờ xem mọi người vào tư vấn giải pháp cho bạn nhé.Mình dùng Vlookup nhưng ko đúng. Mong được sự giúp đỡ. Xin cảm ơn nhiều!
Anh cho em sdt để em hỏi trực tiếp được ko?
Ý mình là làm cách nào để khi nhập tên món thì sẽ xổ ra menu nguyên liệu, theo bảng có sẵn
"sdt" chứ không phải "sđt" nha bác. Bác tra cẩn thận, không sẽ bị nhầm.Chờ tôi tra tiếp thêm "sđt" là gì đã rồi mới có thể trả lời.
Mình xin lỗi vì không nắm rõ qui định không được viết tắt những từ như vậy. Mình đã sửa lại bài đăng, mong anh giúp đỡ!Chờ tôi tra tiếp thêm "sđt" là gì đã rồi mới có thể trả lời.
Dạ em hiểu rồi!Bạn ko nên viết tắt bạn nhé ! Bạn chờ xem mọi người vào tư vấn giải pháp cho bạn nhé.
Làm cái này dễ như trở bàn tay, nhưng phải sửa cấu trúc Sheet1Mình dùng Vlookup nhưng không đúng. Mong được sự giúp đỡ. Xin cảm ơn nhiều!
Dạ vấn đề của em là số lượng nguyên liệu mỗi món là khác nhau. Hoặc có cách nào xổ danh sách nguyên liệu theo món như trong file này được không anh?Bảng tính của bạn không chuẩn cho nên rất khó dùng các loại hàm tra như VLookup.
Không chuẩn:
Cột A và B chứa dữ liệu "hiểu ngầm" là xổ xuống cho cả nhóm.
Excel khong tự "hiểu" những gì bạn muốn "hiểu ngầm".
Hàm chuẩn hoá lại các cột này rất phức tạp. Nếu bạn không chỉnh lại bảng được thì nên dùng hàm VBA.
Cảm ơn bạn nhiều!Bạn nên thêm cột phụ để hiện tên món ăn đầy đủ chứ không nên Merge trong bảng tính làm phức tạp vấn đề. Thử thế này xem
View attachment 256683
Cảm ơn bạn nhiều nhé!Bạn nên thêm cột phụ để hiện tên món ăn đầy đủ chứ không nên Merge trong bảng tính làm phức tạp vấn đề. Thử thế này xem
View attachment 256683
Tích vào công thức xem vùng dữ liệu nếu thiếu thì sửa thêm vàoCách này cũng có thể được, nhưng nếu làm thêm nhiều món nữa phía dưới thì lại không hiển thị
Sub XLCautrucDom()
Const DAUVAO = "B5"
Const DAURA = "H3"
Dim rg As Range
Dim rgDV As Range, daDV, dvMax As Long ' range de lookup, va mang du lieu de trich ra
Dim daDR, drRow() As Long, drMax As Long ' ben mang du lieu ket qua
Dim idx, gItem As Long
'
Set rg = Range(DAURA)
daDR = rg.Resize(1, rg.CurrentRegion.Columns.Count).Value ' xac dinh cac nhom gia tri dau ra
'
Set rg = Range(DAUVAO)
Set rg = rg.Resize(rg.Offset(0, 1).CurrentRegion.Rows.Count, 2)
daDV = rg.Value ' nap gia tri dau vao len mang
Set rgDV = rg.Resize(, 1)
'
dvMax = UBound(daDV)
daDR = Range(DAURA).Resize(dvMax, UBound(daDR, 2)).Value ' dinh dang mang dau ra
ReDim drRow(1 To dvMax) ' so dong trong moi cot cua mang dau ra
drMax = 0
For gItem = 1 To UBound(daDR, 2)
idx = Application.Match(daDR(1, gItem), rgDV, 0) ' do cac mon trong mang dau vao
If IsError(idx) Then
drRow(gItem) = drRow(gItem) + 1
daDR(drRow(gItem), gItem) = "khong thay"
Else
For idx = idx To dvMax ' tu mon chinh, do cac dong ke tiep
If daDV(idx, 1) <> "" Then
If daDV(idx, 1) <> daDR(1, gItem) Then Exit For
End If
drRow(gItem) = drRow(gItem) + 1
daDR(drRow(gItem), gItem) = daDV(idx, 2)
Next idx
If drMax < drRow(gItem) Then drMax = drRow(gItem)
End If
Next gItem
Range(DAURA).Offset(1).Resize(drMax, UBound(daDR, 2)) = daDR
End Sub
Cảm ơn các bác đã giúp đỡ nên giờ em đã hoàn thành được rồi. Xin chân thành cảm ơn!Tích vào công thức xem vùng dữ liệu nếu thiếu thì sửa thêm vào
Bác cho hỏi là nhập code vào đâu vậy ạ?Ngồi buồn gõ code chơi. Lưu ý là dữ liệu có merged cells cho nên code sẽ không bao giờ an toàn. Mõi lần thya đổi dữ liệu thì phải xét kết quả cho kỹ.
Mã:Sub XLCautrucDom() Const DAUVAO = "B5" Const DAURA = "H3" Dim rg As Range Dim rgDV As Range, daDV, dvMax As Long ' range de lookup, va mang du lieu de trich ra Dim daDR, drRow() As Long, drMax As Long ' ben mang du lieu ket qua Dim idx, gItem As Long ' Set rg = Range(DAURA) daDR = rg.Resize(1, rg.CurrentRegion.Columns.Count).Value ' xac dinh cac nhom gia tri dau ra ' Set rg = Range(DAUVAO) Set rg = rg.Resize(rg.Offset(0, 1).CurrentRegion.Rows.Count, 2) daDV = rg.Value ' nap gia tri dau vao len mang Set rgDV = rg.Resize(, 1) ' dvMax = UBound(daDV) daDR = Range(DAURA).Resize(dvMax, UBound(daDR, 2)).Value ' dinh dang mang dau ra ReDim drRow(1 To dvMax) ' so dong trong moi cot cua mang dau ra drMax = 0 For gItem = 1 To UBound(daDR, 2) idx = Application.Match(daDR(1, gItem), rgDV, 0) ' do cac mon trong mang dau vao If IsError(idx) Then drRow(gItem) = drRow(gItem) + 1 daDR(drRow(gItem), gItem) = "khong thay" Else For idx = idx To dvMax ' tu mon chinh, do cac dong ke tiep If daDV(idx, 1) <> "" Then If daDV(idx, 1) <> daDR(1, gItem) Then Exit For End If drRow(gItem) = drRow(gItem) + 1 daDR(drRow(gItem), gItem) = daDV(idx, 2) Next idx If drMax < drRow(gItem) Then drMax = drRow(gItem) End If Next gItem Range(DAURA).Offset(1).Resize(drMax, UBound(daDR, 2)) = daDR End Sub
Đợi 2 tuần nữa sẽ trả lời. Hiện giờ mắc đi gõ code mấy chỗ khác....
Bác cho hỏi là nhập code vào đâu vậy ạ?
Bạn xem đúng ý của bạn chưa.Mình dùng Vlookup nhưng không đúng. Mong được sự giúp đỡ. Xin cảm ơn nhiều!
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2