Tạo cell dropdown data validation có điều kiện

Liên hệ QC

kobebryant

Thành viên thường trực
Tham gia
7/8/09
Bài viết
248
Được thích
28
Mình có 1 list danh sách Tên khách hàng và muốn tạo drop list có điều kiện là chỉ tạo ra list những khách hàng có đặc điểm ký hiệu là KM
Mình chân thành cám ơn
 

File đính kèm

  • TaoList DataValidation.xlsx
    9.8 KB · Đọc: 195
Mình có 1 list danh sách Tên khách hàng và muốn tạo drop list có điều kiện là chỉ tạo ra list những khách hàng có đặc điểm ký hiệu là KM
Mình chân thành cám ơn

Ẹc ẹc, ngày nghỉ lễ nên ít có người hướng dẫn cho bạn. Vì chưa thấy ai hướng dẫn nên mình làm cho bạn 1 công thức tổng quát cho yêu cầu của bạn luôn.

Có nghĩa là, thay vì chỉ chọn đặc điểm là KM, tôi làm thêm 1 cái list nữa để ghi đặc điểm, nếu chọn đặc điểm nào thì cái list tên khách hàng sẽ được hiện ra tương ứng với đặc điểm đó.

Tôi làm 2 name động như sau:

1) DacDiem
PHP:
=OFFSET(Sheet1!$K$2,0,0,COUNTA(Sheet1!$K:$K)-1)
2) KhachHang
PHP:
=OFFSET(Sheet1!$B$2,MATCH(Sheet1!$C$13,OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1),0)-1,0,COUNTIF(Sheet1!$A:$A,Sheet1!$C$13))

Nếu có thay đổi bảng, thay đổi dữ liệu thì bạn thay đổi theo công thức nhé!

================================================================

LƯU Ý:

ĐỂ CÁI LIST NÓ ĐÚNG THÌ CỘT ĐẶC ĐIỂM (TRONG BẢNG A1:G9) PHẢI ĐƯỢC SORT THEO THỨ TỰ.
 

File đính kèm

  • DataValidation.xlsx
    9.6 KB · Đọc: 323
Lần chỉnh sửa cuối:
Ẹc ẹc, ngày nghỉ lễ nên ít có người hướng dẫn cho bạn. Vì chưa thấy ai hướng dẫn nên mình làm cho bạn 1 công thức tổng quát cho yêu cầu của bạn luôn.

Có nghĩa là, thay vì chỉ chọn đặc điểm là KM, tôi làm thêm 1 cái list nữa để ghi đặc điểm, nếu chọn đặc điểm nào thì cái list tên khách hàng sẽ được hiện ra tương ứng với đặc điểm đó.

Tôi làm 2 name động như sau:

1) DacDiem
PHP:
=OFFSET(Sheet1!$K$2,0,0,COUNTA(Sheet1!$K:$K)-1)
2) KhachHang
PHP:
=OFFSET(Sheet1!$B$2,MATCH(Sheet1!$C$13,OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1),0)-1,0,COUNTIF(Sheet1!$A:$A,Sheet1!$C$13))

Nếu có thay đổi bảng, thay đổi dữ liệu thì bạn thay đổi theo công thức nhé!

================================================================

LƯU Ý:

ĐỂ CÁI LIST NÓ ĐÚNG THÌ CỘT ĐẶC ĐIỂM (TRONG BẢNG A1:G9) PHẢI ĐƯỢC SORT THEO THỨ TỰ.

Kết quả của anh lòi ra một chú "Lâm chí 4" không có mã KM anh ơi
 
Kết quả của anh lòi ra một chú "Lâm chí 4" không có mã KM anh ơi

Hình như bạn chưa đọc dòng này chăng?

ĐỂ CÁI LIST NÓ ĐÚNG THÌ CỘT ĐẶC ĐIỂM (TRONG BẢNG A1:G9) PHẢI ĐƯỢC SORT THEO THỨ TỰ.

Nếu sắp xếp lại mà không đúng thì sửa tiếp. Vấn đề này chưa thấy ai chưa sắp xếp dữ liệu mà lại đúng hoàn toàn, ngoại trừ dùng code.
 

File đính kèm

  • Copy of TaoList DataValidation.xlsx
    11.1 KB · Đọc: 262
cám ơn 2 cao thủ đàm đạo, tiểu đệ chân thành cám ơn
 
bác Hoàng Trọng Nghĩa thì code đơn giản hơn nhưng phải sort cái source lại.
Còn code của bác nick rất ác "nhapmon" thì em đọc xong thổ huyết luôn nhưng kết quả ra hơn trông đợi
Bác chơi hàm mảng em tìm hoài mới biết cách gõ ra @@
Thanks các bác nhé :D
 
