У Кейта есть рабочий лист, в котором используются столбцы от A до H. Он хотел бы иметь возможность расширять каждый столбец на пропорциональную величину. Например, если он выберет все 8 столбцов, было бы здорово, если бы он мог захватить правый край столбца H, и, когда он тянет вправо, все столбцы будут пропорционально разнесены. Он задается вопросом, есть ли способ расширить столбцы такого типа.

Чтобы лучше понять, о чем говорит Кейт, можно привести пример. Обычный способ регулировки ширины столбца с помощью мыши — выбрать столбцы и затем перетащить разделитель между заголовками столбцов вправо или влево. Допустим, ширина столбца A равна 5, столбцу B — 10, а столбцу C — 15. Если вы выберете A: C и перетащите разделитель с правой стороны заголовка столбца C на 20, это означает увеличение на 33% для столбец C. В идеале, оба столбца A и B также должны быть изменены на 33% (по желанию Кейта), но вместо этого оба они имеют ширину 20, чтобы соответствовать столбцу C.

Кроме того, удерживание клавиши-модификатора (Ctrl, Alt или Shift) при перетаскивании мыши не имеет никакого эффекта; все ширины столбцов по-прежнему равны друг другу. Если вы попытаетесь щелкнуть правой кнопкой мыши и перетащить, это ничего не сделает, кроме отображения контекстного меню. Таким образом, из всего тестирования, которое мы смогли провести, не существует способа пропорционально регулировать ширину столбцов в Excel, который мы смогли обнаружить.

Возможно, самый простой способ — использовать макрос для настройки ширины столбцов.

Следующее — хороший пример такого подхода.

Sub ProportionalWidth()

Dim C As Range     Dim sRaw As String     Dim sTemp As String     Dim P As Single

sRaw = InputBox("Increase width by how what % (0 to 100)?")

P = Val(sRaw)

If P >= 0 And P <= 100 Then         P = 1 + (P / 100)

sTemp = ""

For Each C In Selection.Columns             sTemp = sTemp & "Column " & ColumnLetter(C.Column)

sTemp = sTemp & ": " & C.ColumnWidth & " ==> "

C.ColumnWidth = C.ColumnWidth * P             sTemp = sTemp & C.ColumnWidth & vbCrLf         Next C         MsgBox sTemp     Else         MsgBox "Out of range; no adjustment made"

End If End Sub
Function ColumnLetter(Col As Long) As String     Dim Arr     Arr = Split(Cells(1, Col).Address(True, False), "$")

ColumnLetter = Arr(0)

End Function

На самом деле в этом примере есть два макроса. Первый (ProportionalWidth) изменяет ширину выбранных вами столбцов. Второй (ColumnLetter) используется для преобразования числового номера столбца в буквы столбца. Он используется только при составлении отчета (в sTemp) до и после ширины столбцов.

Когда вы выбираете столбцы и запускаете макрос, он запрашивает, насколько шире вы хотите сделать эти столбцы. Введите число от 0 до 100, нажмите «ОК», и столбцы будут расширены на этот процент. Кроме того, вы увидите окно сообщения, в котором отображается исходная ширина каждого столбца и настроенная ширина.

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13429) применим к Microsoft Excel 2007, 2010, 2013 и 2016.