2015-08-25 3 views
1

Я попытался выбрать один диапазон в Excel, первый столбец которого заполнен непрерывными данными (10-20 строк), а в диапазоне могут быть пустые ячейки. Я записал один макрос, но когда я запускаю его, он не работает.Выберите диапазон «не работает»

Где ошибка?

'Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select` 
+2

Может быть, что разработка «* не работает * «в данном случае означает именно это. – displayname

+0

второй выбор.Еnd (xlToRight). Выбор не сделал проход справа. Может быть, потому, что существует одна пустая ячейка. – sisty

+1

Вы должны добавить это к вашему вопросу ^^ Вы также можете обратиться к людям, написав '@' например. @stefanfalk, который отправляет уведомление пользователю, с которым вы хотите поговорить. – displayname

ответ

0

В таблице были пустые ячейки в C2, E2

'Sub Macro2()

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
Dim currentRowValue As String 

Sheets("Sheet2").Select 
Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select -Select first Column until exists data 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select -Did not make step over C2 (empty cell) 
Range(Selection, Selection.End(xlToRight)).Select 

Selection.Copy 
Sheets("Sheet3").Select 
Range("A1").Select 


sourceCol = 1 
rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    For currentRow = 1 To rowCount + 1 
    currentRowValue = Cells(currentRow, sourceCol).Value 
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
     Cells(currentRow, sourceCol).Select 
    End If 
Next 

ActiveSheet.Paste 
Sheets("Sheet2").Select 
Range("A2:A100").Select 
Application.CutCopyMode = False 
Selection.ClearContents 
Range("C2:C100").Select 
Selection.ClearContents 
ActiveWorkbook.Save 
Range("A2").Select 
End Sub' 
+0

Количество '.select' заставляет меня очень нервничать! – BruceWayne

+0

Я заполнил пустые ячейки некоторой информацией. Таким образом, скрипт работает. Спасибо за все. – sisty

0

Вы могли бы попробовать что-то вроде этого (вы можете изменять это немного)

Cells(ActiveCell.Row, 1000).Select 
Selection.End(xlToLeft).Select 
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column)).Select 
Range(Selection, Selection.End(xlDown)).Select 

Вместо того, чтобы пытаться продолжать идти через, пока вы не попали в окончательный кювету - это начинается в 1000 колонок справа выбирает диапазон от столбца один к последнему заполненному (независимо от пробелов)

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

Вы можете, однако, адаптировать код, сделать то же самое для строк.

+0

Например, у меня был диапазон «A2: F8». – sisty

+0

Я немного смущен.Что не работает в частности? Если вы хотите, чтобы выбрать диапазон A2-F8, то это так же просто, как: Range («A2: F8»). Выберите Идея в том, что она игнорирует пробелы при динамическом выборе, но я только сделал это справа для вас - с довольно большой подсказкой о том, как это сделать, а также – Trum

+0

Я не знаю количество строк _ (в моем примере - 8) _, которые будут выбраны с помощью «Диапазон (выбор) , Selection.End (xlDown)). Выберите ', но после этого выбора я хочу выбрать все, пока столбец F. – sisty

1

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

Кажется, что вы хотите, чтобы Excel был эквивалент CTRL + Shift + Вниз, Вправо, Вправо, Вправо. То, что на самом деле делает код, это Ctrl + [клавиша со стрелкой], затем развернуть исходный выбор в эту новую ячейку. Microsoft сообщает нам, что CTRL + [ArrowKey] приближает нас к краю текущей области. В качестве иллюстрации:

Ctrl Right

Так, так как у вас есть выбранный диапазон вы будете только повторный выбор того же диапазона каждый раз!

Что может быть решением для вас использует последний столбец при попытке выбрать диапазоны, которые требуют призывающих .End(xlToRight) несколько раз:

'Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 

что эквивалентно нажатию CTRL + Shift + вниз, вправо, вправо ,Правильно.

Позвольте мне знать, если у вас есть больше проблем :)

+0

Это правда. Я хочу CTRL + Shift + Вниз, Вправо, Вправо, Вправо. Но код не выполняет второй правый, потому что следующая ячейка в первой строке пуста. Если вы делали это в Excel _CTRL + Shift + Вниз, Вправо, Вправо, Вправо._ он работает отлично – sisty

+0

@sisty Является ли код, который я предоставил, работающим? Если нет, добавьте явный пример того, что не работает в вашем вопросе. –

Смежные вопросы