Here's a solution that worked on your test case by looping through the rows in the table.  Let me know if you need help understanding the code.
dt = Current Data Table();
ad_date_temp = .;
dis_date_temp = .;
for(i=1,i<=N Row(dt), i++,
	//Only update these vars if current row has new values for them
	ad_date_temp = If(IsMissing(:Name("Adm. Date")[i]),ad_date_temp, :Name("Adm. Date")[i]);
	dis_date_temp = If(IsMissing(:Name("Dis. Date")[i]),dis_date_temp, :Name("Dis. Date")[i]);
	
	Show(i, ad_date_temp, dis_date_temp);
	If(:Name("Ref.Date")[i] >= ad_date_temp & :Name("Ref.Date")[i] <= dis_date_temp,
		//Execute if Ref Date is in the current range
			:Name("Adm.Date_1")[i] = ad_date_temp;
			:Name("Dis.Date_1")[i] = dis_date_temp
		,
		//Execute if Ref Date is not in the current range
			:Name("Adm.Date_1")[i] = .;
			:Name("Dis.Date_1")[i] = .
	);
);
					
				
			
			
				
	-- Cameron Willden