Nhờ các Bạn sửa giúp hàm IF để kết quả trả về là 1 ô blank

Liên hệ QC

ndhmoney686

Thành viên thường trực
Tham gia
25/4/12
Bài viết
376
Được thích
104
Giả xử mình có 1 ô dữ liệu là ô A8.
Và ô đặt công thức lấy kết quả là ô C8 (điều kiện của công thức là. Nếu ô A8 mà có dữ liệu thì lấy giá trị đó luôn. Còn nếu ô A8 mà ko có dữ liệu thì kết quả trả về là 1 ô blank.

Mình đang đặt công thức như sau
C8 =IF(A8<>"",A8,"") -> Thấy kết quả trả về ko phải là 1 ô blank các Bạn ah. Mong các Bạn nghĩ cách giúp mình để kết quả trả về là 1 ô blank (giống như 1 ô ban đầu chưa có dữ liệu) ko biết có làm được ko các Bạn? Mong các Bạn giúp. Cảm ơn các Bạn nhiều!
 
Giả xử mình có 1 ô dữ liệu là ô A8.
Và ô đặt công thức lấy kết quả là ô C8 (điều kiện của công thức là. Nếu ô A8 mà có dữ liệu thì lấy giá trị đó luôn. Còn nếu ô A8 mà ko có dữ liệu thì kết quả trả về là 1 ô blank.

Mình đang đặt công thức như sau
C8 =IF(A8<>"",A8,"") -> Thấy kết quả trả về ko phải là 1 ô blank các Bạn ah. Mong các Bạn nghĩ cách giúp mình để kết quả trả về là 1 ô blank (giống như 1 ô ban đầu chưa có dữ liệu) ko biết có làm được ko các Bạn? Mong các Bạn giúp. Cảm ơn các Bạn nhiều!

Đó là chuyện KHÔNG THỂ NÀO đâu bạn
Nên nhớ Blank Cell là cell chưa có gì trong đó. Nội cái chuyện trong cell đang chứa một công thức thì nó đã không thể gọi là Blank rồi
 
Upvote 0
Giả xử mình có 1 ô dữ liệu là ô A8.
Và ô đặt công thức lấy kết quả là ô C8 (điều kiện của công thức là. Nếu ô A8 mà có dữ liệu thì lấy giá trị đó luôn. Còn nếu ô A8 mà ko có dữ liệu thì kết quả trả về là 1 ô blank.

Mình đang đặt công thức như sau
C8 =IF(A8<>"",A8,"") -> Thấy kết quả trả về ko phải là 1 ô blank các Bạn ah. Mong các Bạn nghĩ cách giúp mình để kết quả trả về là 1 ô blank (giống như 1 ô ban đầu chưa có dữ liệu) ko biết có làm được ko các Bạn? Mong các Bạn giúp. Cảm ơn các Bạn nhiều!

Bạn làm đúng rồi mà, vấn đề là A8 của bạn có <>"" hay không?

Mà nó không về rỗng dzậy chứ nó về là cái gì? gởi xem nào.
 

File đính kèm

  • Book.xlsx
    8.9 KB · Đọc: 45
Upvote 0
Đó là chuyện KHÔNG THỂ NÀO đâu bạn
Nên nhớ Blank Cell là cell chưa có gì trong đó, nội cái trong cell đang chứa một công thức thì nó đã không thể gọi là Blank rồi

Có lẽ bạn ấy dùng từ "giống như 1 ô ban đầu chưa có dữ liệu)" là cũng chứ chắc ý như thế đây Thầy, em nghĩ ý có gì khác.
 
Upvote 0
Đó là chuyện KHÔNG THỂ NÀO đâu bạn
Nên nhớ Blank Cell là cell chưa có gì trong đó. Nội cái chuyện trong cell đang chứa một công thức thì nó đã không thể gọi là Blank rồi


Có lẽ bạn ấy dùng từ "giống như 1 ô ban đầu chưa có dữ liệu)" là cũng chứ chắc ý như thế đây Thầy, em nghĩ ý có gì khác.


Cảm ơn Thầy ndu96081631 và Bạn tungnguyen_kt đã giúp đỡ Em! Em tạo 1 file lấy ví dụ thực tế rất mong Thầy và các Bạn cho Em giải pháp sửa hàm. hoặc sửa code Em đang dùng.
 
Lần chỉnh sửa cuối:
Upvote 0
Lúc nãy mình có đưa file lên. Để làm ví dụ, Nhưng file đó mình thấy ko hợp lý nên gỡ xuống và tải file mới lên với ví dụ sát hơn. Mong các Bạn giúp đỡ mình. Cảm ơn các Bạn!

Các Bạn có thể tải theo đường Link này http://www.mediafire.com/?ncj3ck16825kl1d
 

File đính kèm

  • Danh sach bi cach quang.rar
    9.7 KB · Đọc: 25
Lần chỉnh sửa cuối:
Upvote 0
Mình thấy nếu xóa công thức ở cột C thì cột G ko còn bị dòng cách quãng (cho nên mình nghĩ có cách nào để ô C6 công thức trả về kết quả là 1 ô BLANK. Thì sẽ giải quyết được vấn để dòng cách quãng ở cột G. Còn ko thì phải sửa code lọc ở cột G. Mong các Bạn giúp đỡ.
 
Upvote 0
Lúc nãy mình có đưa file lên. Để làm ví dụ, Nhưng file đó mình thấy ko hợp lý nên gỡ xuống và tải file mới lên với ví dụ sát hơn. Mong các Bạn giúp đỡ mình. Cảm ơn các Bạn!

Các Bạn có thể tải theo đường Link này http://www.mediafire.com/?ncj3ck16825kl1d

trong code của bạn có đoạn:
If Not IsEmpty(SubItem)...
sửa thành vầy là được:
If Len(SubItem)...
Tuy nhiên, phần triển khai code cũng chưa "đẹp" lắm. Tôi "bo" nó lại đây:
Mã:
Function UniqueArray(ParamArray Source()) As Variant
  Dim SourceItem, SubItem, tmpArr
  Dim Dict As Object, n As Long, tmp, tmp2 As String
  Set Dict = CreateObject("Scripting.Dictionary")
  ReDim tmpArr(1 To 65536, 1 To 1)
  For Each SourceItem In Source
    tmp = SourceItem
    If Not IsArray(tmp) Then tmp = Array(tmp)
    For Each SubItem In tmp
      tmp2 = CStr(SubItem)
      If Len(tmp2) Then
        If Not Dict.Exists(tmp2) Then
          n = n + 1
          Dict.Add tmp2, ""
          tmpArr(n, 1) = SubItem
        End If
      End If
    Next
  Next
  If n Then UniqueArray = tmpArr
  Set Dict = Nothing
End Function
Công thức tại cột G cũng đâu cần phải thông qua cột phụ, viết vầy:
=UniqueArray(A2:A19&B2:B19)
-------------------
Lưu ý:
- Bạn ReDim tmpArr(1 To 65536, 1 To 1) là điều phải xem lại (không tốt lắm)
- Chỉ dùng ParamArray khi bạn cảm thấy nó thật sự cần thiết (trường hợp trong file này là không cần)
 
Lần chỉnh sửa cuối:
Upvote 0
Code này của mình là code lọc danh sách duy nhất với nhiều vùng. Liệu có thể đặt cho code thêm 1 điều kiện lọc là. Nếu vùng dữ liệu lọc dòng nào mà kết quả là "" thì ko lấy kết quả "" đó vào danh sách. Các Bạn xem giúp mình 1 tay nhé!
 
Upvote 0
trong code của bạn có đoạn:
If Not IsEmpty(SubItem)...
sửa thành vầy là được:
If Len(SubItem)...
Tuy nhiên, phần triển khai code cũng chưa "đẹp" lắm. Tôi "bo" nó lại đây:
Mã:
Function UniqueArray(ParamArray Source()) As Variant
  Dim SourceItem, SubItem, tmpArr
  Dim Dict As Object, n As Long, tmp, tmp2 As String
  Set Dict = CreateObject("Scripting.Dictionary")
  ReDim tmpArr(1 To 65536, 1 To 1)
  For Each SourceItem In Source
    tmp = SourceItem
    If Not IsArray(tmp) Then tmp = Array(tmp)
    For Each SubItem In tmp
      tmp2 = CStr(SubItem)
      If Len(tmp2) Then
        If Not Dict.Exists(tmp2) Then
          n = n + 1
          Dict.Add tmp2, ""
          tmpArr(n, 1) = SubItem
        End If
      End If
    Next
  Next
  If n Then UniqueArray = tmpArr
  Set Dict = Nothing
End Function
Công thức tại cột G cũng đâu cần phải thông qua cột phụ, viết vầy:
=UniqueArray(A2:A19&B2:B19)
-------------------
Lưu ý: Bạn ReDim tmpArr(1 To 65536, 1 To 1) là điều phải xem lại (không tốt lắm)


Thầy ơi ok rồi Thầy ạ. Cảm ơn Thầy rất nhiều!


PS: Em để cột phụ đó để xử lý thủ công trong trường hợp của Em gộp nhiều cột và lấy nhiều vùng lại làm 1 danh sách duy nhất. Sau đó tách ra theo từng cột Thầy ạ.
 
Upvote 0
Thầy ơi ok rồi Thầy ạ. Cảm ơn Thầy rất nhiều!


PS: Em để cột phụ đó để xử lý thủ công trong trường hợp của Em gộp nhiều cột và lấy nhiều vùng lại làm 1 danh sách duy nhất. Sau đó tách ra theo từng cột Thầy ạ.

Dù sau đó có công đoạn tách ra thì cũng đâu cần cột phụ...
Ví dụ:
=UniqueArray(A2:A19&CHAR(1)&B2:B19)
CHAR(1) là ký tự đặc biệt, đóng vai trò dấu phân cách để sau này khi muốn tách ra nhiều cột ta dựa vào nó xác định vị trí
 
Upvote 0
Dù sau đó có công đoạn tách ra thì cũng đâu cần cột phụ...
Ví dụ:
=UniqueArray(A2:A19&CHAR(1)&B2:B19)
CHAR(1) là ký tự đặc biệt, đóng vai trò dấu phân cách để sau này khi muốn tách ra nhiều cột ta dựa vào nó xác định vị trí


Vậy Thầy và các Bạn chờ Em chút Em đưa trường hợp đó lên. Em tìm kiếm code lọc đó bao lâu nay chưa được. Toàn phải làm cột phụ để lọc thủ công. Mong Thầy và các Bạn giúp Em.
 
Lần chỉnh sửa cuối:
Upvote 0
Em tải file này lên Thầy và các Bạn giúp Em được thì tuyệt quá. Lâu nay Em tìm kiếm code lọc danh sách duy nhất từ 3 cột và từ 3 vùng dữ liệu. Để sau đó gộp lại làm 1 danh sách duy nhất. Mãi mà chưa được ạ.
Dùng cột phụ gộp lại rồi Lọc danh sách duy nhất bằng hàm thì hàm chạy ì ạch. Code hiện tại mà lọc 1 cột thôi thì nó chạy em thấy nhanh hơn so với công thức mảng rất là nhiều. Nhưng có cái là chưa lọc được từ 3 cột.
Hiện tại Em đang phải dùng cột phụ. Để sau đó dùng code lúc nãy lọc từ cột phụ ra 1 danh sách duy nhất. Rồi sau đó dùng hàm để tách ra các cột. Để có được kết quả cuối cùng là 1 danh sách duy nhất gồm 3 cột (Như vùng cột kết quả trong file đính kèm).
Rất mong nhận được sự giúp đỡ của Thầy và các Bạn trong trường hợp này.

Các Bạn có thể tải file theo đường Link này http://www.mediafire.com/?cbfxbncyxq6c088
 

File đính kèm

  • Code loc danh sach duy nhat.rar
    10.3 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Em tải file này lên Thầy và các Bạn giúp Em được thì tuyệt quá. Lâu nay Em tìm kiếm code lọc danh sách duy nhất từ 3 cột và từ 3 vùng dữ liệu. Để sau đó gộp lại làm 1 danh sách duy nhất. Mãi mà chưa được ạ.
Dùng cột phụ gộp lại rồi Lọc danh sách duy nhất bằng hàm thì hàm chạy ì ạch. Code hiện tại mà lọc 1 cột thôi thì nó chạy em thấy nhanh hơn so với công thức mảng rất là nhiều. Nhưng có cái là chưa lọc được từ 3 cột.
Hiện tại Em đang phải dùng cột phụ. Để sau đó dùng code lúc nãy lọc từ cột phụ ra 1 danh sách duy nhất. Rồi sau đó dùng hàm để tách ra các cột. Để có được kết quả cuối cùng là 1 danh sách duy nhất gồm 3 cột (Như vùng cột kết quả trong file đính kèm).
Rất mong nhận được sự giúp đỡ của Thầy và các Bạn trong trường hợp này.

Các Bạn có thể tải file theo đường Link này http://www.mediafire.com/?cbfxbncyxq6c088
Phải thế này không? Nhưng mà sao nội dung câu hỏi khác xa với nội dung của topic vậy trời?
PHP:
Sub loc()
Dim data(), i, j, kq(1 To 10000, 1 To 3), dk, k
data = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If data(i, 1) <> "" Then
         If data(i, 2) <> "" Then
            If data(i, 3) <> "" Then
               dk = data(i, 1) & data(i, 2) & data(i, 3)
               If Not .exists(dk) Then
                  k = k + 1
                  .Add dk, ""
                  For j = 1 To 3
                     kq(k, j) = data(i, j)
                  Next
               End If
            End If
         End If
      End If
   Next
End With
[G2].Resize(k, 3) = kq
End Sub
 

File đính kèm

  • Code loc danh sach duy nhat-1.rar
    9.6 KB · Đọc: 22
Lần chỉnh sửa cuối:
Upvote 0
Phải thế này không?
PHP:
Sub loc()
Dim data(), i, j, kq(1 To 10000, 1 To 3), dk, k
data = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If data(i, 1) <> "" Then
         If data(i, 2) <> "" Then
            If data(i, 3) <> "" Then
               dk = data(i, 1) & data(i, 2) & data(i, 3)
               If Not .exists(dk) Then
                  k = k + 1
                  .Add dk, ""
                  For j = 1 To 3
                     kq(k, j) = data(i, j)
                  Next
               End If
            End If
         End If
      End If
   Next
End With
[G2].Resize(k, 3) = kq
End Sub

Cảm ơn Anh Quang Hai! Anh ơi kết quả đúng rồi Anh ạ. Cái code này có thể xây dưng thành hàm tự tạo cho dễ dùng không Anh? Kiểu như code tự tạo ở bên trên Anh ạ. Để khi lấy các vùng dữ liệu từ các sheet cho nó tiện và dễ dùng. Mong Anh và các Bạn giúp đỡ!
 
Lần chỉnh sửa cuối:
Upvote 0
Hic mình có biết hàm tự tạo là cái gì đâu mà xây dựng chứ. Thấy bài nào thì xào bài đó thôi. Để xem có ai chế ra cái hàm tự tạo cho bạn hay không chứ mình thì hỏng biết vì kiến thức giới hạn quá.
 
Upvote 0
Hic mình có biết hàm tự tạo là cái gì đâu mà xây dựng chứ. Thấy bài nào thì xào bài đó thôi. Để xem có ai chế ra cái hàm tự tạo cho bạn hay không chứ mình thì hỏng biết vì kiến thức giới hạn quá.


Anh có thể giúp Em tạo ghi chú vào code cho các vùng dữ liệu tham chiếu được ko Anh?
Ví dụ:
- Vùng dữ liệu 1 (giả sử ở sheet1 từ ô A1:A8)
- Vùng dữ liệu 2 (giả sử ở sheet2 từ ô A14:A21)
- Vùng dữ liệu 3 (giả sử ở sheet3 từ ô A26:A21)
- Vùng đặt kết quả (giả ở sheet4 từ ô A1:A200)

Có 3 vùng quan trong đấy Anh giúp Em. Để Em biết cách sửa khi vùng tham chiếu thay đổi. Và kiểm soát được vùng đặt kết quả.
Mong Anh và các Bạn giúp đỡ.


PS: Anh giúp Em cho code tự động update khi vùng dữ liệu thay đổi thì vùng kết quả thay đổi theo.
 
Upvote 0
Anh có thể giúp Em tạo ghi chú vào code cho các vùng dữ liệu tham chiếu được ko Anh?
Ví dụ:
- Vùng dữ liệu 1 (giả sử ở sheet1 từ ô A1:A8)
- Vùng dữ liệu 2 (giả sử ở sheet2 từ ô A14:A21)
- Vùng dữ liệu 3 (giả sử ở sheet3 từ ô A26:A21)
- Vùng đặt kết quả (giả ở sheet4 từ ô A1:A200)

Có 3 vùng quan trong đấy Anh giúp Em. Để Em biết cách sửa khi vùng tham chiếu thay đổi. Và kiểm soát được vùng đặt kết quả.
Mong Anh và các Bạn giúp đỡ.


PS: Anh giúp Em cho code tự động update khi vùng dữ liệu thay đổi thì vùng kết quả thay đổi theo.
Mình không thể làm gì được với dạng dữ liệu giả sử đâu nhé....Giả sử thì không thể viết code đúng yêu cầu đâu. Hic mình thua rồi.
 
Upvote 0
Phải thế này không? Nhưng mà sao nội dung câu hỏi khác xa với nội dung của topic vậy trời?
PHP:
Sub loc()
Dim data(), i, j, kq(1 To 10000, 1 To 3), dk, k
data = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If data(i, 1) <> "" Then
         If data(i, 2) <> "" Then
            If data(i, 3) <> "" Then
               dk = data(i, 1) & data(i, 2) & data(i, 3)
               If Not .exists(dk) Then
                  k = k + 1
                  .Add dk, ""
                  For j = 1 To 3
                     kq(k, j) = data(i, j)
                  Next
               End If
            End If
         End If
      End If
   Next
End With
[G2].Resize(k, 3) = kq
End Sub

Em chào Anh QuangHai1969 và các bạn,
Cũng với file Anh QuangHai1969 đã sửa giúp bạn ở trên, đã chạy ra được danh sách duy nhất (với 3 vùng cùng trong 1 sheet). Em muốn nhờ Anh QuangHai1969 và các bạn giúp Em lấy 3 vùng đó đặt ở 3 sheet (sheet Nhập, sheet Xuất, sheet Tồn ĐK) và nếu có thể thì giúp Em lấy thêm số lượng vào các cột. Em cảm ơn!

1607700986648.png

Mã:
Option Explicit

Sub loc()
Dim data(), i, j, kq(1 To 10000, 1 To 3), dk, k
data = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      If data(i, 1) <> "" Then
         If data(i, 2) <> "" Then
            If data(i, 3) <> "" Then
               dk = data(i, 1) & data(i, 2) & data(i, 3)
               If Not .exists(dk) Then
                  k = k + 1
                  .Add dk, ""
                  For j = 1 To 3
                     kq(k, j) = data(i, j)
                  Next
               End If
            End If
         End If
      End If
   Next
End With
[G2].Resize(k, 3) = kq
End Sub
 

File đính kèm

  • Code loc danh sach duy nhat-1.xls
    99 KB · Đọc: 7
Upvote 0
Web KT
Back
Top Bottom