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

Вход

Регистрация

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

 

= Мир MS Excel/Автоподбор высоты на определенные ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автоподбор высоты на определенные ячейки (Формулы/Formulas)
Автоподбор высоты на определенные ячейки
kyznezov3003 Дата: Четверг, 22.08.2019, 10:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте, встретил макрос на просторах сети с автоподбором высоты строки, частично изменил что бы не оставалось лишнее поле, но не могу найти где можно настроить что бы не выделять диапазон, необходимо что бы редактировало например ячейки A1:O29 на листе 1 и на листе 2 A1:O20 и работало с ними, а не в ручную выделять необходимый диапазон
К сообщению приложен файл: 1811693.xls (72.5 Kb)


Сообщение отредактировал kyznezov3003 - Четверг, 22.08.2019, 10:23
 
Ответить
СообщениеЗдравствуйте, встретил макрос на просторах сети с автоподбором высоты строки, частично изменил что бы не оставалось лишнее поле, но не могу найти где можно настроить что бы не выделять диапазон, необходимо что бы редактировало например ячейки A1:O29 на листе 1 и на листе 2 A1:O20 и работало с ними, а не в ручную выделять необходимый диапазон

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 10:05
kyznezov3003 Дата: Четверг, 22.08.2019, 10:06 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Если есть возможность то прошу в ячейке Exel написать код и отметить красным что нужно менять
 
Ответить
СообщениеЕсли есть возможность то прошу в ячейке Exel написать код и отметить красным что нужно менять

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 10:06
Nic70y Дата: Четверг, 22.08.2019, 11:33 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
рекордер сказал:
[vba]
Код
Sub U_729()
    Sheets("Лист1").Rows("1:29").Rows.AutoFit
    Sheets("Лист2").Rows("1:20").Rows.AutoFit
End Sub
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениерекордер сказал:
[vba]
Код
Sub U_729()
    Sheets("Лист1").Rows("1:29").Rows.AutoFit
    Sheets("Лист2").Rows("1:20").Rows.AutoFit
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 22.08.2019 в 11:33
kyznezov3003 Дата: Четверг, 22.08.2019, 14:25 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Спасибо за совет, возможно криво но вроде сделал, вот код с исправлениями добавляются значения "Sheets("Лист2").Select и Range("C16:F18").Select", но вот возникла проблема что автопоставка размера по выделенным ячейкам происходит только на одном листе, можете что-либо посоветовать?
[vba]
Код

Option Explicit

Sub ChangeRowColHeight()
Dim rc As Range
Dim bRow As Boolean
bRow = (MsgBox("Изменять высоту строк?", vbQuestion + vbYesNo, "") = vbYes)
'bRow = True: для изменения высоты строк
'bRow = False: для изменения ширины столбцов
Sheets("Лист1").Select
Range("C16:F18").Select
Sheets("Лист2").Select
Range("C16:F18").Select
Application.ScreenUpdating = False
For Each rc In Selection
RowColHeightForContent rc, bRow
Next
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------------------------
Function RowColHeightForContent(rc As Range, Optional bRowHeight As Boolean = True)
'rc - ячейка, высоту строки или ширину столбца которой необходимо подобрать
'bRowHeight - True - если необходимо подобрать высоту строки
' False - если необходимо подобрать ширину столбца
Dim OldR_Height As Single, OldC_Widht As Single
Dim MergedR_Height As Single, MergedC_Widht As Single
Dim CurrCell As Range
Dim ih As Integer
Dim iw As Integer
Dim NewR_Height As Single, NewC_Widht As Single
Dim ActiveCellHeight As Single

If rc.MergeCells Then
With rc.MergeArea 'если ячейка объединена
'запоминаем кол-во столбцов
iw = .Columns(.Columns.Count).Column - rc.Column + 1
'запоминаем кол-во строк.
ih = .Rows(.Rows.Count).Row - rc.Row + 1
'Определяем высоту и ширину объединения ячеек
MergedR_Height = 0
For Each CurrCell In .Rows
MergedR_Height = CurrCell.RowHeight + MergedR_Height
Next
MergedC_Widht = 1
For Each CurrCell In .Columns
MergedC_Widht = CurrCell.ColumnWidth + MergedC_Widht
Next
'запоминаем высоту и ширину первой ячейки из объединенных
OldR_Height = .Cells(0, 0).RowHeight
OldC_Widht = .Cells(1, 1).ColumnWidth
'отмеяем объединение ячеек
.MergeCells = False
'назначаем новую высоту и ширину для первой ячейки
.Cells(0).RowHeight = MergedR_Height
.Cells(1, 1).EntireColumn.ColumnWidth = MergedC_Widht
'если необходимо изменить высоту строк
If bRowHeight Then
.EntireRow.AutoFit
NewR_Height = .Cells(1).RowHeight 'запоминаем высоту строки
.MergeCells = True
If OldR_Height < (NewR_Height / ih) Then
.RowHeight = NewR_Height / ih
Else
.RowHeight = OldR_Height
End If
'возвращаем ширину столбца первой ячейки
.Cells(1, 1).EntireColumn.ColumnWidth = OldC_Widht
Else 'если необходимо изменить ширину столбца
.EntireColumn.AutoFit
NewC_Widht = .Cells(1).EntireColumn.ColumnWidth 'запоминаем ширину столбца
.MergeCells = True
If OldC_Widht < (NewC_Widht / iw) Then
.ColumnWidth = NewC_Widht / iw
Else
.ColumnWidth = OldC_Widht
End If
'возвращаем высоту строки первой ячейки
.Cells(1, 1).RowHeight = OldR_Height
End If
End With
End If
End Function
[/vba]


