[Help] – Tạo xác thực dữ liệu phụ thuộc THEO HÀNG NGANG

Dạo gần đây mình có nhận được một vài yêu cầu về vấn đề “Làm sao để tạo xác thực dữ liệu phụ thuộc theo hàng ngang?” – (horizontal data validation). Trong bài này mình sẽ trả lời cho câu hỏi trên. Tuy nhiên mình sẽ không đi sâu vào giải thích chi tiết về cấu trúc hàm nữa mà sẽ hướng dẫn cách làm luôn. Các bạn có thể xem cấu trúc các hàm tạo xác thực dữ liệu ở bài Tạo xác thực dữ liệu phụ thuộc theo cột.

Mô tả yêu cầu

Yêu cầu:

  • Tạo xác thực dữ liệu cho cột A của “sheet” với các giá trị: iphone, samsung, và nokia. Các bạn tự làm phần này bằng cách bôi đen cột A, click phải chuột chọn Xác thực dữ liệu, và điền các giá trị trên vào
  • Tra cứu Theo Hàng trong “Database” và trả về các xác thực dữ liệu tương ứng vào cột B sheet. Ví dụ: trong ô A9 – sheet chọn giá trị “iphone”, thì B9 sheet sẽ có các lựa chọn “X”, “XS”, “XS max”

Viết code

Chuẩn bị

Bắt đầu với các bước khai báo cơ bản nhé. Tất nhiên là chúng ta sẽ dùng trigger onEdit để thực hiện vì đây là yêu cầu dạng “thực hiện lệnh ngay khi thay đổi giá trị của một ô”. Ngoài ra, để chắc chắn rằng ô chúng ta đang chọn là ô ở cột A và hàng thì là từ hàng 2 trở đi (hàng 1 là tiêu đề), chúng ta ràng buộc 1 điều kiện if trước khi viết code chính:

Code chính

Chúng ta sẽ có 3 bước trong phần này:

  • B1: Tìm xem giá trị được chọn trong cột A sheet là ở hàng thứ mấy trong Database
  • B2: Lấy các giá trị trong hàng vừa tìm được (X, XS, XS max)
  • B3: Viết XTDL

Để tìm giá trị nhập vào thuộc hàng thứ mấy trong Database, ta chỉ đơn giản dùng vòng lặp for để tìm.

Biến tam đóng vai trò lưu lại số hàng. Ở đây mình ghi “tam = tam + 1” là vì chúng ta đang tra cứu trong mảng col, mà mảng thì bắt đầu đếm từ 0, trong khi hàng của Google Sheet thì bắt đầu từ hàng 1, thế nên phải +1 để trả về đúng số hàng cần tìm.

Cùng vì mảng col là mảng 2 chiều nên ta phải ghi ” col[i][0] “.

Sau khi đã có được hàng cần tìm, chúng ta lấy tiếp các lựa chọn trong hàng đó:

” dbsheet.getLastColumn() – 1 ” là do cột 1 Database là cột tiêu đề.

Cuối cùng, thực hiện ghi xác thực dữ liệu vào cột B sheet.

Thêm 1 chức năng quan trọng khác là khi chúng ta xóa giá trị ở cột A sheet, thì cột B cũng cần phải được xóa nội dung và dữ liệu phụ thuộc

Code hoàn chỉnh

Link Download

Link file Google Sheet. Để download file về và xem code các bạn hãy vào File -> Make a copy (Tệp -> Tạo bản sao).

2 COMMENTS

  1. Chào bạn! Mình xem loạt video của bạn rất hữu ích cho những gì mình mới tìm hiểu.
    Mình có câu hỏi nhờ bạn trả lời giúp:

    Nếu mình dùng Gsheet để làm 1 vông cụ cho nhiều người dùng khác nhau. Mà trong giao diện dùng thì như nhau, người dùng lấy dữ liệu từ 1 database chung. Mỗi use có thể tự tạo sheet hoặc bảng tính mới độc lập để lấy dữ liệu từ database system và database của mỗi use.
    Mình không biết phải mô tả thế nào nữa? Nhưng đại loại là như excel mà đc dùng online.
    Cảm ơn bạn!

    • Chào bạn, cảm ơn bạn đã xem các video của mình. Mình đã từng nghĩ đến vấn đề này rồi. Lúc đi làm sếp mình cũng có nhu cầu tương tự vậy để các nhân viên tạo báo cáo trong file của riêng họ, nhưng vẫn dùng “database” của sếp.
      Để giải quyết thì chắc bạn không cần dùng apps script chi cho phức tạp. Bạn tìm hiểu về hàm IMPORTRANGE nhé 🙂
      Thân

Leave a Reply