(GOOGLE SHEETS) TẠO APPS SCRIPT COPY Q5:U5 TỪ CHITIET_T1 SANG CHITIET_T2 ĐẾN CHITIET_T31

 

HƯỚNG DẪN TẠO APPS SCRIPT COPY Q5:U5 TỪ CHITIET_T1 SANG CHITIET_T2 ĐẾN CHITIET_T31

Mục đích của Apps Script này là tự động sao chép vùng Q5 từ sheet ChiTiet_T1 sang đúng vùng Q5 của các sheet từ ChiTiet_T2 đến ChiTiet_T31.

Script sẽ giúp không phải mở từng sheet để copy thủ công.


Bước 1: Mở Google Apps Script

Mở file Google Sheets cần thao tác.

Trên thanh menu chọn:

Extensions/Tiện ích mở rộng → Apps Script

Google sẽ mở cửa sổ Apps Script ở tab mới.


Bước 2: Xóa code mặc định

Trong cửa sổ Apps Script, nếu đang có đoạn:

function myFunction() {

}

hãy xóa toàn bộ đoạn này.


Bước 3: Copy đoạn code dưới đây

Copy toàn bộ đoạn code sau và dán vào file Code.gs:

function copyQ5U5To31Sheets() {
  const ss = SpreadsheetApp.openById(
    "1p6m0A_yNUnDR28DpnRiMkkbu7NGPVyEN0sF451Q1G-Y"
  );

  const source = ss.getSheetByName("ChiTiet_T1");

  if (!source) {
    throw new Error("Không tìm thấy sheet ChiTiet_T1");
  }

  const sourceRange = source.getRange("Q5:U5");

  for (let i = 2; i <= 31; i++) {
    const target = ss.getSheetByName("ChiTiet_T" + i);

    if (!target) continue;

    sourceRange.copyTo(
      target.getRange("Q5:U5"),
      SpreadsheetApp.CopyPasteType.PASTE_NORMAL,
      false
    );
  }

  Logger.log(
    "Đã copy Q5:U5 từ ChiTiet_T1 sang ChiTiet_T2 đến ChiTiet_T31"
  );
}

Bước 4: Lưu Apps Script

Sau khi dán code, nhấn:

Save/Lưu

hoặc nhấn:

Ctrl + S

Có thể đặt tên project, ví dụ:

Copy Q5-U5 sang 31 sheet


Bước 5: Chạy Apps Script

Ở phía trên cửa sổ Apps Script, tại ô chọn hàm, chọn:

copyQ5U5To31Sheets

Sau đó nhấn:

Run/Chạy


Bước 6: Cấp quyền lần đầu

Nếu đây là lần đầu chạy Apps Script, Google sẽ yêu cầu cấp quyền.

Thực hiện:

Review permissions/Xem lại quyền

→ Chọn tài khoản Google đang sử dụng.

Nếu xuất hiện cảnh báo:

Google hasn't verified this app

chọn:

Advanced/Nâng cao

→ Go to...

→ Allow/Cho phép

Chỉ cần cấp quyền ở lần chạy đầu tiên.


Bước 7: Kiểm tra kết quả

Sau khi script chạy xong, vùng:

ChiTiet_T1!Q5

sẽ được copy sang:

ChiTiet_T2!Q5

ChiTiet_T3!Q5

ChiTiet_T4!Q5

...

ChiTiet_T31!Q5

Như vậy chỉ cần chạy script một lần là có thể copy dữ liệu sang tối đa 30 sheet.


Script hoạt động như thế nào?

Sheet nguồn là:

ChiTiet_T1

Vùng nguồn là:

Q5

Script sử dụng vòng lặp:

for (let i = 2; i <= 31; i++)

để lần lượt tìm các sheet:

ChiTiet_T2
ChiTiet_T3
ChiTiet_T4
...
ChiTiet_T31

Sau đó copy vùng Q5 của ChiTiet_T1 sang vùng Q5 của từng sheet.


Nếu thiếu một sheet thì sao?

Trong script có dòng:

if (!target) continue;

Điều này có nghĩa là nếu một sheet không tồn tại, script sẽ tự động bỏ qua.

Ví dụ nếu không có:

ChiTiet_T15

thì script vẫn tiếp tục chạy sang:

ChiTiet_T16

ChiTiet_T17

...

cho đến ChiTiet_T31.

Script sẽ không bị dừng chỉ vì thiếu một sheet.


Script sẽ copy những gì?

Script đang sử dụng:

SpreadsheetApp.CopyPasteType.PASTE_NORMAL

Có nghĩa là thao tác gần giống:

Ctrl + C → Ctrl + V

trong Google Sheets.

Nó có thể copy:

  • Công thức

  • Giá trị

  • Định dạng

  • Một số thuộc tính của ô

Nếu Q5 chứa công thức thì công thức sẽ được copy sang các sheet đích.


Lưu ý quan trọng

Khi chạy script, dữ liệu hiện có tại:

Q5

của các sheet từ:

ChiTiet_T2 đến ChiTiet_T31

sẽ bị ghi đè.

Vì vậy nên kiểm tra trước khi chạy nếu các ô này đang có dữ liệu cần giữ lại.


Khi cần chạy lại

Nếu sau này bạn sửa công thức hoặc dữ liệu tại:

ChiTiet_T1!Q5

và muốn cập nhật lại cho toàn bộ các sheet còn lại, chỉ cần:

Extensions/Tiện ích mở rộng → Apps Script

→ chọn:

copyQ5U5To31Sheets

→ nhấn:

Run/Chạy

Script sẽ copy lại vùng mới nhất từ ChiTiet_T1.


Tóm tắt

Sheet nguồn: ChiTiet_T1

Vùng nguồn: Q5

Sheet đích: ChiTiet_T2 đến ChiTiet_T31

Vùng đích: Q5

Sheet bị thiếu: tự động bỏ qua

Dữ liệu cũ tại Q5:U5: sẽ bị ghi đè

Cách chạy: Extensions/Tiện ích mở rộng → Apps Script → Run/Chạy

Chỉ cần cài Apps Script một lần, những lần sau chỉ cần chạy lại hàm copyQ5U5To31Sheets là được.
Chú ý link: https://docs.google.com/spreadsheets/d/1p6m0A_yNUnDR28DpnRiMkkbu7NGPVyEN0sF451Q1G-Y/edit....

thì ID: 1p6m0A_yNUnDR28DpnRiMkkbu7NGPVyEN0sF451Q1G-Y



Related posts:

Đăng nhận xét

Mới hơn Cũ hơn

Discuss

×Close