shibashish mohanty Ответов: 2

Как написать макрос VBA-код для листа excel для создания отчета.


На самом деле у меня есть лист excel, что-то вроде этого.
Feature 	Epic	User Story	Task/Defect
F1			
	        EP1		
		             US11	
			                    T11
			                    D11
			                    D12
		             US12	
			                    T21
			                    T22
	        EP2		
		             US21	
			                    T21
			                    D21
			                    D22
		             US22	
			                    T3
			
F2                    			
	        EP4		
		              US1	
			                    T4


Но мне нужно написать код VBA, который даст вывод примерно так:
Feature 	Epic	User Story	Task/Defect
F1	         EP1	    US11	       T11
F1	         EP1	    US11	       D11
F1	         EP1	    US11	       D12
F1	         EP1	    US12	       T21
F1	         EP1	    US12	       T22
F1	         EP2	    US21	       T21
F1	         EP2	    US21	       D21
F1	         EP2	    US21	       D22
F1	         EP2	    US22	       T3
F2	         EP4	    US1	           T4



Пожалуйста, помогите мне. Заранее спасибо.

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

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

OriginalGriff

А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

[no name]

Я новичок в Macro VBA. Так что не могли бы вы мне помочь? Спасибо

OriginalGriff

Помочь тебе сделать что? Мы понятия не имеем, о чем вы говорите!
Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. И мы понятия не имеем, что вы пробовали, и где вам нужна помощь в этом.

[no name]

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

Richard MacCutchan

Вам просто нужно начать с верхней ячейки (например, F1), выбрать все пустые ячейки ниже и использовать "заполнить вниз". Используйте функцию записи макросов Excel для создания базового кода VBA.

[no name]

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

Richard MacCutchan

Вы можете сохранять макросы и использовать их в различных файлах электронных таблиц. Но это всегда предполагает, что формат данных остается неизменным. Вы можете найти довольно много сайтов, специализирующихся на программировании Excel, которые, вероятно, более подходят, чем CodeProject.

[no name]

Спасибо. Но раньше я находил очень полезные решения из проекта code. поэтому я написал здесь , но после получения ответа от OriginalGriff мне кажется, что фрилансер лучше всего подходит для разработчиков, которые немедленно нуждаются в помощи. Поэтому нам нужно кормить арахисом, чтобы получить обезьян.

Richard MacCutchan

Мне кажется, вы неправильно поняли его слова. Этот сайт здесь, чтобы помочь людям с кодом, который они написали, а не писать его для них. И это также в первую очередь для основных языков программирования (C, C++, C#, Java и т. д.), Тогда как VBA специфичен для приложений Microsoft Office - вот почему я предложил другие сайты.

2 Ответов

Рейтинг:
2

OriginalGriff

Это не совсем так работает.
Мы не делаем вашу работу за вас.
Если вы хотите, чтобы кто - то написал ваш код, вы должны заплатить- я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати копейки, получай обезьян.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.


[no name]

Я также опубликовал так много решений в проекте code, но сегодня я получил неожиданный ответ от вас. Это 4-5 строк кода для любых экспертов. Но если вы не знаете ответа, то, пожалуйста, не отвечайте. мне не нужна твоя помощь. я задал этот вопрос кому-то, кто является экспертом в коде VBA. Спасибо

Dave Kreskowiak

4 или 5 строк кода, говорит человек, который вообще не может написать код.

Вам не кажется, что решение 2-это "код из 4 или 5 строк"?

Я думаю, что у вас есть какие-то нелепые ожидания.

Рейтинг:
1

Maciej Los

Предположим, что данные хранятся в Столбцах A-D и начинаются со строки 2 (forst row = headers), проверьте это:

Option Explicit


Sub ExplodedDataToTable()
    Dim srcWsh As Worksheet
    Dim i As Long, r As Long

On Error GoTo Err_ExplodedDataToTable

    Set srcWsh = ThisWorkbook.Worksheets(1) 'you can pass the name of worksheet
    i = 2
    r = srcWsh.Range("D" & srcWsh.Rows.Count).End(xlUp).Row
    
    Do While i < r
        'remove empty row
        If srcWsh.Range("A" & i) = "" And srcWsh.Range("B" & i) = "" And _
            srcWsh.Range("C" & i) = "" And srcWsh.Range("D" & i) = "" Then
            srcWsh.Range("A" & i).EntireRow.Delete xlShiftUp
            r = r - 1
            i = i - 1
            GoTo SkipNext
        End If
        'A is not empty
        If srcWsh.Range("A" & i) <> "" And srcWsh.Range("B" & i) = "" And _
            srcWsh.Range("C" & i) = "" And srcWsh.Range("D" & i) = "" Then
            srcWsh.Range("B" & i & ":D" & i).Delete xlShiftUp
            r = r - 1
            i = i - 1
            GoTo SkipNext
        End If
        'A & B is not empty
        If srcWsh.Range("A" & i) <> "" And srcWsh.Range("B" & i) <> "" And _
            srcWsh.Range("C" & i) = "" And srcWsh.Range("D" & i) = "" Then
            srcWsh.Range("C" & i & ":D" & i).Delete xlShiftUp
            r = r - 1
            i = i - 1
            GoTo SkipNext
        End If
        'A, B & C is not empty
        If srcWsh.Range("A" & i) <> "" And srcWsh.Range("B" & i) <> "" And _
            srcWsh.Range("C" & i) <> "" And srcWsh.Range("D" & i) = "" Then
            srcWsh.Range("D" & i).Delete xlShiftUp
            r = r - 1
            i = i - 1
            GoTo SkipNext
        End If
        'A, B & C is empty, D is not empty
        If srcWsh.Range("A" & i) = "" And srcWsh.Range("B" & i) = "" And _
            srcWsh.Range("C" & i) = "" And srcWsh.Range("D" & i) <> "" Then
            srcWsh.Range("A" & i - 1 & ":C" & i - 1).Copy srcWsh.Range("A" & i)
            GoTo SkipNext
        End If
        'A, B is empty, C & D is not empty
        If srcWsh.Range("A" & i) = "" And srcWsh.Range("B" & i) = "" And _
            srcWsh.Range("C" & i) <> "" And srcWsh.Range("D" & i) <> "" Then
            srcWsh.Range("A" & i - 1 & ":B" & i - 1).Copy srcWsh.Range("A" & i)
            GoTo SkipNext
        End If
        'A, is empty, B, C & D is not empty
        If srcWsh.Range("A" & i) = "" And srcWsh.Range("B" & i) <> "" And _
            srcWsh.Range("C" & i) <> "" And srcWsh.Range("D" & i) <> "" Then
            srcWsh.Range("A" & i - 1).Copy srcWsh.Range("A" & i)
            GoTo SkipNext
        End If
        
SkipNext:
        i = i + 1
    Loop
    

Exit_ExplodedDataToTable:
    On Error Resume Next
    Set srcWsh = Nothing
    Exit Sub

Err_ExplodedDataToTable:
    MsgBox Err.Description, vbExclamation, Err.Number
    Resume Exit_ExplodedDataToTable

End Sub


phil.o

5 б
Есть ли какой-нибудь язык, о котором ты не знаешь, Мацей? Впечатляющая сумма навыков, имхо :)

Maciej Los

Да, их немного, например: ассемблер, Фортран... ;)

Спасибо, Фил.

Ваше здоровье!
Мацей