Member 12726897 Ответов: 1

Как передать один и тот же текст в указанное количество ячеек в столбце через VBA


Привет,

У меня есть свои данные, как показано ниже.

вход:

Название Loc_id
0 Илья
HYD001 Илья
0 Илья
0 Илья
Азбука.запрет
0 бан
0 бан
Рам Пуна
0 xyz
0 бан
Название Loc_id
0 Илья
HYD002 Илья
0 Илья
0 Илья
Азбука.запрет
0 бан
0 бан
Рам Пуна
0 xyz
0 бан

Мне нужно видеть данные в следующем формате

Required Op:
	
loc_id	name
HYD001	hyd
HYD001	hyd
HYD001	hyd
HYD001	hyd
HYD001	ban
HYD001	ban
HYD001	ban
HYD001	pune
HYD001	xyz
HYD001	ban
HYD002	hyd
HYD002	hyd
HYD002	hyd
HYD002	hyd
HYD002	ban
HYD002	ban
HYD002	ban
HYD002	pune
HYD002	xyz
HYD002	ban


заранее спасибо.

Что я уже пробовал:

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

Саб заменить()

Рабочие Листы ("Лист1").Столбцы ("а"). заменить _
Что:= "Abc. a", замена:= " HYD001", _
SearchOrder:=xlByColumns, MatchCase:=True

Конец Подводной Лодки

1 Ответов

Рейтинг:
1

Maciej Los

Проверить это: http://www.codeproject.com/Questions/1126932/How-to-delete-sub-header-columns-in-excel-VBA#answer2[^]

Основываясь на вышесказанном, вы смогли изменить код в соответствии с вашими потребностями:

Sub Cleaning3()
    Dim wsh As Worksheet
    Dim i As Integer ', idcounter As Integer
    'context
    Set wsh = ThisWorkbook.Worksheets(1)
    '
    'idcounter = 1
    'starting row
    i = 2
    'till cell in col. A is not empty
    Do While wsh.Range("A" & i) <> ""
        'if zero - get value from below cell
        If wsh.Range("A" & i) = 0 Then
            wsh.Range("A" & i) = wsh.Range("A" & i).Offset(RowOffset:=1)
        End If
        'if cell contains non-numeric value and it's not a "id" - get value from above cell
        If LCase(wsh.Range("A" & i)) <> "loc_id" And Not wsh.Range("A" & i) Like UCase(wsh.Range("B2")) & "*" Then
            wsh.Range("A" & i) = wsh.Range("A" & i).Offset(RowOffset:=-1)
        End If
        'if "id" - remove entire row
        If LCase(wsh.Range("A" & i)) = "loc_id" Then
            wsh.Range("A" & i).EntireRow.Delete xlShiftUp
            i = i - 1
        End If
        i = i + 1
    Loop
 
End Sub


Member 12726897

Спасибо Мацей Лос,

После выполнения вышеприведенного кода я получаю вывод, как показано ниже.

идентификационное имя
0 Илья
0 q
0 бан
0 бан
0 бан
0 Пуна
0 Илья
0 Илья
0 бан
0 бан
0 бан
0 Пуна
0 xyz

Не могли бы вы пожалуйста помочь мне.

Maciej Los

Всегда пожалуйста. Вы пробовали перейти на код в соответствии с вашими потребностями? Бьюсь об заклад - ты не понимаешь!

Member 12726897

Привет,

На самом деле я разработчик SQL (Reporting Sap BO, Tableau) Поэтому мне нужно сгенерировать отчет на основе транспонированных (преобразованных) данных. Я очень новичок в VBA, поэтому спрашивал вас снова и снова. В любом случае спасибо за вашу помощь ,и я постараюсь сам, я свяжусь с вами, если мне понадобится какая-либо помощь.

Maciej Los

Всегда пожалуйста.