当前位置: 首页 > 知识库问答 >
问题:

根据excel中单元格的值获取整行

朱皓
2023-03-14

我试图根据任意单元格的值,获取从E到BH的特定范围内的整行数据。例如,如果单元格P,3上的值为“红色”,则我希望选择从E3到BH,3的整个范围。

此外,如果F9中的单元格上有值“黄色”,我希望选择从E9到BH9的整行

到目前为止,我一直在尝试从字符串“my text”中获取行,但它不起作用。我计划以与类似的方式获取行和列,以便根据文本获取从e(行)到bh(行)的行

Dim rng1 As Range
Set rng1 = Sheets("Table").UsedRange.Find("my text", xlValues, xlWhole)
Debug.Print "row is: " & rng1

共有3个答案

通学真
2023-03-14

迟到了,试图展示另一种方法,演示2019版的动态可能性,以及巧妙地使用范围函数:

Sub ExampleCall()
    '[0] define search item
    Const SearchItem As String = "My text"
    Dim rng As Range: Set rng = Sheet1.UsedRange                   ' Project's sheet Code(Name)
    '[1] evaluate condition
    Dim condition$: condition = "=IF(" & rng.Address & "=""" & SearchItem & """,ROW(" & rng.Address & "),"""")"
    Dim chk: chk = Evaluate(condition)
    '[2] get findings
    Dim rng1 As Range: Set rng1 = Range("E" & rng.Rows.Count + 1)  ' set dummy range (avoiding later checks for Is Nothing)
    Dim i As Long
    For i = 1 To UBound(chk)
        If Not IsError(Application.Average(Application.Index(chk, i, 0))) Then
            Set rng1 = Union(rng1, Intersect(Rows(i), Range("E:BH")))
            '' ... or do something with data field row Application.Index(chk, i, 0)
            '  ...
        End If
    Next i
    '[3] select rows with findings (after removing dummy from union range)
    If rng1.Areas.Count > 1 Then rng1.Areas(1).Delete ' delete dummy
    rng1.Select

End Sub

潘雅珺
2023-03-14

>

  • 注意关键部分:

    Const CopyColsAddress As String = "E:BH"
    Set ccrg = ws.Columns(CopyColsAddress)
    ccrg.Rows(i) 
    

    代码

    Option Explicit
    
    Sub selectRowRanges()
        
        ' Constants
        Const wsName As String = "Table"
        Const FirstRow As Long = 2
        Const CopyColsAddress As String = "E:BH"
        Const CritColsList As String = "F,P"
        Const CriteriaList As String = "Yellow,Red"
        
        ' Workbook
        Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
        
        ' Worksheet
        Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
        
        ' Last Row
        Dim cel As Range
        Set cel = ws.Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious)
        If cel Is Nothing Then Exit Sub
        Dim LastRow As Long: LastRow = cel.Row
        If LastRow < FirstRow Then Exit Sub
        
        ' Copy-Columns Range
        Dim ccrg As Range: Set ccrg = ws.Columns(CopyColsAddress)
        
        ' Criteria
        Dim CritCols() As String: CritCols = Split(CritColsList, ",")
        Dim Criteria() As String: Criteria = Split(CriteriaList, ",")
        Dim cUpper As Long: cUpper = UBound(CritCols)
        
        ' Additional Variables
        Dim trg As Range ' Total Range
        Dim i As Long ' Range Row Counter
        Dim n As Long ' Criteria Counter
        
        ' Loop and combine matched row ranges in Total Range.
        For i = FirstRow To LastRow
            For n = 0 To cUpper
                If ws.Cells(i, CritCols(n)).Value = Criteria(n) Then
                    If trg Is Nothing Then
                        Set trg = ccrg.Rows(i)
                    Else
                        Set trg = Union(trg, ccrg.Rows(i))
                    End If
                    Exit For
                End If
            Next n
        Next i
        
        ' Select (Copy, Delete)
        If Not trg Is Nothing Then
            ' Often we do something like:
            'trg.Copy Sheet2.Range("A2")
            ws.Activate
            trg.Select
        End If
        
    End Sub
    

  • 罗韬
    2023-03-14

    可能使用Intersect和ENTIROW。请注意,您还应该使用“如果不存在,则rng1为Nothing”测试查找是否成功。

    Set rng1 = Sheets("Table").UsedRange.Find(What:="my text", LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not rng1 Is Nothing Then
        Dim theNewRange As Range
        Set theNewRange = Intersect(rng1.EntireRow, Range("E:BH"))
    End If
    

    使用rng1的较短备选方案。行:

    If Not rng1 Is Nothing Then
        Dim theNewRange As Range
        Set theNewRange = Range("E:BH").Rows(rng1.Row)
    End If
    
     类似资料:
    • null 如您所料,A3将导致。现在将A2的格式更改为会计,使用小数点后2位。A2现在读,但是基础值仍然是,所以A3仍然是。 VBA 制作一个新模块并添加以下函数: null 和具有相同的基础值,但和没有,尽管它们都是使用和的方法计算的。 ()中的表达式正在访问和的实际基础值。如何在VBA中访问这些值?

    • 问题内容: 当我读取excel数字单元格值时,我得到带小数的输出。例如:79读数为79.0,0.00读数为0.0。我编写的应用程序代码是: 问题答案: Stack Overflow上经常出现这个问题,因此建议您仔细阅读许多类似的问题,以找到答案! Excel将文件格式中的几乎所有数字都存储为浮点值,这就是为什么POI会为您返回数字单元格的双精度数字,因为这就是真正的数字。如果希望它看起来像在Exc

    • 在Java中,我应该得到的输出是

    • 有人能帮忙吗?我有一个现有代码,该代码当前根据V列中的单元格值(上诉记录)将整行数据从一张表(质量日志)复制到另一张表(上诉日志)。 之前,它已经从原始(质量日志)表中删除了该行,但我现在希望更改代码,以便将单元格值更改为(正在上诉),然后将其移动到下一页(上诉日志)。 请参阅下面我的代码。我已用**表示我试图更改代码

    • 问题内容: 我正在使用apache POI读取Excel文档。至少可以说,到目前为止,它已经可以满足我的目的。但是令我震惊的一件事是将单元格的值提取为HTML。 我有一个单元格,用户将在其中输入一些字符串并应用某种 格式(例如,项目符号/数字/粗体/斜体) 等。 因此,当我阅读它时,内容应为 HTML 格式,而不是POI给出的纯字符串格式。 我几乎遍历了整个POI API,但找不到任何人。我只想保

    • 问题内容: 我目前正在研究一个使用Apache POI读取Excel文件的项目。 我的任务似乎很简单,我只需要获取在excel文件中显示的单元格值即可。我知道要根据单元格的单元格类型执行switch语句。但是如果数据是这样的 我做的时候POI给我。当我强制该单元格为字符串类型并执行此操作后,它就会给我。我需要的是数据在excel中的显示方式。 我发现有人告诉使用类,但据我了解,它要求您的代码了解单