Lần chỉnh sửa cuối:
bác nhapmon cho mình hỏi là khi mình ráp công thức vào file chuẩn của mình vị trí cell thay đổi, mình dựa theo công thức của bác và chỉnh lại cell, cố định cột dòng đầy đủ nhưng no ko ra kết quả gì hết. Mình cũng ctrl shift enter rồi nên công thức phức tạp mình ko nói làm gì mà ko hiểu sao thay đổi vị trí cell tương ứng nó ko ra
Mình up lại cái file bạn đã làm nhưng đa ta nằm ở vị trí giống với file của mình luôn cho chắc
Cám ơn bác
 

File đính kèm

  • TaoList DataValidation da OK-sua lai cot dong.xlsx
    11.1 KB · Đọc: 58
bác nhapmon cho mình hỏi là khi mình ráp công thức vào file chuẩn của mình vị trí cell thay đổi, mình dựa theo công thức của bác và chỉnh lại cell, cố định cột dòng đầy đủ nhưng no ko ra kết quả gì hết. Mình cũng ctrl shift enter rồi nên công thức phức tạp mình ko nói làm gì mà ko hiểu sao thay đổi vị trí cell tương ứng nó ko ra
Mình up lại cái file bạn đã làm nhưng đa ta nằm ở vị trí giống với file của mình luôn cho chắc
Cám ơn bác

rồi đã làm lại và giải thích trong file.
p/s: bạn tìm hiểu công thức mảng vậy là nhanh đó, hồi tui mới vào diễn đàn thấy người ta giải công thức mảng cứ tưởng người ta gõ hai dấu {} vào không à...hì....hì....
 

File đính kèm

  • Copy of TaoList DataValidation da OK-sua lai cot dong.xlsx
    12.1 KB · Đọc: 168
Lần chỉnh sửa cuối:
rồi đã làm lại và giải thích trong file.
p/s: bạn tìm hiểu công thức mảng vậy là nhanh đó, hồi tui mới vào diễn đàn thấy người ta giải công thức mảng cứ tưởng người ta gõ hai dấu {} vào không à...hì....hì....
Lúc đầu cũng loay hoay toát mồ hôi cái công thức mảng vì vào xem công thức xong hên là nhấn enter thấy nó nhảy kết quả ban đầu mà lại mất cái dấu {} rồi nghĩ mình có sửa công thức đâu chỉ xem thôi mà, thế là tìm trong diễn đàn mới biết chứ ko đâu biết đâu :))
Mà thấy bạn viết hàm tá lả vậy chắc dân chuyên nghiệp rồi, thích bạn viết hàm lồng vào nhau cả đống giỏi thật
 
Lần chỉnh sửa cuối:
Chào các thầy,
Em đang làm một cái tương tự như ở đề tài này tức là tạo Tạo cell dropdown data validation có điều kiện nhưng dùng VBA. Em làm cũng lâu lắm rùi, nhưng suy nghĩ mãi chưa ra được.
Vậy mong các thầy có thể giúp Em code cho vấn đề này.
Chân thành cám ơn nhiều.
P/S: Mong các Mod nếu đã có 1 đề tài nào tương tự như thế này vui lòng cho mình địa chỉ. vì mình đã tìm nhiều nhưng chưa thấy. Cám ơn nhiều
 

File đính kèm

  • dropdown bang VBA.xlsx
    10 KB · Đọc: 33
Lần chỉnh sửa cuối:
Chào các thầy,
Em đang làm một cái tương tự như ở đề tài này tức là tạo Tạo cell dropdown data validation có điều kiện nhưng dùng VBA. Em làm cũng lâu lắm rùi, nhưng suy nghĩ mãi chưa ra được.
Vậy mong các thầy có thể giúp Em code cho vấn đề này.
Chân thành cám ơn nhiều.
P/S: Mong các Mod nếu đã có 1 đề tài nào tương tự như thế này vui lòng cho mình địa chỉ. vì mình đã tìm nhiều nhưng chưa thấy. Cám ơn nhiều

Xin chào GPE,

Mình tạo ra vấn đề này cũng lâu lắm rùi, nhưng chưa có bạn nào trả lời...
Nhân tiện mình đã làm được nên mình muốn đưa kết quả lên lại đây để cùng nhau tham khảo và có thể có ý kiến nào hay hơn để để quyết vấn đề này hay không. Trong này mình có dung code UniqueList cua Thầy ndu96081631

Mong các bạn xem qua và cho ý kiến.
 

File đính kèm

  • dropdown bang VBA ans.xlsm
    23.7 KB · Đọc: 60
Xin chào GPE,

Mình tạo ra vấn đề này cũng lâu lắm rùi, nhưng chưa có bạn nào trả lời...
Nhân tiện mình đã làm được nên mình muốn đưa kết quả lên lại đây để cùng nhau tham khảo và có thể có ý kiến nào hay hơn để để quyết vấn đề này hay không. Trong này mình có dung code UniqueList cua Thầy ndu96081631

