Whatever you do, take Aflatoon's advice on passing all ranges as arguments very seriously. In short: Any range of cells the UDF needs should be passed to the UDF as an argument. Using a worksheet change event to handle how a UDF works is a very unusual way of doing things.