Существует множество способов решения подобных проблем в Excel.Вероятно, это не лучший вариант, но он должен работать:
Для 1:
Если в вашей таблице около 100 столбцов и предполагается, что она начинается в ячейке A1, вы можете использовать
intColNr = Application.WorksheetFunction.Match(HeaderToSearch,Worksheets("MyWorksheet").Range("A1:DZ1"),0)
, чтобы получить столбец, который вы ищете (A: DZ - это 130 столбцов => должен соответствовать вашим потребностям).
Для 2/3:
Если в вашей таблице не более 100 000 строк: сначала вставьте новый столбец в столбец A:
Columns("A:A").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Затем скопируйте / вставьте столбец, найденный на шаге 1:
Worksheets("MyWorksheet").Range(Worksheets("MyWorksheet").cells(1,intColNr),Worksheets("MyWorksheet").cells(100000,intColNr)).copy
Worksheets("MyWorksheet").Range("A1").pastespecial xlPasteAll
Если вы не хотите, чтобы столбцы дублировались, вы должны удалить столбец, который вы нашли на шаге 1 (поскольку мы вставили новый столбец перед, его номер столбца увеличивается на 1):
Worksheets("Sheet1").range(Worksheets("Sheet1").cells(1,intColNr + 1),Worksheets("Sheet1").cells(1,intColNr + 1)).entirecolumn.delete
Поместите все элементы в Sub, например subMoveColumn (varHeader как Variant), и поместите заголовки, которые вы хотите найти, в диапазон, например, «Рабочие листы» («Someworksheet»). Range («A1: A10») и выполните цикл по этому диапазону.:
Set rngHeaders = Worksheets("Someworksheet").Range("A1:A10")
For varHeader in rngHeaders
subMoveColumn(varHeader)
Next
Это не готовое решение, но я надеюсь, что оно поможет.