вы может иметь книгу Excel, кторая содержит макрос VBA, который вызывает внешний макрос (если вы не смогли решить проблему в VBA, а он много чего может) и (внимательно!) передать ему собственное имя книги и листа с данными
Вы привели тело цикла, такое же, как у меня.
temp = array[i];
array[i] = array[min];
array[min] = temp;
чтоб проверить правильность, нужно понять алгоритм, посчитать вручную на бумаге, и сравнить с результатом программы
if(min == i) continue;
temp = array[i]; //
array[i] = array[min]; // меняю их местами
array[min] = temp; //
Особой соли и магии тут нет. Смысл двойных define в том, что бы заставить препроцессор еще раз подставленную, чтоб раскрыть макрос.
Например если вам понадобиться 3 раскрытия макросов, то придется делать 3 вложенности mkstr(). Например типа такого: