Вставьте дополнительную строку, когда мистер и миссис будут найдены, затем скопируйте данные в пустую строку

Итак, у меня есть данные, которые выглядят так:

ИмяЗаголовокПриветствие
ДоуМистер Джей и миссис ЭДжон и Элейн
СмитМистер К и миссис МКен и Маргарет
ДжонсМистер РБоб

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

ИмяЗаголовокПриветствие
ДоуМистер Дж.Джон
Доумиссис ЭЭлейн
СмитМистер ККен
Смитмиссис мМаргарет
ДжонсМистер РБоб

Пожалуйста, может кто-нибудь помочь с кодом, чтобы сделать это?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приведенное ниже решение закодировано для ваших трех столбцов, которые должны находиться в столбцах A, B и C. Этот цикл работает снизу ваших данных, чтобы упростить работу со вставленной строкой.

Sub split_rows()
    Dim s As Worksheet
    Dim r As Long
    Dim title_position As Integer
    Dim saluation_position As Integer
    Dim title As String
    Dim salutation As String
    Dim last_row As Long
    
    Const name_column = 1
    Const title_column = 2
    Const salutation_column = 3
    
    
    Set s = ActiveSheet 'use the line to process the active sheet
    'set s = worksheets("Sheet1") ' use this line to process a specific sheet
    
    ' this loop works from the bottom of the worksheet up.
    ' the code is simpler that working top-down.
    last_row = s.Cells(s.Rows.Count, title_column).End(xlUp).Row
    For r = last_row To 2 Step -1
        Debug.Print s.Cells(r, 1).Value
        title_position = InStr(1, s.Cells(r, title_column).Value, "&")
        saluation_position = InStr(1, s.Cells(r, salutation_column).Value, "&")
          
        If title_position > 0 And saluation_position > 0 Then
            ' found ampersands in title and salution, let's to split the data
            
            'put joint title and salutation values in variables to make the code easier to read
            title = s.Cells(r, title_column).Value
            salutation = s.Cells(r, salutation_column).Value
            
            s.Rows(r).Insert  ' add a row
            
            ' put the the name (unchanged) in the new row
            s.Cells(r, name_column).Value = s.Cells(r + 1, name_column).Value
            
            ' put half the title in each row
            s.Cells(r, title_column).Value = Trim(Split(title, "&")(0))
            s.Cells(r + 1, title_column).Value = Trim(Split(title, "&")(1))
            
            ' put half the salutation in each row
            s.Cells(r, salutation_column).Value = Trim(Split(salutation, "&")(0))
            s.Cells(r + 1, salutation_column).Value = Trim(Split(salutation, "&")(1))
      End If
    Next


End Sub

Спасибо, Гоув, это круто! Только одна маленькая вещь, у меня есть несколько имен в столбце «Имя», где фамилии пары не совпадают, например, мистер Смит и мисс Доу. Они не были подобраны с вашим кодом, нужна ли небольшая настройка, пожалуйста?

Sophie McLoughlin 17.03.2022 11:19

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

Sophie McLoughlin 17.03.2022 11:26

@SophieMcLoughlin, я рад, что это работает для вас до сих пор. Идея заключалась в том, чтобы дать вам код, с которого можно было бы начать. Stack Overflow — это место, где программисты помогают другим программистам — даже тем, кто только начинает. Это зависит от вас, чтобы работать с этим началом, чтобы удовлетворить ваши конкретные потребности. Если этот код помог вам начать работу, было бы уместно отметить его как выбранный ответ.

Gove 17.03.2022 12:44

Понятно - спасибо за помощь Gove

Sophie McLoughlin 17.03.2022 14:10

@SophieMcLoughlin, днем ​​я профессор, преподающий VBA новичкам. Я бесплатно размещал видео своих лекций в Интернете. Это может быть хорошим ресурсом, когда вы начинаете в этом пространстве. vba-course.blogspot.com

Gove 17.03.2022 19:23

Другие вопросы по теме