Maaf mas @Zolydck... ikutan nimbrung ya ;)
Konsepnya hampir serupa dengan mas @Zolydck, yakni dengan fitur Data Validation. Namun disini, menurut saya, salah satu cara validasi yang bisa dilakukan tanpa menggunakan macro adalah dengan kolom bantu yang digunakan untuk memeriksa apakah nilai Keluar lebih besar dari nilai Masuk pada Kategori dan Sub Kategori yang sama, dengan syarat range acuannya harus bersifat dinamis.
Dalam hal ini, saya menggunakan fungsi SUMIFS untuk menjumlahkan nilai Masuk untuk Kategori dan Sub Kategori yang sama pada baris yang sedang diinput. Apabila nilai penjumlahan kolom Masuk lebih kecil dari nilai Keluar yang sedang diinput, maka kolom bantu tersebut (kolom IS_OVER) akan terkalkulasi terlebih dahulu dan akan bernilai TRUE. Akibatnya, validasi terpicu. Keuntungan lainnya, jika ada input data baru dengan Kategori dan Sub Kategori berbeda dari yang telah ada sebelumnya di dalam tabel, dimana nilai yang diinput adalah pada kolom Keluar, otomatis validasi juga akan terpicu, karena belum ada nilai pemasukan (nilai Masuk) terhadap Kategori dan Sub Kategori baru tersebut. Sedangkan untuk membuat range penjumlahannya dinamis, saya menggunakan fungsi INDIRECT, dengan konsep baris range yang dijumlahkan dengan fungsi SUMIFS adalah total seluruh baris yang sudah terisi dikurangi 1 baris (yakni baris terakhir yang sedang diinput). Konsepnya ada pada file terlampir... :)
Mengapa saya tidak menggunakan data pada Pivot Table (misalnya dengan fungsi GETPIVOTDATA)? Karena jika mengandalkan nilai Pivot Table, repotnya setiap kali ada masukan data baru pada tabel Transaksi, kita harus refresh Pivot Table-nya dahulu agar data up-to-date.
Bagi rekan-rekan BeORG yang punya solusi lain, mohon dibagi-bagi dong... ;)