Перебирайте ячейки и меняйте шрифт

Я пытаюсь перебрать все ячейки в строке и изменить размер шрифта, используя следующие критерии:

  • Если размер шрифта меньше 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).

Как я могу сделать это хотя бы в одной колонке? Я почти уверен, что смогу заставить его работать, если начну с этого.


3

Вы можете перебрать все ячейки в UsedRange

  Sub SetSheetFont (ws As Worksheet) Dim myCell  As Range Application.ScreenUpdating = False With ws Для каждого myCell в ws.UsedRange 'Если размер шрифта меньше 10, установите значение 10 Если myCell.Font.Size  

Боковое примечание: в общем, вы не хотите использовать select в своем коде

Улучшите этот ответ
3 января ’20 в 16:05
добавить комментарий |

Вы можете перебрать все ячейки в UsedRange

   Sub SetSheetFont (ws As Worksheet) Dim myCell As Range Application.ScreenUpdating = False With ws Для каждого myCell в ws.UsedRange 'Если размер шрифта меньше 10, установите значение 10 Если myCell.Font.Size  

Боковое примечание: в общем, вы не хотите использовать select в своем коде


3

Согласно моему комментарию, я думаю, что это может быть хороший вариант использования для 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...

Улучшите этот ответ
ответил 03 января ’20 в 16:18
  • 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...


2

Сохраняя свой код, как указано в комментариях, вы хотели бы получить доступ к каждой ячейке (а не ко всем ячейкам, как это .. выполняет:

  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 … которые могут быть или не соответствовать вашим требованиям.

Улучшите этот ответ
отредактировано 3 января ’20 в 16:39
ответил 03 января ’20 в 16:07
  • 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, но если вы предпочитаете другой стиль или размер шрифта, вот как вы можете их изменить:

  1. Выберите ячейку или диапазон ячеек с текстом или числом, которое вы хотите отформатировать.

  2. Щелкните стрелку рядом с Шрифт и выберите другой шрифт.

  1. Чтобы измените размер шрифта, щелкните стрелку рядом со значением по умолчанию Размер шрифта и выберите нужный размер.

    В нашем примере ниже мы изменили стиль шрифта до Century и размер до 9 .

Совет. Данные добавляются в ячейки за пределами вновь отформатированный диапазон ячеек появится в стиле и размере по умолчанию, и вам нужно будет повторить вышеуказанные шаги, чтобы отформатировать их. Вы также можете выбрать пустые ячейки и применить форматирование перед вводом данных.

Вы также можете изменить способ размещения текста в ячейке.

Оцените статью
logicle.ru
Добавить комментарий