Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Транспонировать из горизонтали в вертикаль. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Транспонировать из горизонтали в вертикаль.
Mark1976 Дата: Четверг, 20.08.2026, 07:57 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Здравствуйте. Подскажите решение, как быстро (формула, макрос) транспонировать текст из горизонтали в вертикаль? Результат на листе "так надо". Заранее спасибо.
К сообщению приложен файл: gruppa_ksg_tn_mnn.xlsx (12.7 Kb)
 
Ответить
СообщениеЗдравствуйте. Подскажите решение, как быстро (формула, макрос) транспонировать текст из горизонтали в вертикаль? Результат на листе "так надо". Заранее спасибо.

Автор - Mark1976
Дата добавления - 20.08.2026 в 07:57
Nic70y Дата: Четверг, 20.08.2026, 09:16 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9281
Репутация: 2503 ±
Замечаний: 0% ±

Excel 2010
такой вариант
[vba]
Код
Sub u_736()
    Application.ScreenUpdating = False
    '..................................................................................
    aa = 5                    'левый столбец ТН
    ab = Cells(1, Columns.Count).End(xlToLeft).Column   'правый столбец ТН
    ba = 2                    'верхняя строка МНН
    bb = Cells(Rows.Count, "b").End(xlUp).Row           'нижняя строка МНН
    ca = "Рез"                    'имя листа выгрузки результата
    '..................................................................................
    For ea = ba To bb
        eb = Sheets(ca).Cells(Rows.Count, "b").End(xlUp).Row + 1 'строка вставки
        Range("b" & ea).Copy Sheets(ca).Range("a" & eb) '
        Range(Cells(ea, aa), Cells(ea, ab)).Copy
        Sheets(ca).Range("b" & eb).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Next
    Application.CutCopyMode = False
End Sub
[/vba]
К сообщению приложен файл: 18.xlsm (23.7 Kb)
 
Ответить
Сообщениетакой вариант
[vba]
Код
Sub u_736()
    Application.ScreenUpdating = False
    '..................................................................................
    aa = 5                    'левый столбец ТН
    ab = Cells(1, Columns.Count).End(xlToLeft).Column   'правый столбец ТН
    ba = 2                    'верхняя строка МНН
    bb = Cells(Rows.Count, "b").End(xlUp).Row           'нижняя строка МНН
    ca = "Рез"                    'имя листа выгрузки результата
    '..................................................................................
    For ea = ba To bb
        eb = Sheets(ca).Cells(Rows.Count, "b").End(xlUp).Row + 1 'строка вставки
        Range("b" & ea).Copy Sheets(ca).Range("a" & eb) '
        Range(Cells(ea, aa), Cells(ea, ab)).Copy
        Sheets(ca).Range("b" & eb).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Next
    Application.CutCopyMode = False
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 20.08.2026 в 09:16
Mark1976 Дата: Четверг, 20.08.2026, 09:25 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Nic70y, здравствуйте. Спасибо за ответ. Макрос отработал всего по 2-м наименованиям МНН, у меня их 12 в файле. В других файлах другое количество.
 
Ответить
СообщениеNic70y, здравствуйте. Спасибо за ответ. Макрос отработал всего по 2-м наименованиям МНН, у меня их 12 в файле. В других файлах другое количество.

Автор - Mark1976
Дата добавления - 20.08.2026 в 09:25
Nic70y Дата: Четверг, 20.08.2026, 09:47 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 9281
Репутация: 2503 ±
Замечаний: 0% ±

Excel 2010
Mark1976, у меня нормально работает...
 
Ответить
СообщениеMark1976, у меня нормально работает...

Автор - Nic70y
Дата добавления - 20.08.2026 в 09:47
Mark1976 Дата: Четверг, 20.08.2026, 09:57 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Nic70y, вот что у меня в файле после нажатия кнопки.
К сообщению приложен файл: 18_1.xlsm (24.5 Kb)
 
Ответить
СообщениеNic70y, вот что у меня в файле после нажатия кнопки.

Автор - Mark1976
Дата добавления - 20.08.2026 в 09:57
Mark1976 Дата: Четверг, 20.08.2026, 10:00 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Nic70y, после нажатия кнопки второй раз. ТН не корректно перенесены.
 
