Помощь VBA необходима. пытаясь выбрать диапазон ячеек, вырезать, перемещать и вставлять - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть электронная таблица, которая обновляется еженедельно.Что мне нужно сделать, это вырезать из клеток и вставить в новое место.Я никогда раньше не использовал макросы или VBA, но меня раздражает количество времени, которое я трачу на это.Я знаю, что могу использовать макрос, но не знаю, как его написать.

Я пытаюсь переместить название отеля и прибегнуть к левому названию пассажира

R81C00CHALET LE VALENTIN SAUZE D'OULX

MR HAYHOE 8

MR GLOVER 2

Это повторяется по всей таблице.Количество строк между именами зависит от информации, приведенной далее в таблице.

546L
_ __ _ __ _ ___ 1 ИНФОРМАЦИЯ О КУРОРТЕ
__ _ __ _ __ _ _ 5 SKI / S.BOARD CARRIAGE
__ _ __ _ __ _ _8 AD L /P BRN BF 31/12/99

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

заранее спасибо за любую помощь, пожалуйста, дайте мне знать, если я не объяснил это четко.

1 Ответ

0 голосов
/ 08 февраля 2011

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

find the next hotel/resort combination
  find each passenger for that hotel/resort
    add in the details for the other attributes
  move on to the next passenger
move on to the next hotel/resort

Если мы начнем с поиска комбинации отель / курорт и предположим, что этона листе 1 в столбце A в отдельной ячейке, а в столбце A ничего больше нет, тогда нам понадобится этот макрос:

Option Explicit

Sub main()

Dim lngCurrRow As Long
Dim lngMaxRow As Long

With ThisWorkbook.Worksheets("Sheet1")
    lngMaxRow = .UsedRange.Rows.Count

    For lngCurrRow = 1 To lngMaxRow
        If (.Cells(lngCurrRow, 1).Value <> "") Then
            MsgBox .Cells(lngCurrRow, 1).Value
        End If
    Next lngCurrRow
End With

End Sub

При этом должно появиться окно сообщения с названием каждого отеля / курорта по очереди..

Все, что делает код, это определяет количество используемых строк на листе (и сохраняет их в lngMaxRow), а затем обрабатывает каждую использованную строку (используя lngCurrRow, чтобы отслеживать, какая строкамы проверяем значение ячейки в столбце A в этой строке (часть .Cells(lngCurrRow, 1).Value).Если в этой ячейке что-то есть ((<> "" часть), тогда она отображает значение этой ячейки.

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

...