情况:
我在一个.xlsx工作簿中有大约2,600个表,每个选项卡有一个表。它们将作为PDF在线发布,但首先,我需要抑制频率小于10的行中的频率和百分比。掩码格式化不适用于SAS 9.3中的交叉列表选项。因此,我认为最有效的方法是将适当单元格中的字体颜色更改为白色。不幸的是,当您选择多个选项卡时,条件格式不起作用。使用VBA似乎是最好的选择,但我对此知之甚少。
这是表格的一个例子(为了简洁,我隐藏了4 - 7年级的行):
目标:
将具有计算值的单元格中的字体颜色更改为白色以模拟抑制。例如:
有谁能指出我正确的方向?我觉得这应该是非常简单的,但每次我都这么认为,这恰恰相反。我看到了一些类似的问题,但没有一个问题与我的问题相关。
非常感谢!!!!
回答关于为出口创建临时副本的问题:
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
他们总是在列“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
循环非常直观,但请注意,在循环中访问和更改此类内容可能会非常缓慢。
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表示单元格字体的白色。
此解决方案假定您的百分比和频率值始终位于每张工作表的相同列上。
如果不是这种情况,你将不得不处理代码以使其工作,但它认为这将是一个很好的起点。
执行宏之前我的表:
执行宏后我的表:
请注意,该值保持不变,但字体颜色已更改为白色。
希望能帮助到你