Ответить
СообщениеNic70y, после нажатия кнопки второй раз. ТН не корректно перенесены.

Автор - Mark1976
Дата добавления - 20.08.2026 в 10:00
Mark1976 Дата: Четверг, 20.08.2026, 10:02 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Nic70y, к этим МНН у меня нет ТН на листе Рез.
Бевацизумаб + темозоломид
Дегареликс + олапариб
Бусерелин + олапариб
Гозерелин + олапариб
Лейпрорелин + олапариб
Лейпрорелин + олапариб
Ленватиниб + пембролизумаб
Капецитабин + ниволумаб + оксалиплатин
Олапариб + трипторелин
Кабозантиниб + ниволумаб
 
Ответить
СообщениеNic70y, к этим МНН у меня нет ТН на листе Рез.
Бевацизумаб + темозоломид
Дегареликс + олапариб
Бусерелин + олапариб
Гозерелин + олапариб
Лейпрорелин + олапариб
Лейпрорелин + олапариб
Ленватиниб + пембролизумаб
Капецитабин + ниволумаб + оксалиплатин
Олапариб + трипторелин
Кабозантиниб + ниволумаб

Автор - Mark1976
Дата добавления - 20.08.2026 в 10:02
Nic70y Дата: Четверг, 20.08.2026, 10:44 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 9281
Репутация: 2503 ±
Замечаний: 0% ±

Excel 2010
второй раз
ну это исправимо[vba]
Код
Sheets(ca).Columns("a:b").Clear
[/vba]
у меня нет ТН на листе Рез.
я не знаю причину,
в файле результат
К сообщению приложен файл: 21.xlsm (26.6 Kb)
 
Ответить
Сообщение
второй раз
ну это исправимо[vba]
Код
Sheets(ca).Columns("a:b").Clear
[/vba]
у меня нет ТН на листе Рез.
я не знаю причину,
в файле результат

Автор - Nic70y
Дата добавления - 20.08.2026 в 10:44
Mark1976 Дата: Четверг, 20.08.2026, 10:55 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Может я что то не понимаю. Но у меня макрос отработал только 2 МНН (Паклитаксел + рамуцирумаб, Пембролизумаб) Паклитаксел такого МНН нет в исходной таблице.
К сообщению приложен файл: 0501670.jpg (34.3 Kb)
 
Ответить
СообщениеМожет я что то не понимаю. Но у меня макрос отработал только 2 МНН (Паклитаксел + рамуцирумаб, Пембролизумаб) Паклитаксел такого МНН нет в исходной таблице.

Автор - Mark1976
Дата добавления - 20.08.2026 в 10:55
Nic70y Дата: Четверг, 20.08.2026, 11:16 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 9281
Репутация: 2503 ±
Замечаний: 0% ±

Excel 2010
вариант формулами
К сообщению приложен файл: 22.xlsx (24.7 Kb)
 
Ответить
Сообщениевариант формулами

Автор - Nic70y
Дата добавления - 20.08.2026 в 11:16
i691198 Дата: Четверг, 20.08.2026, 11:52 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 488
Репутация: 150 ±
Замечаний: 0% ±

2016
Здравствуйте. Еще вариант макросом.
К сообщению приложен файл: sample24.xlsm (22.7 Kb)
 
Ответить
СообщениеЗдравствуйте. Еще вариант макросом.

Автор - i691198
Дата добавления - 20.08.2026 в 11:52
Mark1976 Дата: Четверг, 20.08.2026, 12:28 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Nic70y, спасибо.
 
Ответить
СообщениеNic70y, спасибо.

Автор - Mark1976
Дата добавления - 20.08.2026 в 12:28
Mark1976 Дата: Четверг, 20.08.2026, 12:28 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
i691198, спасибо. Макрос отработал по всем строкам.
 
Ответить
Сообщениеi691198, спасибо. Макрос отработал по всем строкам.

Автор - Mark1976
Дата добавления - 20.08.2026 в 12:28
Mark1976 Дата: Пятница, 21.08.2026, 07:43 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Разобрался, в чем проблема была. У первой строки не было ТН, поэтому ее и не была в результатах.


Сообщение отредактировал Mark1976 - Пятница, 21.08.2026, 07:51
 
