PDA

Показать полную графическую версию : преобразование таблиц.


Elizavetta
18-04-2016, 01:10
И снова здравствуйте, возникла потребность в помощи в облегчении себе задачи, а именно таблички, привести к одному формату.
Вот файл.
Там у нескольких групп, в разное время мерилось N-Количество переменных.
Например, в этом примере 4 группы и 3 измерения
вот первая группа рис.1
т.е. всегда есть группа -фон, а остальные временные интервалы могут по разному называться 4, или 4 сутки, 22 сутки и так далее. Сколько угодно измерений.
если у нас 4 группы и 3 измерения с фоном, итого 12 таблиц, ну в этом примере.
Таблички на рисунке 1 несут чисто статистическую информацию. Также в таблице гема. есть описательные статистки для каждой группы и каждого измерения.
Таким образом нужен макрос которые соответствующие описательные статистки будет прикреплять к основным таблицам.
Например. Программа видит. так гр=1
Rank Sum - фон Rank Sum - 4 сутки
пошла искать данные по описательным статистикам для фона и 4 суток первой группы и соединять с соответствующей строкой. Для наглядности
это выглядеть должно так:
фон для группы 1 это начинается с ячейки P70, а графа 4 сутки для первой группы начинаются ячейка P34

после соединения это должно выглядеть как на рис.3


очень важный ориентир , что в таблице с описательными статистиками может не быть слово сутки
например
Ячейка O101 гр = 2,00, время = 42, но программа то просканировала, что есть таблица ,гр=2 Rank Sum - фон Rank Sum - 42 сутки, это ячейки C и D53
и должна увидеть ключевые зацепки гр = 2,00, время = 42 и Rank Sum - фон Rank Sum - 42 сутки значит эта табличка с описательными статистиками относится именно к таблице гр = 2,00, время = 42

у меня есть файлы, где например гр = 2,00, время = 42 и Rank Sum - фон Rank Sum - 42нед , а описательные статистики гр = 2,00, время = 42не

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

a_axe
26-04-2016, 16:58
в этом примере 4 группы и 3 измерения »
Elizavetta, я вижу 4 группы и 4 измерения
и соединять с соответствующей строкой »
"Соответствующая" - это какая? Что подразумевается под словом "соединять"?

Если я правильно понял пример - код должен быть вроде такого (запустите при активной странице с исходными данными). Если нет - приложите файл с листом-результатом работы кода, листом с правильным результатом выполненным вручную и дайте комментарии по несоответствию результатов. Код привязан к строчкам "Rank Sum - ", "гр = X,00, время = XX сутки" и "Описательные статистики", если этих фраз в файле не будет, или будут находится в произвольных местах - код нужно будет адаптировать.

Public Sub weres()
Dim myCell As Range, DataRange As Range, fRange As Range
Dim dataSht As Worksheet, targetSht As Worksheet
Dim j As Long
Dim strT1 As String, strT2 As String, strT3 As String

Set dataSht = ActiveSheet
Set targetSht = ActiveWorkbook.Worksheets.Add
Set DataRange = dataSht.UsedRange

For Each myCell In Intersect(DataRange, dataSht.Columns(3))
If myCell.Text Like "Rank Sum - *" And myCell.Offset(0, 1).Text Like "Rank Sum - *" Then
j = targetSht.UsedRange.Row + targetSht.UsedRange.Rows.Count + 1
strT1 = Replace(myCell.Text, "Rank Sum - ", "")
If strT1 Like "* *" Then strT1 = Left(strT1, InStr(strT1, " "))
strT2 = Replace(myCell.Offset(0, 1).Text, "Rank Sum - ", "")
If strT2 Like "* *" Then strT2 = Left(strT2, InStr(strT2, " "))
strT3 = myCell.Offset(-1, -1).Value
strT3 = Replace(Left(strT3, InStr(strT3, " ") - 1), "=", " = ")


myCell.Offset(-1, -1).Copy targetSht.Cells(j, 2)
Range(targetSht.Cells(j, 2), targetSht.Cells(j, 18)).Merge

myCell.Offset(0, 2).Resize(4, 8).Copy targetSht.Cells(j + 1, 11)
myCell.Offset(1, -1).Resize(3, 1).Copy targetSht.Cells(j + 2, 2)
targetSht.Cells(j + 2, 3).Resize(3, 1).Value = strT1
myCell.Offset(1, -1).Resize(3, 1).Copy targetSht.Cells(j + 5, 2)
targetSht.Cells(j + 5, 3).Resize(3, 1).Value = strT2

Set fRange = dataSht.Cells.Find(strT3 & ",00, время = " & strT1)
If Not (fRange.Offset(2, 0).Text Like "Описательные статистики*") Then
Set fRange = dataSht.Cells.FindNext(After:=fRange)
End If
fRange.Offset(3, 1).Resize(1, 7).Copy targetSht.Cells(j + 1, 4)
fRange.Offset(4, 5).Resize(1, 2).Copy targetSht.Cells(j + 1, 8)
fRange.Offset(5, 1).Resize(3, 7).Copy targetSht.Cells(j + 2, 4)
Set fRange = dataSht.Cells.Find(strT3 & ",00, время = " & strT2)
If Not (fRange.Offset(2, 0).Text Like "Описательные статистики*") Then
Set fRange = dataSht.Cells.FindNext(After:=fRange)
End If
fRange.Offset(5, 1).Resize(3, 7).Copy targetSht.Cells(j + 5, 4)

End If
Next myCell

Set DataRange = Nothing
Set dataSht = Nothing
Set targetSht = Nothing
Set fRange = Nothing
End Sub




© OSzone.net 2001-2012