Ubah referensi rumus excel saat menarik melintasi kolom


1

Saya memiliki baris yang ingin saya isi dengan rumus seperti

=SUMPRODUCT(B93:B96,B46:B49)/SUM(B46:B49)
=SUMPRODUCT(C92:C95,C45:C48)/SUM(C45:C48)
=SUMPRODUCT(D91:D94,D44:D47)/SUM(D44:D47)

tetapi menyeret rumus hanya mengubah bagian alfabet dari indeks. Apakah ada cara agar excel dengan benar mengubah indeks array?


Ini tidak memberikan jawaban lengkap, tetapi tetap mempertahankan tampilan formula. Masukkan formula pertama Anda di sel a20 dari lembar kosong baru. Salin tempel ke B19, lalu ke c18, lalu D17, dll. Setelah Anda selesai mengerjakan cukup baris, potong-rekatkan kembali menjadi b20, c20, d20, e20, dll, lalu potong tempel A20: z20 ke mana pun Anda inginkan. Jelas ini adalah padat karya, tetapi kurang daripada secara manual mengubah setiap referensi array. Dan itu membuat Anda dengan formula yang terlihat seperti yang Anda mulai.
Adam

Jawaban:


2

Seperti yang saya pahami, Anda memiliki sel dengan rumus =SUMPRODUCT(B93:B96,B46:B49)/SUM(B46:B49)dan Anda ingin mengisi ini dengan benar sehingga sel di kolom berikutnya tetapi baris yang sama memiliki rumus =SUMPRODUCT(C92:C95,C45:C48)/SUM(C45:C48). Artinya, Anda ingin kolom bertambah 1 seperti biasa, tetapi juga baris berkurang 1.

Anda dapat mencapai ini menggunakan OFFSETfungsi. Ini memungkinkan Anda untuk membangun rentang yang jarak yang ditentukan dari rentang yang diketahui. Kita dapat menggunakan COLUMNfungsi untuk menentukan berapa banyak offset yang kita inginkan.

Rentang yang kita inginkan adalah B93:B96dan B46:B49, diimbangi dengan -1 baris dan kolom +1 untuk setiap kolom melewati yang pertama. Karenanya, OFFSET(B93:B96, -1, 1)akan mengembalikan referensi ke C92:C95. Namun, referensi kami secara alami akan memperbarui kolom, sehingga kami dapat membiarkan kolom itu diimbangi.

Untuk rentang yang ada B93:B96di rumus asli, di sel pertama yang kita inginkan OFFSET(B93:B96, 0, 0), di kedua kita inginkan OFFSET(C93:C96, -1, 0), di ketiga kita inginkan OFFSET(D93:D96, -2, 0)dan seterusnya. Kita dapat menggunakan =COLUMN(A1)untuk mendapatkan hasil yang merupakan jumlah kolom saat ini (karena referensi akan diperbarui ke B1 di kolom kedua, dll). Menggabungkan ini, kita dapat menggunakan
OFFSET(B93:B96, 1 - COLUMN(A1), 0)
yang kita dapat menyederhanakan dengan mengubah referensi:
OFFSET(B94:B97, -COLUMN(A1), 0)
Dalam sel pertama ini diterjemahkan menjadi OFFSET(B94:B97, -1, 0)yang B93:B96. Di sel kedua, formula akan mengisi seperti OFFSET(C94:C97, -COLUMN(B1), 0)apa adanya C92:C95.

Jadi dua referensi yang kita butuhkan adalah OFFSET(B94:B97, -COLUMN(A1), 0)dan OFFSET(B47:B50, -COLUMN(A1), 0). Maka formula akan menjadi

=SUMPRODUCT(OFFSET(B94:B97, -COLUMN(A1), 0), OFFSET(B47:B50, -COLUMN(A1), 0)) / SUM(OFFSET(B47:B50, -COLUMN(A1), 0))

Ada satu komplikasi terakhir. Ketika saya menguji ini pada salinan Excel 2007 saya, saya menemukan bahwa di dalam SUMPRODUCTrumus, COLUMN(A1)mengembalikan array yang berisi nilai 1, bukan hanya nilai 1. (Anda dapat melihat ini di kotak dialog Evaluasi Formula: ketika mengevaluasi COLUMN(A1)hasilnya {1}bukan hanya 1, dan SUMPRODUCTekspresi mendapat dua #VALUE!argumen dan akhirnya menjadi 0.) Tergantung pada versi Anda ini mungkin tidak terjadi pada Anda. Jika ya, bungkus bagian COLUMN(A1)dalam a SUM(), seperti:

=SUMPRODUCT(OFFSET(B94:B97, -SUM(COLUMN(A1)), 0), OFFSET(B47:B50, -SUM(COLUMN(A1)), 0)) / SUM(OFFSET(B47:B50, -COLUMN(A1), 0))

Anda akan perhatikan bahwa saya belum membungkus final COLUMN(A1)dalam SUM(); itu karena yang ini mengembalikan angka seperti biasa, bukan referensi array. Saya berasumsi bahwa karena SUMfungsi tidak menerima referensi array, Excel menyadari bahwa kami tidak ingin array keluar dari COLUMNkasus ini.


pendekatan yang sangat bagus! Mungkin dengan beberapa gambar akan lebih jelas.
Máté Juhász

Ini sepertinya memindahkan referensi dengan cara yang salah ketika saya menyeret melintasi sel. Saya akan bermain-main dengannya sedikit lebih banyak dan melihat apakah saya melakukan sesuatu yang salah.
learningAsIGo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.