Добрый день Есть таблица (вложение). Пытаюсь макросом сделать правильную для формирования сводной. Где каждая группировка - отдельный столбец Но не получается что я делаю не так?
Код
Sub ConvertGroupedDataToTable()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long, j As Long
Dim groupLevel As Integer
Dim outputRow As Long
Dim outputColumn As Integer
Dim headers() As String
Dim headerCount As Integer
Dim currentHeaderValues() As Variant
' Укажите лист, содержащий сгруппированные данные
Set ws = ThisWorkbook.Sheets("Sheet1") ' Измените "Sheet1" на имя вашего листа
' Определите последнюю строку с данными
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
' Определите максимальный уровень группировки (предполагаем, что он равен кол-ву отступов)
groupLevel = 0
For i = 1 To lastRow
If ws.Cells(i, 1).IndentLevel > groupLevel Then
groupLevel = ws.Cells(i, 1).IndentLevel
End If
Next i
' Инициализация массивов
ReDim headers(1 To groupLevel + 1) ' +1 для колонки с товаром
ReDim currentHeaderValues(1 To groupLevel)
headerCount = groupLevel + 1
' Определите заголовки столбцов (названия уровней группировки)
For j = 1 To groupLevel
headers(j) = "Уровень " & j ' Можно изменить на что-то более осмысленное
Next j
headers(groupLevel + 1) = "Товар"
' Создайте заголовки в новом листе
Dim outputSheet As Worksheet
Set outputSheet = ThisWorkbook.Sheets.Add
outputSheet.Name = "Таблица для сводной"
For j = 1 To headerCount
outputSheet.Cells(1, j).Value = headers(j)
Next j
' Инициализируем номер строки для вывода
outputRow = 2
' Пройдитесь по каждой строке исходных данных
For i = 1 To lastRow
' Определите уровень группировки текущей строки
Dim currentLevel As Integer
currentLevel = ws.Cells(i, 1).IndentLevel
' Если это не строка с подсуммой/итогом
If Not ws.Cells(i, 1).Font.Bold Then
' Обновите значения заголовков для текущего уровня и выше
For j = 1 To currentLevel
currentHeaderValues(j) = ws.Cells(i, 1).Value
Next j
' Если текущий уровень - максимальный (т.е. это "Товар")
If currentLevel = groupLevel Then
' Запишите данные в выходной лист
For j = 1 To groupLevel
outputSheet.Cells(outputRow, j).Value = currentHeaderValues(j)
Next j
outputSheet.Cells(outputRow, groupLevel + 1).Value = ws.Cells(i, 1).Value ' Значение товара
' Переходим к следующей строке для вывода
outputRow = outputRow + 1
End If
End If
Next i
MsgBox "Преобразование завершено. Сводная таблица готова на листе '" & outputSheet.Name & "'."
End Sub
Добрый день. Есть макрос, который переносит данные из ячеек в WORD Но при переносе данных теряется жирность части текста. Как сделать, чтобы сохранить часть текста жирным, а часть нет (Как в ячейке) Макрос ниже
Код
' Делаем ФИО жирным в столбце C.
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
searchString = ThisWorkbook.Sheets(1).Cells(i, 1).Value ' ФИО из столбца А
'Определяем позицию начала ФИО в ячейке С
Dim startPos As Long
startPos = InStr(1, ThisWorkbook.Sheets(1).Cells(i, 3).Value, vbLf & searchString)
'Если ФИО обнаружено в ячейке С
If startPos > 0 Then
With ThisWorkbook.Sheets(1).Cells(i, 3).Characters(startPos, Len(searchString)).Font
.Bold = True
End With
End If
Next i
MsgBox "Обработка завершена."
MsgBox ("Это снова я - твой помощник и мы продолжаем" & vbCrLf & "Сейчас Вас система попросит выбрать файл Word, где хранится шаблон наклеек")
' Диалоговое окно для выбора файла шаблона Word
Dim wordFilePath As String
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Выберите файл шаблона Word"
.Filters.Clear
.Filters.Add "Word Documents", "*.doc"
.AllowMultiSelect = False
If .Show = -1 Then
wordFilePath = .SelectedItems(1)
Else
MsgBox "Файл не выбран. Макрос завершен."
Exit Sub
End If
End With
On Error Resume Next
Dim objWrdApp As Object
Set objWrdApp = GetObject(, "Word.Application")
If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application")
End If
On Error GoTo 0 ' Включить стандартную обработку ошибок обратно
objWrdApp.Visible = True
Dim objWrdDoc As Object
Set objWrdDoc = objWrdApp.Documents.Open(wordFilePath)
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
l = l + 1
' Обновление закладок в Word данными из Excel
With objWrdDoc
.Bookmarks("Bookmark_2").Range.Text = Cells(i, 3).Value
.Bookmarks("Bookmark_3").Range.Text = Cells(i + 1, 3).Value
.Bookmarks("Bookmark_4").Range.Text = Cells(i + 2, 3).Value
.Bookmarks("Bookmark_5").Range.Text = Cells(i + 3, 3).Value
.Bookmarks("Bookmark_6").Range.Text = Cells(i + 4, 3).Value
.Bookmarks("Bookmark_7").Range.Text = Cells(i + 5, 3).Value
.Bookmarks("Bookmark_8").Range.Text = Cells(i + 6, 3).Value
.Bookmarks("Bookmark_9").Range.Text = Cells(i + 7, 3).Value
.Bookmarks("Bookmark_10").Range.Text = Cells(i + 8, 3).Value
.Bookmarks("Bookmark_11").Range.Text = Cells(i + 9, 3).Value
.Bookmarks("Bookmark_12").Range.Text = Cells(i + 10, 3).Value
.Bookmarks("Bookmark_13").Range.Text = Cells(i + 11, 3).Value
.Bookmarks("Bookmark_14").Range.Text = Cells(i + 12, 3).Value
.Bookmarks("Bookmark_15").Range.Text = Cells(i + 13, 3).Value
.Bookmarks("Bookmark_16").Range.Text = Cells(i + 14, 3).Value
.Bookmarks("Bookmark_17").Range.Text = Cells(i + 15, 3).Value
End With
Добрый день как сделать, чтобы формула считала выполнение 2 условий одновременно. Первое считает количество пустых ячеек в диапазоне и второе условие количество удовлетворяющее диапазону и значению в ячейке. Я написал формулу, но она не работает =СЧЁТЕСЛИМН('2H2024'!E:E;Свод!B2;'2H2024'!S:V;"") В чем может быть ошибка? Спасибо
Есть макрос. Но при работе с Word жирность текста не переносится. Что нужно сделать, чтобы полностью формат ячеек (жирность) переносилось в Ворд
Код
' Очистка содержимого
Range("C2:C" & Cells(Rows.Count, "A").End(xlUp).Row).ClearContents
[C2].Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1, 1).FormulaR1C1 = _
"=RC[-2]&CHAR(10)&REPLACE(RC[-1],1,IFERROR(FIND("" ул."",RC[-1]),IFERROR(FIND("" пр-кт"",RC[-1]),IFERROR(FIND("" б-р"",RC[-1]),IFERROR(FIND("" пер"",RC[-1]),IFERROR(FIND("" наб."",RC[-1]),1))))),"""")&CHAR(10)&REPLACE(LEFT(RC[-1],FIND("","",RC[-1])-1),1,7,)&CHAR(10)&LEFT(RC[-1],6)"
' Преобразование формулы в значения
With Range("C2:C" & Cells(Rows.Count, "A").End(xlUp).Row)
.Value = .Value
End With
' Делаем ФИО жирным в столбце C.
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
searchString = ThisWorkbook.Sheets(1).Cells(i, 1).Value ' ФИО из столбца А
'Определяем позицию начала ФИО в ячейке С
Dim startPos As Long
startPos = InStr(1, ThisWorkbook.Sheets(1).Cells(i, 3).Value, searchString)
'Если ФИО обнаружено в ячейке С
If startPos > 0 Then
With ThisWorkbook.Sheets(1).Cells(i, 3).Characters(startPos, Len(searchString)).Font
.Bold = True
End With
End If
Next i
MsgBox "Обработка завершена."
MsgBox ("Это снова я - твой помощник и мы продолжаем" & vbCrLf & "Сейчас Вас система попросит выбрать файл Word, где хранится шаблон наклеек")
' Диалоговое окно для выбора файла шаблона Word
Dim wordFilePath As String
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Выберите файл шаблона Word"
.Filters.Clear
.Filters.Add "Word Documents", "*.doc"
.AllowMultiSelect = False
If .Show = -1 Then
wordFilePath = .SelectedItems(1)
Else
MsgBox "Файл не выбран. Макрос завершен."
Exit Sub
End If
End With
On Error Resume Next
Dim objWrdApp As Object
Set objWrdApp = GetObject(, "Word.Application")
If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application")
End If
On Error GoTo 0 ' Включить стандартную обработку ошибок обратно
objWrdApp.Visible = True
Dim objWrdDoc As Object
Set objWrdDoc = objWrdApp.Documents.Open(wordFilePath)
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
l = l + 1
' Обновление закладок в Word данными из Excel
With objWrdDoc
.Bookmarks("Bookmark_2").Range.Text = Cells(i, 3).Value
.Bookmarks("Bookmark_3").Range.Text = Cells(i + 1, 3).Value
.Bookmarks("Bookmark_4").Range.Text = Cells(i + 2, 3).Value
.Bookmarks("Bookmark_5").Range.Text = Cells(i + 3, 3).Value
.Bookmarks("Bookmark_6").Range.Text = Cells(i + 4, 3).Value
.Bookmarks("Bookmark_7").Range.Text = Cells(i + 5, 3).Value
.Bookmarks("Bookmark_8").Range.Text = Cells(i + 6, 3).Value
.Bookmarks("Bookmark_9").Range.Text = Cells(i + 7, 3).Value
.Bookmarks("Bookmark_10").Range.Text = Cells(i + 8, 3).Value
.Bookmarks("Bookmark_11").Range.Text = Cells(i + 9, 3).Value
.Bookmarks("Bookmark_12").Range.Text = Cells(i + 10, 3).Value
.Bookmarks("Bookmark_13").Range.Text = Cells(i + 11, 3).Value
.Bookmarks("Bookmark_14").Range.Text = Cells(i + 12, 3).Value
.Bookmarks("Bookmark_15").Range.Text = Cells(i + 13, 3).Value
.Bookmarks("Bookmark_16").Range.Text = Cells(i + 14, 3).Value
.Bookmarks("Bookmark_17").Range.Text = Cells(i + 15, 3).Value
End With
Добрый день Есть макрос, почему Word не реагирует и не сохраняет файл Doc2?
Код
Dim objWrdApp As Object
Dim objWrdDoc As Object
On Error Resume Next
Set objWrdApp = GetObject(, "Word.Application")
If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application")
Set objWrdDoc = objWrdApp.Documents.Open("C:\Users\Homecomputer\Desktop\Макрос\Doc1.docx")
objWrdApp.Visible = True
End If
Set objWrdDoc = objWrdApp.Documents.Open("C:\Users\Homecomputer\Desktop\Макрос\Doc1.docx")
Set objWrdDoc = Nothing
Set objWrdApp = Nothing
objWrdDoc.SaveAs "C:\Users\Homecomputer\Desktop\Макрос\Doc2.docx"
Добрый день Есть цикл от 1 до 1000 Как сделать, чтобы при каждом значении равном X выполнялось условие. Я так понимаю, что переменную в цикле делим на X и должно быть число без остатка. Как это можно оформить в цикле? Спасибо
Добрый день Посоветуйте как сделать Есть таблица со списком ФИО и адресов в Эксель, нужно переделать в формат для почты России в вордовский вариант правильно разложив адрес
Добрый день. Есть список магазинов с продажами по дням (выделено желтым) Первый непустой столбец - открытие магазина. Необходимо обработать таблицу так, чтобы сопоставить по дням количество продаж с момента открытия
Какие варианты могут мне помочь. Помогите, пожалуйста
Добрый день. В столбце A содержится информация о логинах В столбце B пароль В столбце С - адрес E-mail Как сделать, чтобы разослать всему списку логины и пароли вставляя в текст письма?
Добрый день Подскажите как лучше сделать. Нужно создать папку с именем из столбца 1(А) и сохранить в нее все картинки, которые находятся по ссылкам из ячеек
Добрый день. Нужна консультация. Есть 100 ячеек (A1:A100) в которых указаны url ссылки на картинки Как сделать, чтобы в каждой ячейке вместо url появилась картинка из ссылки?
Добрый день Как в Эксель показать в ячейке отрицательное время (формат время)? Делая разницу между ячейками, если положительное число, то все ок, а если отрицательное, то #### Как показать отрицательное время?
Добрый день. В ячейке указано рабочее время (например, "10:00-13:00; 14:00-18:00"). Как можно рассчитать общее количество часов? Т.е. в данном примере должно быть 7 часов
Добрый день Написал код, который перебирает строки и при наличии в ячейки значения "апельсины" - удаляет сроку Все работает, но очень медленно, так как строк более 500 тыс. Подскажите, пожалуйста, можно как-то ускорить быстродействие и применить другой код?
Код
iStrok = Sheets("1").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To iStrok
If Sheets("Отчет").Cells(i, 3) = "Апельсины" Then
Rows(i).Delete
i = i - 1
End If
Next i
Добрый день. Умею через VBA фиксировать имя компьютера, пользователя, но никак не могу найти команду, которая позволяла бы выводить "сведения о пользователе"
Подскажите, пожалуйста, как можно фиксировать учетную запись пользователя?
Добрый день. Есть слайд в PowerPoint. Подскажите, пожалуйста, как на слайде сделать так, чтобы при открытии презентации система на слайде отображала имя пользователя?
В интернете не мог найти, может кто знает здесь(понимаю, что не тема excel)
Добрый день Есть в таблицы в которых есть дата и во второй дата и время Нужно посчитать количество, удовлетворяющие условию по дате (счетеслимн) Но вот как исключить время при использовании функции не совсем могу понять Помогите, пожалуйста Пример во вложении
Добрый день Есть задачка указывания информации в документах с датами. К примеру счет от 1 августа 2021 г Использование ТЕКСТ позволяет сделать счет от 1 август 2021 г (то есть не хватает "а")
Добрый день Есть сводная таблица. Как в сводную таблицу добавить формулу, чтобы рассчитывала показатели (столбец М) Не удобно писать формулу вручную и переписывать заново при изменении
Добрый день В первый раз встречаю ситуацию, когда не могу загрузить в Эксель прайс-лист с сайта http://6443780.ru/xml/suvenirow_compact.xml Возникает код ошибки 1072896636 Прочитал в интернете, что с самим файлом можно решить вопрос, но как можно загрузить из интернета без правки xml?
Добрый день Есть огромная таблица 1 Как в таблицу 2 подтянуть значение по соответствию данных строки и столбца Выделил желтым значение, которое нужно подтянуть формулой
ДОбрый день Подскажите, пожалуйста, использую VBA EXCEl для обновления слайдов в презентации. Но никак не могу победить проблему: отключения через VBA всех связей с файлами презентации в PowerPoint
Добрый день Посоветуйте, пожалуйста, какой лучший способов ячейки выбрать значение из большого списка классификаторов (больше 100) Через данные - проверка данных - список не очень удобно. МОжет быть есть более удобный вариант?