D列はindex番号なので、それを加工すればうまくいきます。
xlsreadでは最初の空欄行は除外されます。
なのでblankで除外された数値を補正しています。
clc,clear;
blank = 1; %1行目がブランクのため
[num,~,~] = xlsread('sample.xlsx');
D列目をidxとして保存し、blank分だけ引きます。
その前に、NaNや0行目は存在しないので省きます。
idx = num(:,3);
idx = idx(idx>0)-blank;
num(idx,2) = 1