Dữ liệu tùy chỉnh chuyển vị?


7

Tôi có một xuất khẩu cho một nhóm bao gồm các sinh viên / cố vấn. Mọi người trong nhóm đều là sinh viên và cố vấn. Tôi cần chuyển đổi dữ liệu để có người cố vấn với sinh viên được chỉ định thay vì sinh viên có người cố vấn được chỉ định.

Phần mềm cung cấp cho tôi bản xuất như năm cột trong một tờ có tên sinh viên và người cố vấn đã được gán cho sinh viên đó:

ID Numbers of Students | Students | Mentor 1 | Mentor 2 | Mentor 3

Tôi cần một tờ để tham chiếu dữ liệu với các cố vấn trong một cột và các sinh viên tương ứng như:

ID Numbers of Mentors | Mentors | Student 1 | Student 2 | Student 3 | Student 4

Sinh viên là cố vấn và cố vấn là sinh viên - đó là cùng một bộ tên. Người cố vấn có tối đa bốn sinh viên được giao. Chỉ một hàng cho mỗi Mentor.

Tôi đang suy nghĩ QUERY()hoặc có lẽ ARRAYFORMULA()nhưng tôi đã không thể được chỉ định sử dụng VLOOKUP()hoặc FILTER()với ARRAYFORMULA(). Tôi không nhận được bất cứ nơi nào với nó.

Tôi sử dụng công thức Bảng tính Google nào để hoán đổi dữ liệu như được mô tả? bạn có thể cung cấp một ví dụ? Tôi sẽ chấp nhận một chức năng tùy chỉnh, nhưng chắc chắn điều này có thể được thực hiện với các công cụ hiện có.


Tại sao bạn không chia sẻ tài liệu với chúng tôi và cho chúng tôi thấy kết quả mong đợi?
Jacob Jan Tuinstra

1
Xin chào Jacob, đây là một ví dụ hư cấu: docs.google.com.vn/sản ra / Từ
Tom

Câu trả lời:


4

Sử dụng ví dụ của bạn, công thức này có thể được sử dụng trong hàng 2:

=TRANSPOSE(FILTER(B$2:B;MMULT(C$2:E=B2;TRANSPOSE(SIGN(COLUMN(C$2:E$2))))))

nhưng sẽ cần phải được điền vào theo yêu cầu. Hy vọng rằng bạn có thể điều chỉnh các tài liệu tham khảo cho dữ liệu thực tế của mình, nhưng bình luận lại nếu đây là một vấn đề.

Cách sử dụng MMULT

Nếu bạn yêu cầu một công thức duy nhất sẽ tự động điền vào toàn bộ tập dữ liệu, điều này có thể được thực hiện với các hàm riêng, nhưng nó sẽ phức tạp khủng khiếp và khá kém hiệu quả. Tôi sẽ đề xuất một hàm tùy chỉnh nếu một giải pháp công thức đơn là một yêu cầu.


Ngọt ngào, cảm ơn bạn đã trả lời AdamL. Tôi đã tìm kiếm một công thức duy nhất nhưng không chỉ định như vậy. Tôi không hoàn toàn theo nó đủ tốt để thích nghi. Nếu bạn nhìn vào bảng mẫu, công thức tiếp tục một số dư thừa - bạn có thể kiểm tra và giải thích không? Điều này sẽ làm việc với một trình bao bọc mở rộng ()?
Tom

Bạn đã chèn công thức vào hàng 22, vì vậy công thức như hiện tại sẽ không được tham chiếu chính xác. Công thức trong F22 nên là =TRANSPOSE(FILTER(B$22:B;MMULT(C$22:E=B22;TRANSPOSE(SIGN(COLUMN(C$2:E$2)))))).
AdamL

Cuối cùng đã tìm ra lý do tại sao tôi không thể sử dụng giải pháp của AdamL: Một số tế bào của tôi trong C $ 2: E có khoảng trắng ở đầu hoặc cuối đã phá vỡ hoàn toàn công thức. Khi khoảng trắng được loại bỏ, nó hoạt động chính xác như mong đợi. Cảm ơn AdamL.
Tom

0

Tôi tin rằng điều này có thể được thực hiện với chức năng tùy chỉnh trong tài liệu Google. Tôi đã viết một chức năng rằng:

  1. Quét bảng cho các cố vấn duy nhất và lưu chúng thành mảng
  2. Đối với mỗi cố vấn tìm thấy đọc một học sinh và lưu anh ta vào mảng đằng sau tên cố vấn
  3. In dữ liệu vào trang tính mới (về cơ bản dữ liệu là mảng)

Vì vậy, mỗi hàng của bảng gốc có thể có số lượng cột khác nhau.

Điều kiện tiên quyết là:

  • Bảng gốc với studens phải nằm trên tờ gọi là "sinh viên"
  • Bảng gốc với các studens phải có cùng bố cục như trong ví dụ (hoặc bạn phải chỉnh sửa hàng và cột bắt đầu để quét trong mã). Không thể có thêm thông tin nào trong trang tính hoặc nó sẽ phá vỡ tập lệnh.
  • Trong cùng một bảng tính, bạn phải tạo một bảng sạch mới (ví dụ: gọi là "người cố vấn") và sẽ có kết quả được in.

Xem bảng tính mẫu của tôi, nơi tôi đã kiểm tra nó: https://docs.google.com/s Lansheet / ccc

Đáng buồn thay, Google đã mất một thời gian để xem lại mã của tôi, vì vậy tôi không thể chia sẻ nó với bạn một cách dễ dàng trên Google Apps Script. Nhưng bạn có thể sao chép nó ở đây từ pastebin: http://pastebin.com/0hFMhC8e và tạo chức năng tùy chỉnh của riêng bạn. Chỉ cần truy cập bảng tính của bạn (có dữ liệu), tạo một bảng sạch mới, đi đến Công cụ > Trình quản lý tập lệnh > Mới , trong cửa sổ mới chọn từ danh sách trên Bảng tính bên trái , xóa mã mẫu, sao chép và dán mã của tôi từ pastebin , đặt tên cho chức năng mới của bạn là "transposeColumns" và lưu nó. Sau đó đi đến góa phụ / tab với bảng tính và trình quản lý tập lệnh được mở. Nhấn nút Tải lại trong trình quản lý và bạn sẽ thấy ở đó chức năng mới. Vì vậy, sau đó chỉ cần chọn nó và nhấnChạy đi . Nó sẽ yêu cầu bạn cho phép tập lệnh truy cập API Google Drive. Gửi nó Bây giờ, nó sẽ tự động lấy dữ liệu từ trang tính được gọi là "sinh viên" và chuyển chúng sang trang hoạt động hiện tại. Có thể thử chạy lại tập lệnh nếu nó không làm gì sau khi gửi quyền.

Có một số rắc rối như: Điều gì về ID sinh viên - có thể dễ dàng thêm vào tập lệnh để sao chép chúng. Bản thân đoạn script được viết bằng JavaScript đơn giản như possilbe. Tôi có thể tối ưu hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.