Быстрый макет, не совсем подходящий для вас:
dim i as long, arr as variant, findstr as string, strcols as long, strcold as long
arr = array("Measure","Value") 'etc., you get the idea
for i = lbound(arr) to ubound(arr) step 1
findstr = arr(i).value
with sheets("raw data")
strcols = .Columns(1).Find(What:=findstr, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
end with
with sheets("new data")
if strcols > 0 then strcold = .Columns(1).Find(What:=findstr, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
end with
sheets("new data").columns(strcold).value = sheets("raw data").columns(strcols).value
next i
strcols = источник столбца строки, strcold = пункт назначения столбца строки ... позволяет искать оба, найти номер столбца, затем значение= значение.
Редактировать1:
Обновление для использования первого столбца листов («новые данные»)
dim i as long, lc as long, findstr as string, strcols as long
lc = sheets("new data").cells(1,sheets("new data").columns.count).end(xltoleft).column
for i = 1 to lc step 1
findstr = sheets("new data").cells(1,i).value
with sheets("raw data")
strcols = .Columns(1).Find(What:=findstr, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
if strcols > 0 then sheets("new data").columns(i).value = .columns(strcols).value
end with
next i