Hướng dẫn nhập thực đơn theo tên món có sẵn

Liên hệ QC

dhm.hungvuong

Thành viên mới
Tham gia
6/4/21
Bài viết
8
Được thích
8
Mình dùng Vlookup nhưng không đúng. Mong được sự giúp đỡ. Xin cảm ơn nhiều!
 

File đính kèm

  • Book1.xlsx
    10.2 KB · Đọc: 22
Lần chỉnh sửa cuối:
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.
Anh cho em số điện thoại để 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
 
Lần chỉnh sửa cuối:
Mình dùng Vlookup nhưng ko đúng. Mong được sự giúp đỡ. Xin cảm ơn nhiều!
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é.

@Nhattanktnn : bài này dùng công thức được hôn? hay phải dùng VBA? Anh thấy trên GPE mình hay có cái nhu cầu giống của thớt ghê luôn á.

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

Chờ tôi tra tiếp thêm "sđt" là gì đã rồi mới có thể trả lời.
"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 đỡ!
Em xin cảm ơn ạ!
Bài đã được tự động gộ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é.
Dạ em hiểu rồi!
 
Lần chỉnh sửa cuối:
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.
 
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.
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?
 

File đính kèm

  • Book2.xlsx
    9.6 KB · Đọc: 9

File đính kèm

  • Book2.xlsx
    10.6 KB · Đọc: 17
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!
Cá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ị.
Mình chưa biết sửa chỗ nào.
Bạn giúp mình với nhé!
Mình có đính kèm lại file.
Bài đã được tự động gộp:

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é!
Mình cố gắng thử cách này thử
 
Lần chỉnh sửa cuối:
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
 
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
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!
Bài đã được tự động gộp:

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
Bác cho hỏi là nhập code vào đâu vậy ạ?
 
Web KT
Back
Top Bottom