Mong các bạn xem qua và cho ý kiến.
Nếu tôi làm bài này thì sẽ làm hơi khác 1 chút:
1> Code trong Module:
Mã:
Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String
  Dim aTmpCrit, aTmpDes, tmp1, tmp2, arr(), dic As Object
  Dim bComp As Boolean, Chk As Boolean
  Dim i As Long, j As Long, k As Long, dTmpVal As Double
  Set dic = CreateObject("Scripting.Dictionary")
  If IsMissing(TargetArray) Then TargetArray = CriteriaArray
  aTmpCrit = ConvertTo1DArray(CriteriaArray)
  aTmpDes = ConvertTo1DArray(TargetArray)
  If (Not IsArray(aTmpCrit)) Or (Not IsArray(aTmpDes)) Then Exit Function
  On Error Resume Next
  bComp = (InStr("<>=", Left(Criteria, 1)) > 0)
  For i = LBound(aTmpDes) To UBound(aTmpDes)
    tmp1 = aTmpCrit(i): tmp2 = aTmpDes(i)
    If bComp And Len(Criteria) Then
      dTmpVal = CDbl(aTmpCrit(i))
      If Evaluate(dTmpVal & Criteria) Then dic.Add tmp2, ""
    Else
      If (Left(Criteria, 1) = "!") Then
        If Not (UCase(tmp1) Like UCase(Mid(Criteria, 2, Len(Criteria)))) Then dic.Add tmp2, ""
      Else
        If (UCase(tmp1) Like UCase(Criteria)) Then dic.Add tmp2, ""
      End If
    End If
  Next
  If dic.Count Then
    arr = dic.Keys
    JoinIf = Join(arr, Delimiter)
  End If
End Function
Private Function ConvertTo1DArray(ByVal SourceArray)
  Dim aTmp, Item, arr()
  Dim n As Long
  On Error Resume Next
  aTmp = SourceArray
  If Not IsArray(aTmp) Then aTmp = Array(aTmp)
  For Each Item In aTmp
    n = n + 1
    ReDim Preserve arr(1 To n)
    arr(n) = Item
  Next
  ConvertTo1DArray = arr
End Function
2> Áp dụng cho sự kiện Change và SelectionChange
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  If Target.Address = "$F$3" Then
    sValidation = JoinIf(",", Range("A2:A100"), Target.Value, Range("B2:B100"))
    With Range("H3").Validation
      .Delete
      .Add 3, , , sValidation
    End With
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  With Target
    If .Address = "$F$3" Then
      sValidation = JoinIf(",", Range("A2:A100"), "*")
      .Validation.Delete
      .Validation.Add 3, , , sValidation
    End If
  End With
End Sub
Code ở Module tuy dài nhưng ta cũng chẳng cần quan tâm, chỉ cần biết áp dụng là được (phần áp dụng sẽ rất ngắn gọn)
Hàm JoinIf dùng để nối chuổi duy nhất theo điều kiện (giống SUMIF, có thể dùng ký tự đại diện như *, ? hoặc phép so sánh >, < , =...)
 

File đính kèm

  • dropdown bang VBA ans.xlsm
    19.3 KB · Đọc: 117
Cám ơn Thầy NDU nhiều lắm.
Em sẽ nghiên cứu...
 
Gửi thầy @ndu96081631
Trong ví dụ của thầy chỉ áp dụng cho Cell F3. Nếu em muốn áp dụng thêm cho cell F4, F5,..thì code sẽ sửa thành thế nào ạ?
Em có sửa trong các sự kiện thành như này nhưng nó chạy chưa đúng ý vì ô chứa kết quả H4, H5,...sẽ chỉ chọn được giá trị 1 lần.
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  If Target.Address = Range("F3:F5") Then
    sValidation = JoinIf(",", Range("A2:A100"), Target.Value, Range("B2:B100"))
    With Range("H3").Validation
      .Delete
      .Add 3, , , sValidation
    End With
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  With Target
    If .Address = "$F$3" Then
      sValidation = JoinIf(",", Range("A2:A100"), "*")
      .Validation.Delete
      .Validation.Add 3, , , sValidation
    End If
  End With
End Sub
 