Сообщение отредактировал kyznezov3003 - Четверг, 22.08.2019, 14:49
 
Ответить
СообщениеСпасибо за совет, возможно криво но вроде сделал, вот код с исправлениями добавляются значения "Sheets("Лист2").Select и Range("C16:F18").Select", но вот возникла проблема что автопоставка размера по выделенным ячейкам происходит только на одном листе, можете что-либо посоветовать?
[vba]
Код

Option Explicit

Sub ChangeRowColHeight()
Dim rc As Range
Dim bRow As Boolean
bRow = (MsgBox("Изменять высоту строк?", vbQuestion + vbYesNo, "") = vbYes)
'bRow = True: для изменения высоты строк
'bRow = False: для изменения ширины столбцов
Sheets("Лист1").Select
Range("C16:F18").Select
Sheets("Лист2").Select
Range("C16:F18").Select
Application.ScreenUpdating = False
For Each rc In Selection
RowColHeightForContent rc, bRow
Next
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------------------------
Function RowColHeightForContent(rc As Range, Optional bRowHeight As Boolean = True)
'rc - ячейка, высоту строки или ширину столбца которой необходимо подобрать
'bRowHeight - True - если необходимо подобрать высоту строки
' False - если необходимо подобрать ширину столбца
Dim OldR_Height As Single, OldC_Widht As Single
Dim MergedR_Height As Single, MergedC_Widht As Single
Dim CurrCell As Range
Dim ih As Integer
Dim iw As Integer
Dim NewR_Height As Single, NewC_Widht As Single
Dim ActiveCellHeight As Single

If rc.MergeCells Then
With rc.MergeArea 'если ячейка объединена
'запоминаем кол-во столбцов
iw = .Columns(.Columns.Count).Column - rc.Column + 1
'запоминаем кол-во строк.
ih = .Rows(.Rows.Count).Row - rc.Row + 1
'Определяем высоту и ширину объединения ячеек
MergedR_Height = 0
For Each CurrCell In .Rows
MergedR_Height = CurrCell.RowHeight + MergedR_Height
Next
MergedC_Widht = 1
For Each CurrCell In .Columns
MergedC_Widht = CurrCell.ColumnWidth + MergedC_Widht
Next
'запоминаем высоту и ширину первой ячейки из объединенных
OldR_Height = .Cells(0, 0).RowHeight
OldC_Widht = .Cells(1, 1).ColumnWidth
'отмеяем объединение ячеек
.MergeCells = False
'назначаем новую высоту и ширину для первой ячейки
.Cells(0).RowHeight = MergedR_Height
.Cells(1, 1).EntireColumn.ColumnWidth = MergedC_Widht
'если необходимо изменить высоту строк
If bRowHeight Then
.EntireRow.AutoFit
NewR_Height = .Cells(1).RowHeight 'запоминаем высоту строки
.MergeCells = True
If OldR_Height < (NewR_Height / ih) Then
.RowHeight = NewR_Height / ih
Else
.RowHeight = OldR_Height
End If
'возвращаем ширину столбца первой ячейки
.Cells(1, 1).EntireColumn.ColumnWidth = OldC_Widht
Else 'если необходимо изменить ширину столбца
.EntireColumn.AutoFit
NewC_Widht = .Cells(1).EntireColumn.ColumnWidth 'запоминаем ширину столбца
.MergeCells = True
If OldC_Widht < (NewC_Widht / iw) Then
.ColumnWidth = NewC_Widht / iw
Else
.ColumnWidth = OldC_Widht
End If
'возвращаем высоту строки первой ячейки
.Cells(1, 1).RowHeight = OldR_Height
End If
End With
End If
End Function
[/vba]

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 14:25
китин Дата: Четверг, 22.08.2019, 14:31 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
kyznezov3003, - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениеkyznezov3003, - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - китин
Дата добавления - 22.08.2019 в 14:31
kyznezov3003 Дата: Четверг, 22.08.2019, 14:48 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
китин, Изменил, спасибо за совет, можете подсказать по поводу кода? Может что то нужно добавить?


Сообщение отредактировал kyznezov3003 - Четверг, 22.08.2019, 14:49
 
Ответить
Сообщениекитин, Изменил, спасибо за совет, можете подсказать по поводу кода? Может что то нужно добавить?

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 14:48
Nic70y Дата: Четверг, 22.08.2019, 14:59 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
A1:O29 на листе 1
в модуль листа 1
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a1:o29")) Is Nothing Then
        Rows("1:29").Rows.AutoFit
    End If
