Я пытаюсь перебрать все ячейки в строке и изменить размер шрифта, используя следующие критерии:
- Если размер шрифта меньше 10, затем измените размер шрифта на 10.
Это работает, если все ячейки на листе имеют одинаковый размер шрифта. Он возвращает null
, если какая-либо из ячеек на листе имеет другой размер шрифта. Если у меня размер шрифта 8 в A1 и размер 20 в A2, изменений нет.
Sub SetSheetFont (ws As Worksheet) Dim x As Integer Dim NumRows As Long Application.ScreenUpdating = False NumRows = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count Range ("A1"). Выберите With ws ', если размер шрифта меньше 10 установите значение 10 Для x = 1 в NumRows Если .Cells.Font.Size
Конечная цель — перебрать все ячейки в столбце до тех пор, пока не будет определенное количество пустых ячеек, а затем начать со следующего столбца (в данном случае B1).
Как я могу сделать это хотя бы в одной колонке? Я почти уверен, что смогу заставить его работать, если начну с этого.
Вы можете перебрать все ячейки в UsedRange
Sub SetSheetFont (ws As Worksheet) Dim myCell As Range Application.ScreenUpdating = False With ws Для каждого myCell в ws.UsedRange 'Если размер шрифта меньше 10, установите значение 10 Если myCell.Font.Size
Боковое примечание: в общем, вы не хотите использовать select в своем коде
Вы можете перебрать все ячейки в UsedRange
Sub SetSheetFont (ws As Worksheet) Dim myCell As Range Application.ScreenUpdating = False With ws Для каждого myCell в ws.UsedRange 'Если размер шрифта меньше 10, установите значение 10 Если myCell.Font.Size
Боковое примечание: в общем, вы не хотите использовать select в своем коде
Согласно моему комментарию, я думаю, что это может быть хороший вариант использования для FindFormat
и ReplaceFormat
:
Dim x As Double'Set ReplaceFormat только один разApplication.ReplaceFormat .ClearApplication.ReplaceFormat.Font. Size = 10 'Установить FindFormat в цикле For For x = 1–9,5 Шаг 0.5 Application.FindFormat.Clear Application.FindFormat.Font.Size = x ws.Cells.Replace What: = "", Replacement: = "", SearchFormat: = True, ReplaceFormat: = TrueNext x
Это предотвращает итерацию по всем ws.Cells
. Цикл необходим, потому что мы не можем установить что-то вроде: Application.FindFormat.Font.Size . И поскольку
Font.Size
будет автоматически настраиваться (по крайней мере, для меня) до ближайшего 0,5 (а 1 - наименьший размер), мы можем перейти от 1 до 9,5 с шагом 0,5.
И, согласно вашему описанию, вы можете изменить его до ws.UsedRange
в соответствии с упомянутым @ cybernetic.nomad. Таким образом, он будет читать: ws.UsedRange.Replace...