Nếu tôi làm bài này thì sẽ làm hơi khác 1 chút:
1> Code trong Module:
Mã:
Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String
  Dim aTmpCrit, aTmpDes, tmp1, tmp2, arr(), dic As Object
  Dim bComp As Boolean, Chk As Boolean
  Dim i As Long, j As Long, k As Long, dTmpVal As Double
  Set dic = CreateObject("Scripting.Dictionary")
  If IsMissing(TargetArray) Then TargetArray = CriteriaArray
  aTmpCrit = ConvertTo1DArray(CriteriaArray)
  aTmpDes = ConvertTo1DArray(TargetArray)
  If (Not IsArray(aTmpCrit)) Or (Not IsArray(aTmpDes)) Then Exit Function
  On Error Resume Next
  bComp = (InStr("<>=", Left(Criteria, 1)) > 0)
  For i = LBound(aTmpDes) To UBound(aTmpDes)
    tmp1 = aTmpCrit(i): tmp2 = aTmpDes(i)
    If bComp And Len(Criteria) Then
      dTmpVal = CDbl(aTmpCrit(i))
      If Evaluate(dTmpVal & Criteria) Then dic.Add tmp2, ""
    Else
      If (Left(Criteria, 1) = "!") Then
        If Not (UCase(tmp1) Like UCase(Mid(Criteria, 2, Len(Criteria)))) Then dic.Add tmp2, ""
      Else
        If (UCase(tmp1) Like UCase(Criteria)) Then dic.Add tmp2, ""
      End If
    End If
  Next
  If dic.Count Then
    arr = dic.Keys
    JoinIf = Join(arr, Delimiter)
  End If
End Function
Private Function ConvertTo1DArray(ByVal SourceArray)
  Dim aTmp, Item, arr()
  Dim n As Long
  On Error Resume Next
  aTmp = SourceArray
  If Not IsArray(aTmp) Then aTmp = Array(aTmp)
  For Each Item In aTmp
    n = n + 1
    ReDim Preserve arr(1 To n)
    arr(n) = Item
  Next
  ConvertTo1DArray = arr
End Function
2> Áp dụng cho sự kiện Change và SelectionChange
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  If Target.Address = "$F$3" Then
    sValidation = JoinIf(",", Range("A2:A100"), Target.Value, Range("B2:B100"))
    With Range("H3").Validation
      .Delete
      .Add 3, , , sValidation
    End With
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim sValidation As String
  On Error Resume Next
  With Target
    If .Address = "$F$3" Then
      sValidation = JoinIf(",", Range("A2:A100"), "*")
      .Validation.Delete
      .Validation.Add 3, , , sValidation
    End If
  End With
End Sub
Code ở Module tuy dài nhưng ta cũng chẳng cần quan tâm, chỉ cần biết áp dụng là được (phần áp dụng sẽ rất ngắn gọn)
Hàm JoinIf dùng để nối chuổi duy nhất theo điều kiện (giống SUMIF, có thể dùng ký tự đại diện như *, ? hoặc phép so sánh >, < , =...)

Thầy cho em hỏi sao file đính kèm F3 và H3 không như thầy làm. Chọn F3 nhwung H3 không có giá trị tương ứng để chọn.
 
Chào các bạn,

Mình có thắc mắc xin các bạn giải đáp dùm mình chỗ sai. Cám ơn trước :)

Xin các bạn xem file đính kèm.

Câu 3 đề bài yêu cầu tính tổng số lượng & tổng thành tiền của từng hãng HTC, Samsung, Nokia.
upload_2017-10-28_13-35-22.png
Mình dùng data validation cho Hãng SX & tên hàng. Thế nhưng khi chọn một hãng SX cụ thể& tên hàng cụ thể ví dụ HTC wildfire thì excel không tự động cập nhật Tổng số lượng & Tổng thành tiền cho HTC wildfire. Mình không biết là mình thao tác sai ở chỗ nào, các bạn xem file rồi kiểm tra dùm mình.
Xin đừng "ném đá" mình nếu mình hỏi hơi bị ngu. :(
Chân thành cảm ơn. ;):Do_O
 

File đính kèm

  • Luyện đề thi Excel chứng chỉ b văn phòng.xlsx
    79.2 KB · Đọc: 3
Chào các bạn,

Mình có thắc mắc xin các bạn giải đáp dùm mình chỗ sai. Cám ơn trước :)

Xin các bạn xem file đính kèm.

Câu 3 đề bài yêu cầu tính tổng số lượng & tổng thành tiền của từng hãng HTC, Samsung, Nokia.
View attachment 185683
Mình dùng data validation cho Hãng SX & tên hàng. Thế nhưng khi chọn một hãng SX cụ thể& tên hàng cụ thể ví dụ HTC wildfire thì excel không tự động cập nhật Tổng số lượng & Tổng thành tiền cho HTC wildfire. Mình không biết là mình thao tác sai ở chỗ nào, các bạn xem file rồi kiểm tra dùm mình.
Xin đừng "ném đá" mình nếu mình hỏi hơi bị ngu. :(
Chân thành cảm ơn. ;):Do_O
File chứa nhiều styles rác.
Trước khi gửi file lên diễn đàn thì đổi tên sao cho phù hợp nội dung hỏi.
 

File đính kèm

  • Chu khong dau.xlsx
    13.4 KB · Đọc: 10
Web KT
Back
Top Bottom