Ответить
СообщениеРазобрался, в чем проблема была. У первой строки не было ТН, поэтому ее и не была в результатах.

Автор - Mark1976
Дата добавления - 21.08.2026 в 07:43
Mark1976 Дата: Пятница, 21.08.2026, 08:05 | Сообщение № 15
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Здравствуйте. При работе выяснил, что не все ТН перенеслись. В примере я выделил их красным цветом. У этого МНН Иринотекан + кальция фолинат + рамуцирумаб + фторурацил 70 ТН, а перенеслось 46 ТН.
К сообщению приложен файл: 4387498.xlsm (20.9 Kb)


Сообщение отредактировал Mark1976 - Пятница, 21.08.2026, 08:09
 
Ответить
СообщениеЗдравствуйте. При работе выяснил, что не все ТН перенеслись. В примере я выделил их красным цветом. У этого МНН Иринотекан + кальция фолинат + рамуцирумаб + фторурацил 70 ТН, а перенеслось 46 ТН.

Автор - Mark1976
Дата добавления - 21.08.2026 в 08:05
i691198 Дата: Пятница, 21.08.2026, 10:08 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 488
Репутация: 150 ±
Замечаний: 0% ±

2016
Здравствуйте. Дело в том, что макрос формирует данные просматривая строку пока не дойдет до первой пустой ячейки, а у вас в ячейке AY5 пусто, хотя правее опять имеются данные Исправить можно так, найдите в макросе строки
[vba]
Код
Else
        'k = k + 1
        Exit For
[/vba]
и удалите или закомментируйте их.
 
Ответить
СообщениеЗдравствуйте. Дело в том, что макрос формирует данные просматривая строку пока не дойдет до первой пустой ячейки, а у вас в ячейке AY5 пусто, хотя правее опять имеются данные Исправить можно так, найдите в макросе строки
[vba]
Код
Else
        'k = k + 1
        Exit For
[/vba]
и удалите или закомментируйте их.

Автор - i691198
Дата добавления - 21.08.2026 в 10:08
Mark1976 Дата: Пятница, 21.08.2026, 11:28 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
i691198, спасибо за внесение изменений в макрос. Теперь перенеслись все 70 наименований ТН.
 
Ответить
Сообщениеi691198, спасибо за внесение изменений в макрос. Теперь перенеслись все 70 наименований ТН.

Автор - Mark1976
Дата добавления - 21.08.2026 в 11:28
msi2102 Дата: Пятница, 21.08.2026, 11:33 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 475
Репутация: 141 ±
Замечаний: 0% ±

Excel 2019
VМожно еще через PQ
Натыканный вариант:
[vba]
Код
let
    путь = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]{0}[Путь],
    лист = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]{0}[Лист],
    Источник = Excel.Workbook(File.Contents(путь), null, true),
    Лист1_Sheet = Источник{[Item=лист,Kind="Sheet"]}[Data],
    #"Повышенные заголовки" = Table.PromoteHeaders(Лист1_Sheet, [PromoteAllScalars=true]),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Повышенные заголовки",{"Код схемы", "Наименование и описание схемы ", "КСГ"}),
    #"Другие столбцы с отмененным свертыванием" = Table.UnpivotOtherColumns(#"Удаленные столбцы", {"МНН"}, "Атрибут", "Значение"),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Другие столбцы с отмененным свертыванием",{"Атрибут"})
in
    #"Удаленные столбцы1"
[/vba]
К сообщению приложен файл: 0310648.xlsx (27.5 Kb)


Сообщение отредактировал msi2102 - Пятница, 21.08.2026, 12:06
 
Ответить
СообщениеVМожно еще через PQ
Натыканный вариант:
[vba]
Код
let
    путь = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]{0}[Путь],
    лист = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]{0}[Лист],
    Источник = Excel.Workbook(File.Contents(путь), null, true),
    Лист1_Sheet = Источник{[Item=лист,Kind="Sheet"]}[Data],
    #"Повышенные заголовки" = Table.PromoteHeaders(Лист1_Sheet, [PromoteAllScalars=true]),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Повышенные заголовки",{"Код схемы", "Наименование и описание схемы ", "КСГ"}),
    #"Другие столбцы с отмененным свертыванием" = Table.UnpivotOtherColumns(#"Удаленные столбцы", {"МНН"}, "Атрибут", "Значение"),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Другие столбцы с отмененным свертыванием",{"Атрибут"})
