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?
microsoft-excel
worksheet-function
microsoft-excel-2007
belajar Asigo
sumber
sumber
Jawaban:
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
OFFSET
fungsi. Ini memungkinkan Anda untuk membangun rentang yang jarak yang ditentukan dari rentang yang diketahui. Kita dapat menggunakanCOLUMN
fungsi untuk menentukan berapa banyak offset yang kita inginkan.Rentang yang kita inginkan adalah
B93:B96
danB46:B49
, diimbangi dengan -1 baris dan kolom +1 untuk setiap kolom melewati yang pertama. Karenanya,OFFSET(B93:B96, -1, 1)
akan mengembalikan referensi keC92:C95
. Namun, referensi kami secara alami akan memperbarui kolom, sehingga kami dapat membiarkan kolom itu diimbangi.Untuk rentang yang ada
B93:B96
di rumus asli, di sel pertama yang kita inginkanOFFSET(B93:B96, 0, 0)
, di kedua kita inginkanOFFSET(C93:C96, -1, 0)
, di ketiga kita inginkanOFFSET(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 menggunakanOFFSET(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)
yangB93:B96
. Di sel kedua, formula akan mengisi sepertiOFFSET(C94:C97, -COLUMN(B1), 0)
apa adanyaC92:C95
.Jadi dua referensi yang kita butuhkan adalah
OFFSET(B94:B97, -COLUMN(A1), 0)
danOFFSET(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
SUMPRODUCT
rumus,COLUMN(A1)
mengembalikan array yang berisi nilai 1, bukan hanya nilai 1. (Anda dapat melihat ini di kotak dialog Evaluasi Formula: ketika mengevaluasiCOLUMN(A1)
hasilnya{1}
bukan hanya1
, danSUMPRODUCT
ekspresi mendapat dua#VALUE!
argumen dan akhirnya menjadi 0.) Tergantung pada versi Anda ini mungkin tidak terjadi pada Anda. Jika ya, bungkus bagianCOLUMN(A1)
dalam aSUM()
, 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)
dalamSUM()
; itu karena yang ini mengembalikan angka seperti biasa, bukan referensi array. Saya berasumsi bahwa karenaSUM
fungsi tidak menerima referensi array, Excel menyadari bahwa kami tidak ingin array keluar dariCOLUMN
kasus ini.sumber