Код VBA для изменения цвета шрифта для 3 столбцов на основе значения 1 столбца (несколько таблиц) - PullRequest
0 голосов
/ 02 мая 2019

Ситуация:

У меня около 2600 таблиц в одной книге .xlsx, по одной таблице на вкладку.Они должны быть опубликованы онлайн в формате PDF, но, во-первых, мне нужно подавить частоты и проценты в строках с частотами меньше 10. Форматирование маски не работает с параметром перекрестного списка в SAS 9.3.Поэтому я думаю, что самый эффективный способ - изменить цвет шрифта в соответствующих ячейках на белый.К сожалению, условное форматирование не работает, когда вы выбираете несколько вкладок.Использование VBA кажется лучшим вариантом, но я очень мало знаю об этом.

Вот пример таблиц (для краткости я спрятал строки для 4-7 классов):

Пример: исходная таблица

Цель:

Изменить цвет шрифта в ячейках с вычисленными значениями на белый для имитации подавления.Например:

Пример: «Подавленная» таблица

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

Большое спасибо !!!!

Ответы [ 3 ]

0 голосов
/ 02 мая 2019

doctorjay.

Я работал над собственной фиктивной таблицей, свободно основываясь на вашем наборе данных.

Я бы использовал такой макрос:

Sub clean_lower_than_10()
Dim Sheet As Worksheet


For Each Sheet In ActiveWorkbook.Sheets
    For Each Row In Sheet.UsedRange.Rows
            'Columns where the frequency and percentage are: C,D -> 3,4
            For Each Cell In Row.Cells
                'Inside this condition, you should change the numbers for the column number that corresponds to the ones on your tables.
                If Cell.Column = 3 Or Cell.Column = 4 Then
                    If Cell.Value < 10 Then
                        Cell.Font.ColorIndex = 2
                    End If
                End If
            Next
        Next
Next


End Sub

ColorIndex = 2 означает белый цвет для шрифта ячейки.

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

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

Моя таблица перед выполнением макроса:

Before executing macro

Моя таблица после выполнения макроса:

After executing macro

Обратите внимание, чтозначение остается неизменным, но цвет шрифта изменился на белый.

Надеюсь, это поможет

0 голосов
/ 04 мая 2019

Ответ на дополнительный вопрос о создании временной копии для экспорта:

Sub CreateExportCopy()

    Dim wb As Workbook, wbExport As Workbook, newPath As String

    Set wb = Workbooks("DataTables.xlsx") '<< your (open) data file

    newPath = wb.Path & "\ForPDF_" & wb.Name

    'this will create a copy of the workbook in the same location,
    '  with the name prepended by "ForPFDF_"
    wb.SaveCopyAs newPath

    'open the copy
    Set wbExport = Workbooks.Open(newPath)

    'follow one of the other answers here to process the
    '  tables in wbExport, but use (eg)
    '     c.ClearContents
    '  instead of
    '     c.Font.Color = vbWhite

End Sub
0 голосов
/ 02 мая 2019

Они всегда в колонке "C"? Если нет, то вы должны проверить и такие вещи.
Всегда ли это начинается в строке 10?
Что касается простого циклического перебора листов и значений, если вы хотите простого, это примерно так же просто, как и получается:

Sub whiteout()
Dim c As Range, ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    For Each c In Range(ws.Range("C10"), ws.Range("C65000").End(xlUp))
        If c.Value < 10 Then c.Font.Color = vbWhite
    Next c
Next ws
End Sub

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...