VBA-如何选择具有值的列单元格

Posted

技术标签:

【中文标题】VBA-如何选择具有值的列单元格【英文标题】:VBA- How do you select a column's cells that have value 【发布时间】:2021-11-11 14:27:30 【问题描述】:

我正在研究这种过滤 2 列以查找具有不同值的行、选择这些列中的值并将单元格区域涂成黄色的方法。我无法正确选择值。由于某种原因,我现在使用的所有选择方法都不能正常工作。范围值是单个单元格,我正在尝试选择列的整个使用范围。他们要么不选择整个使用范围,要么选择包括空白单元格在内的整个列,或者在工作表的最底部选择颜色单元格。这是我的代码示例:

static public void FilterFunction(Excel.Application Oxl, Excel.Worksheet PSheet, Excel.Range Rng, Excel.Range Find)
    
        Excel.Range Filler = null;
        Rng.AutoFilter(Rng.Column, "Found");
        Find.AutoFilter(Find.Column, "Missing");
        Rng.Columns.Select();
        Filler = Oxl.Selection as Excel.Range;
        Filler.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Find.End[Excel.XlDirection.xlDown].Select();
        Filler = Oxl.Selection as Excel.Range;
        Filler.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Rng.AutoFilter(Rng.Column, "Missing");
        Find.AutoFilter(Find.Column, "Found");
        Rng.EntireColumn.Select();
        Filler = Oxl.Selection as Excel.Range;
        Filler.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Find.End[Excel.XlDirection.xlDown].Select();
        Filler = Oxl.Selection as Excel.Range;
        Filler.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        PSheet.ShowAllData();
    

【问题讨论】:

【参考方案1】:

自己想出了解决方案。我利用了工作表的UsedRange 属性,并选择了其中包含我的范围值的列,为我提供了一个范围,其中包含一个列中的所有单元格,其中包含值。我将标题(RngFind)以黄色突出显示,因此我使用标题的范围值将它们变回白色。

static public void FilterFunction(Excel.Application Oxl, Excel.Worksheet PSheet, Excel.Range Rng, Excel.Range Find)
    
        Excel.Range Filler = null;
        PSheet.Activate();
        Rng.AutoFilter(Rng.Column, "Found");
        Find.AutoFilter(Find.Column, "Missing");
        Filler = PSheet.UsedRange.Columns[Rng.Column] as Excel.Range;
        Filler.Columns.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Filler = PSheet.UsedRange.Columns[Find.Column] as Excel.Range;
        Filler.Columns.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Rng.AutoFilter(Rng.Column, "Missing");
        Find.AutoFilter(Find.Column, "Found");
        Filler = PSheet.UsedRange.Columns[Rng.Column] as Excel.Range;
        Filler.Columns.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Filler = PSheet.UsedRange.Columns[Find.Column] as Excel.Range;
        Filler.Columns.Cells.Interior.Color = ColorTranslator.ToOle(Color.Yellow);
        Rng.Cells.Interior.Color = ColorTranslator.ToOle(Color.White);
        Find.Cells.Interior.Color = ColorTranslator.ToOle(Color.White);
        PSheet.ShowAllData();
    

【讨论】:

以上是关于VBA-如何选择具有值的列单元格的主要内容,如果未能解决你的问题,请参考以下文章

vba如何读取excel中某单元格的行数或列数

使用 VBA 选择特定单元格时如何保存工作簿?

将单元格的值剪切并粘贴到vba中的另一个单元格

Excel VBA - 如何选择范围向下到第一个空白单元格

MS Word,VBA,如何选择表格内单元格中的段落?

用于比较具有包含日期​​的单元格的列并将特定文本粘贴到另一列的 Vba 代码