Как удалить определенные столбцы с помощью VBA?

Я пытаюсь удалить несколько столбцов в VBA для Excel. Я скачал данные об аресте за наркотики из Центра статистического анализа Иллинойса. http://www.icjia.org/public/sac/index.cfm?metasection=forms&metapage=rawMetadata&k=170

Каждый из столбцов, которые я хочу удалить, находится на расстоянии 3 столбцов друг от друга.

Например:

Адамс, штат Иллинойс, округ Шампейн, штат ИллинойсПрогноз | процент | Процент погрешности | Оценить маржу | Оценка | Процент | Процент погрешности

D | E | F | G | H | I | J

Я просто хочу удалить все столбцы, например, процент погрешности

Вот мой макрос:

  Sub deleteCol () Columns ("H, J"). DeleteEnd Sub  

Я все время получаю сообщение об ошибке:

Время выполнения 13: несоответствие типов

Есть предложения?


Вы говорите, что хотите удалить любой столбец с заголовком «Процент погрешности», поэтому давайте попробуем сделать это динамическим, вместо того, чтобы напрямую именовать столбцы.

  Sub deleteCol () При ошибке Возобновить NextDim wbCurrent As WorkbookDim wsCurrent As WorksheetDim nLastCol, i As IntegerSet wbCurrent = ActiveWorkbookSet wsCurrent = wbCurrent.ActiveSheet'Эта следующая переменная получит номер самого последнего столбца с данными  в нем, поэтому мы можем использовать его в цикле laternLastCol = wsCurrent.Cells.Find ("*", LookIn: = xlValues, SearchOrder: = xlByColumns, SearchDirection: = xlPrevious) .Column'Этот цикл будет проходить через заголовки каждого столбца и  удалить  т.е. столбец, если заголовок содержит «процент погрешности» для i = nLastCol To 1 Шаг -1 Если InStr (1, wsCurrent.Cells (1, i) .Value, «процент погрешности», vbTextCompare)> 0 Тогда  wsCurrent.Columns (i) .Delete Shift: = xlShiftToLeft End IfNext iEnd Sub  

При этом вам не нужно беспокоиться о том, куда будут вставлены/импортированы ваши данные, если поскольку заголовки столбцов находятся в первой строке.

EDIT: И если ваши заголовки не в первой строке, это будет действительно простое изменение. В этой части кода: If InStr (1, wsCurrent.Cells (1, i) .Value, «Процент погрешности», vbTextCompare) измените «1» в Cells (1, i) в любую строку, в которой находятся ваши заголовки.

РЕДАКТИРОВАТЬ 2: изменен раздел кода For для учета для полностью пустых столбцов.


16

Вы были просто отсутствует вторая половина оператора столбца, в котором говорится об удалении всего столбца, поскольку большинство обычных диапазонов начинаются с буквы столбца, он искал номер и не получил его. «:» Получает весь столбец или строку.

Я думаю, что вы искали в своем диапазоне вот что:

  Range (  "C: C, F: F, I: I, L: L, O: O, R: R"). Удалить  

Просто измените буквы столбца в соответствии с вашими потребностями..

ответил 27 октября 2014 г., в 2:39
добавить комментарий |

Вам просто не хватало второй половины оператора столбца, сообщающего ему удалить весь столбец, поскольку большинство нормальных диапазонов начинаются с буквы столбца , он искал номер и не получил его. «:» Получает весь столбец или строку.

Я думаю, что вы искали в своем диапазоне вот что:

  Range (  "C: C, F: F, I: I, L: L, O: O, R: R"). Удалить  

Просто измените буквы столбца в соответствии с вашими потребностями. .


0

Ответить на вопрос Как удалить определенные столбцы в vba для excel. Я использую Array, как показано ниже.

  sub del_col () dim myarray as variantdim i as integermyarray = Array (10, 9, 8) 'Descending to  AscendingFor i = LBound (myarray) To UBound (myarray) ActiveSheet.Columns (myarray (i)). CompleteColumn.DeleteNext iend sub  

отредактировано 22 февраля ’19 в 16:30
ответил 19 февраля ’19 в 4:38
добавить комментарий |