End Sub
[/vba]
на листе 2 A1:O20
в модуль лита 2
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a1:o20")) Is Nothing Then
        Rows("1:20").Rows.AutoFit
    End If
End Sub
[/vba]
К сообщению приложен файл: 7699737.xlsm (17.4 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение
A1:O29 на листе 1
в модуль листа 1
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a1:o29")) Is Nothing Then
        Rows("1:29").Rows.AutoFit
    End If
End Sub
[/vba]
на листе 2 A1:O20
в модуль лита 2
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a1:o20")) Is Nothing Then
        Rows("1:20").Rows.AutoFit
    End If
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 22.08.2019 в 14:59
kyznezov3003 Дата: Четверг, 22.08.2019, 15:50 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, Не могу немного понять, вот в данной ситуации высота строки меняется во второй книге, но в первой остается на старом месте, так же столкнулся с проблемой, при объединенной ячейке например 3 объединенные она становится больше нужного в 3 раза.
К сообщению приложен файл: 5397454.xls (68.5 Kb)


Сообщение отредактировал kyznezov3003 - Четверг, 22.08.2019, 16:43
 
Ответить
СообщениеNic70y, Не могу немного понять, вот в данной ситуации высота строки меняется во второй книге, но в первой остается на старом месте, так же столкнулся с проблемой, при объединенной ячейке например 3 объединенные она становится больше нужного в 3 раза.

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 15:50
Nic70y Дата: Четверг, 22.08.2019, 16:52 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
не используйте объединенные ячейки


ЮMoney 41001841029809
 
Ответить
Сообщениене используйте объединенные ячейки

Автор - Nic70y
Дата добавления - 22.08.2019 в 16:52
kyznezov3003 Дата: Четверг, 22.08.2019, 17:04 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, А не подскажете по поводу того что автоматическая высота ставится на 2-ом листе, но на первом не изменяется, как с этим справиться?
 
Ответить
СообщениеNic70y, А не подскажете по поводу того что автоматическая высота ставится на 2-ом листе, но на первом не изменяется, как с этим справиться?

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 17:04
Nic70y Дата: Четверг, 22.08.2019, 17:14 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
о каком файле речь?
у меня изменяется, только все строки становятся = по умолчанию (т.к. там есть объединенные ячейки)


ЮMoney 41001841029809
 
Ответить
Сообщениео каком файле речь?
у меня изменяется, только все строки становятся = по умолчанию (т.к. там есть объединенные ячейки)

Автор - Nic70y
Дата добавления - 22.08.2019 в 17:14
kyznezov3003 Дата: Четверг, 22.08.2019, 17:31 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, Про этот файл идет речь, там вставлены макросы по вашему совету, но на 1-ом листе при запуске макроса не выставляет автоматически высоту строки, то есть он работает строго на 2-ом листе, пропуская 1-ый лист. Получается он на первый лист даже по умолчанию не ставит высоту строки
К сообщению приложен файл: 5397454-1-.xls (68.5 Kb)


Сообщение отредактировал kyznezov3003 - Четверг, 22.08.2019, 17:43
 
Ответить
СообщениеNic70y, Про этот файл идет речь, там вставлены макросы по вашему совету, но на 1-ом листе при запуске макроса не выставляет автоматически высоту строки, то есть он работает строго на 2-ом листе, пропуская 1-ый лист. Получается он на первый лист даже по умолчанию не ставит высоту строки

Автор - kyznezov3003
Дата добавления - 22.08.2019 в 17:31
Nic70y Дата: Пятница, 23.08.2019, 16:28 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
если особо не вникать (править) в код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a16:o29")) Is Nothing Then
        Target.Select
        Call ChangeRowColHeight
    End If
End Sub
[/vba]
[vba]
Код
Sub ChangeRowColHeight()
    Dim rc As Range
    Application.ScreenUpdating = False
    For Each rc In Selection
        RowColHeightForContent rc
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 1277014.xls (64.5 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениеесли особо не вникать (править) в код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a16:o29")) Is Nothing Then
        Target.Select
        Call ChangeRowColHeight
    End If
End Sub
[/vba]
[vba]
Код
Sub ChangeRowColHeight()
    Dim rc As Range
    Application.ScreenUpdating = False
    For Each rc In Selection
        RowColHeightForContent rc
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 23.08.2019 в 16:28
kyznezov3003 Дата: Пятница, 23.08.2019, 21:36 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, Не помогло, в любом случае точно такая же проблема, работает на одной, но не работает на другой, но придумал как решить проблему, просто несколько макросов добавлю на каждую страницу отдельно, сделаю выносками, спасибо за помощь)))
 
Ответить
СообщениеNic70y, Не помогло, в любом случае точно такая же проблема, работает на одной, но не работает на другой, но придумал как решить проблему, просто несколько макросов добавлю на каждую страницу отдельно, сделаю выносками, спасибо за помощь)))

Автор - kyznezov3003
Дата добавления - 23.08.2019 в 21:36
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автоподбор высоты на определенные ячейки (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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