-
1И в качестве дополнительной опции OP может используйте
ws.Range ("A1: C1000"). Заменить ...
. Я всегда сомневаюсь в том, чтобы использоватьUsedRange
, поскольку он может не обязательно получить то, что вы ожидаете от используемого диапазона. И.Cells.
, конечно, делает это для всех ячеек. Просто хотел показать возможность использования определенного диапазона. 🙂 — BruceWayne 03 янв. ’20 в 16:41
Согласно моему комментарию, я думаю, что это может быть хорошим вариантом использования для FindFormat
и ReplaceFormat
:
Dim x As Double'Set ReplaceFormat только один разApplication.ReplaceFormat.ClearApplication.ReplaceFormat.Font.Size = 10'Set FindFormat в цикле For x = 1–9,5 Шаг 0,5 Application.FindFormat.Clear Application.FindFormat.Font.Size = x ws.Cells.Replace What: = "", Замена: = "", SearchFormat: = True, ReplaceFormat: = TrueNext x
Это предотвращает итерацию по всем ws.Cells
. Цикл необходим, потому что мы не можем установить что-то вроде: Application.FindFormat.Font.Size . И поскольку
Font.Size
будет автоматически настраиваться (по крайней мере, для меня) до ближайшего 0,5 (а 1 - наименьший размер), мы можем перейти от 1 до 9,5 с шагом 0,5.
И, согласно вашему описанию, вы можете изменить его до ws.UsedRange
в соответствии с упомянутым @ cybernetic.nomad. Таким образом, он будет читать: ws.UsedRange.Replace...
Сохраняя свой код, как указано в комментариях, вы хотели бы получить доступ к каждой ячейке (а не ко всем ячейкам, как это ..
выполняет:
For x = 1 To NumRows If .Cells (x, 1) .Font.Size
Будет выполнен цикл по столбцу A. ( 1
в .Cells (x, 1)
).
Я бы также предложил использовать .End (xlUp)
вместо xlDown
, если ваш В столбце A есть пустая строка, разделяющая данные. Если это нормально, вы можете оставить его … другой вариант: NumRows = Range ("A" & rows.count) .End (xlUp) .row
(Также используйте Long
для x
:
Sub SetSheetFont (ws как рабочий лист) Dim x As Long, NumRows as Long Application.ScreenUpdating = False With ws NumRows = .Range ("A" & rows.count) .End (xlUp) .Row 'Если размер шрифта меньше 10, установите значение 10 For x = 1 To NumRows If .Cells ( x, 1) .Font.Size
Изменить: быть конечно, xlDown
будет работать, просто обратите внимание, что он остановится на первой пустой ячейке. Используя xlUp
, как это сделал я, обязательно получите все строки в столбце A … которые могут быть или не соответствовать вашим требованиям.

-
1
xlDown
, возможно, было специально, поскольку OP упомянул «перебирает все ячейки в столбце, пока не будет определенное число пустых ячеек ». Я думаю, немного неясно с конца OP. Тем не менее, твердый ответ 🙂 — JvdV 3 января ’20 в 16:27 -
@JvdV — Согласен с
xlDown
, я попытался отметить это в своем ответе, но я отредактирую, чтобы уточнить. — BruceWayne 03 янв. ’20 в 16:38
Сохраняя свой код, как указано в комментариях, вы хотели бы получить доступ к каждой ячейке (а не ко всем ячейкам, как это . Cells.
выполняет:
For x = 1 To NumRows If .Cells (x, 1) .Font.Size
Будет выполнен цикл по столбцу A. ( 1
в .Cells (x, 1 )
).
Я бы также предложил использовать .End (xlUp)
вместо xlDown
в Если в вашем столбце A есть пустая строка, разделяющая данные. Если это нормально, вы можете оставить ее … другой вариант: NumRows = Range ("A" & rows.count) .End (xlUp). row
(Также используйте Long
для x
:
Sub SetSheetFont (ws As Рабочий лист) Dim x As Long, NumRows as Long Application.ScreenUpdating = False With ws NumRows = .Range ("A" & rows.count) .End (xlUp) .Row 'Если размер шрифта меньше 10, установите значение 10 For x = 1 To NumRows If .Cells (x, 1) .Font.Size
Изменить: Чтобы быть уверенным, что xlDown
будет работать, просто обратите внимание, что он остановится на первой пустой ячейке. Используя xlUp
как я сделал, обязательно получите все строки в столбце A … что может быть или не быть тем, что вы хотите.
Изменение стиля и размера шрифта для рабочего листа
Примечание. Вы не можете изменить шрифт по умолчанию для всю книгу в Excel в Интернете, но вы можете изменить стиль и размер шрифта для рабочего листа.
Когда вы вводите данные в рабочий лист, Excel автоматически использует t стиль шрифта Calibri имеет размер 11, но если вы предпочитаете другой стиль или размер шрифта, вот как вы можете их изменить:
-
Выберите ячейку или диапазон ячеек с текстом или числом, которое вы хотите отформатировать.
-
Щелкните стрелку рядом с Шрифт и выберите другой шрифт.
-
Чтобы измените размер шрифта, щелкните стрелку рядом со значением по умолчанию Размер шрифта и выберите нужный размер.
В нашем примере ниже мы изменили стиль шрифта до Century и размер до 9 .
Совет. Данные добавляются в ячейки за пределами вновь отформатированный диапазон ячеек появится в стиле и размере по умолчанию, и вам нужно будет повторить вышеуказанные шаги, чтобы отформатировать их. Вы также можете выбрать пустые ячейки и применить форматирование перед вводом данных.
Вы также можете изменить способ размещения текста в ячейке.