in
    #"Удаленные столбцы1"
[/vba]

Автор - msi2102
Дата добавления - 21.08.2026 в 11:33
Mark1976 Дата: Пятница, 21.08.2026, 15:55 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 870
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
msi2102, спасибо.
 
Ответить
Сообщениеmsi2102, спасибо.

Автор - Mark1976
Дата добавления - 21.08.2026 в 15:55
Aлeкceй Дата: Пятница, 21.08.2026, 16:02 | Сообщение № 20
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
если еще актуально, попробуйте мой макрос
[vba]
Код

Sub transpNew()

  Dim sh As Worksheet
  Dim iCols As Integer, iRows As Integer
  Dim aValues As Variant, aRep() As Variant
  Dim i As Integer, j As Integer, iCurr As Integer, sKey As String
  
  iCurr = 1
  sKey = ""
  Set sh = ThisWorkbook.Worksheets("Лист1")

  iCols = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            LookIn:=xlFormulas, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Column
                            
  iRows = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            LookIn:=xlFormulas, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
  sh.Select
  aValues = sh.Range(sh.Cells(1, 1), sh.Cells(iRows, iCols)).Value
  ReDim aRep(1 To iRows * iCols, 1 To 2)
  For i = LBound(aValues) + 1 To UBound(aValues)
    sKey = aValues(i, 2)
    For j = 5 To UBound(aValues, 2)
      If Not IsEmpty(aValues(i, j)) Then
        aRep(iCurr, 1) = sKey
        aRep(iCurr, 2) = aValues(i, j)
        sKey = ""
        iCurr = iCurr + 1
      End If
    Next j
  Next i
  ReDim aValues(0 To iCurr - 1, 1 To 2)
  aValues(0, 1) = "MHH"
  aValues(0, 2) = "TH"
  For i = LBound(aValues) + 1 To UBound(aValues)
    aValues(i, 1) = aRep(i, 1)
    aValues(i, 2) = aRep(i, 2)
  Next i
  With ThisWorkbook.Worksheets("Результат")
    .UsedRange.Clear
    .Range("A1").Resize(UBound(aValues, 1), UBound(aValues, 2)).Value = aValues
    .Select
  End With
  
End Sub
[/vba]
К сообщению приложен файл: 1459928.xlsm (25.1 Kb)
 
Ответить
Сообщениеесли еще актуально, попробуйте мой макрос
[vba]
Код

Sub transpNew()

  Dim sh As Worksheet
  Dim iCols As Integer, iRows As Integer
  Dim aValues As Variant, aRep() As Variant
  Dim i As Integer, j As Integer, iCurr As Integer, sKey As String
  
  iCurr = 1
  sKey = ""
  Set sh = ThisWorkbook.Worksheets("Лист1")

  iCols = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            LookIn:=xlFormulas, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Column
                            
  iRows = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            LookIn:=xlFormulas, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
  sh.Select
  aValues = sh.Range(sh.Cells(1, 1), sh.Cells(iRows, iCols)).Value
  ReDim aRep(1 To iRows * iCols, 1 To 2)
  For i = LBound(aValues) + 1 To UBound(aValues)
    sKey = aValues(i, 2)
    For j = 5 To UBound(aValues, 2)
      If Not IsEmpty(aValues(i, j)) Then
        aRep(iCurr, 1) = sKey
        aRep(iCurr, 2) = aValues(i, j)
        sKey = ""
        iCurr = iCurr + 1
      End If
    Next j
  Next i
  ReDim aValues(0 To iCurr - 1, 1 To 2)
  aValues(0, 1) = "MHH"
  aValues(0, 2) = "TH"
  For i = LBound(aValues) + 1 To UBound(aValues)
    aValues(i, 1) = aRep(i, 1)
    aValues(i, 2) = aRep(i, 2)
  Next i
  With ThisWorkbook.Worksheets("Результат")
    .UsedRange.Clear
    .Range("A1").Resize(UBound(aValues, 1), UBound(aValues, 2)).Value = aValues
    .Select
  End With
  
End Sub
[/vba]

Автор - Aлeкceй
Дата добавления - 21.08.2026 в 16:02
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!