Чтобы ответить на вопрос Как удалить определенные столбцы в vba для Excel. Я использую массив, как показано ниже.

   sub del_col () dim myarray as variantdim i as integermyarray = Array (10, 9, 8) 'По убыванию до AscendingFor i = LBound (myarray) To UBound (myarray) ActiveSheet.Columns (myarray (i)).  CompleteColumn.DeleteNext iend sub  


Необходимо удалить столбцы на основе заголовка столбца [Решено/Закрыто]

Здравствуйте,

Мне нужен макрос, который удалит столбцы из моего Excel на основе заголовка столбца.

Пример:

I есть столбцы,

Имя | Address1 | Address2 | Страна | Почтовый индекс |

Я хочу, чтобы на листе было только

Имя | Страна | Почтовый индекс

макрос должен удалить другие столбцы на основе поиска по заголовку столбца, то есть
, если там есть Address1, его необходимо удалить.

заранее спасибо за вашу помощь.


Если вы хотите использовать это и для других книг, вам нужно будет определить дополнительные диапазоны, например:

 Sub test () Set MR = Range ("A1: E1") Set MRB1 = Workbooks ("Book1"). Worksheets ("Sheet1"). Range ("A1  : E1 ") Для каждой ячейки в MR Если cell.Value =" Address1 "Или ячейка. Value = "Address2" Затем cell.EntireColumn.Delete NextFor Каждая ячейка в MRB1 Если cell.Value = "Address1" или cell.Value = "Address2" Затем cell.EntireColumn.Delete NextEnd Sub 

Примечание что «cell», «MR» (My Range) и «MRB1» (My Range Book 1) можно изменить на что угодно, чтобы сделать код более понятным/читаемым для вас.

С уважением ,
Trowa


Ответ 2/5
Сообщения
2686
Дата регистрации
Воскресенье, 12 сентября 2010 г.
Статус
Модератор
Последний визит
5 января 2021 г.

452

Привет, Yesare,

Попробуйте этот код:

 Sub test () Set MR =  Диапазон ("A1: E1") Для каждой ячейки в MR Если cell.Value = "Address1" или cell.Value = "Address2" Тогда cell.EntireColumn.Delete NextEnd Sub 

Обратите внимание, что если столбец B удален столбец C будет удален на место столбца B и не будет проверяться снова ред. Это означает, что вам, возможно, придется запускать код несколько раз.

С уважением,
Trowa

Отчет
Это НЕ работает, если я пытаюсь удалить несколько столбцов

Привет, Есаре,

Попробуйте этот код:

 Sub test () Set MR = Range ("A1: E1") Для каждой ячейки в MR Если cell.Value = "Address1" или cell.Value = "Address2" Затем cell.EntireColumn.Delete NextEnd Sub 

Обратите внимание, что если столбец B будет удален, столбец C будет удален на место столбца B и больше не будет проверяться. Это означает, что вам, возможно, придется запускать код несколько раз.

С уважением,
Trowa


Это НЕ работает, если я пытаюсь удалить несколько столбцов


Ответ 3/5
Есть ли способ обновить код, чтобы удаление продолжалось до тех пор, пока оно не будет выполнено ??

Есть ли способ обновить код, чтобы удаление продолжалось до тех пор, пока оно не будет выполнено ??


Ответ 4/5
спасибо за его работу .. не могли бы вы дать мне идею, как мы можем добиться этого для нескольких книг

спасибо за работу .. не могли бы вы дать мне идею, как мы можем достичь этого для нескольких книг


Ответ 5/5
Спасибо. Это работает, но мне нужно, чтобы заголовок оставался
Отчет
Я просто хочу, чтобы они зациклились. например, идентификатор вопроса * все, что находится после идентификатора, не имеет значения — просто удалите на основе идентификатора вопроса *

Спасибо. Это работает, но мне нужно, чтобы заголовок оставался


Я просто хочу, чтобы они зацикливались. например, идентификатор вопроса * все, что находится после идентификатора, не имеет значения — просто удалите на основе идентификатора вопроса *

Оцените статью
logicle.ru
Добавить комментарий