首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA:如何根据迭代范围的集体信息在一列中填充单元格?

VBA:如何根据迭代范围的集体信息在一列中填充单元格?
EN

Stack Overflow用户
提问于 2022-10-31 22:58:59
回答 1查看 27关注 0票数 0

我需要填写Col H(如图中的红色文本)如下:

  1. 列出了3个主题(用灰色背景分隔) (Col C表示数字)
  2. 每个主题都有多个数据点(每一行一个-Col D表示数据点“名称”),
  3. (未显示)每个主题多个数据点在多个测试上运行,并按测试、主题、时点排序。(参见Col E for Test),这意味着每个“统一ID"/"Subject ID”不止一次使用。这些数据应该单独考虑(例如,主体8脂联素结果不应与主体8 Areg数据进行比较)
  4. --有些数据没有被测试检测到,并且在Col J ("
  5. I需要帮助设计一个程序,如果“来自这个主题(和测试)的所有样本都低于LLOQ吗?”因此,该程序需要检测到每个主题的数据必须在一个块中查看--填写“LLOQ以下的所有样本?”然后再讨论下一个话题。如果在范围内没有

在另一个Sub()中,我找到了如何使用"C01D01.00“作为重置线索来重置每个新主题的值。这可以用于填充范围内不依赖于单元格的数据(例如“LLOQ下面的基线吗?”)但我无法搞清楚如何“设置”一个范围,读取范围,识别Col I中是否有" no“单元格,然后在Col H中返回"no”(如果在Col I中没有"no“,则返回”是“,然后移动到下一个”范围“)。想法?

请看下面我是如何编程的。

代码语言:javascript
运行
复制
Sub BaselineBelowLLOQ()

    Sheets("Cyt-Data").Activate
    Dim NewSubject As String
    Dim SubjectBL As String
    Dim BaselineRow As Integer

    For i = 2 To 1000000
        If Sheets("Cyt-Data").Cells(i, 2).Value = "" Then
            Exit For
        End If
        
        NewSubject = Cells(i, 3).Value
        
        If Not SubjectBL = NewSubject And Cells(i, 4).Value = "C01D01.00" Then
            SubjectBL = NewSubject
            BaselineRow = i
        ElseIf Not SubjectBL = NewSubject And Not Cells(i, 4).Value = "C01D01.00" Then
            SubjectBL = ""
        End If
    
        
        If Not SubjectBL = "" Then
            If Cells(BaselineRow, 9).Value = "Yes" Then
                Cells(i, 7).Value = "Yes"
            Else
                Cells(i, 7).Value = "No"
            End If
        End If
    Next i

End Sub
EN

Stack Overflow用户

回答已采纳

发布于 2022-11-01 00:55:23

像这样的事情应该有效:

代码语言:javascript
运行
复制
Sub BaselineBelowLLOQ()

    Dim ws As Worksheet, i As Long, dict As Object, k As String
    Dim subjId, testName, num1 As Long, num2 As Long
    
    Set dict = CreateObject("scripting.dictionary")
    Set ws = ThisWorkbook.Worksheets("Cyt-Data") 'or ActiveWorkbook...
    
    For i = 2 To ws.Cells(Rows.Count, "B").End(xlUp).Row
        
        subjId = ws.Cells(i, "C").Value
        testName = ws.Cells(i, "E").Value
        k = subjId & "<>" & testName 'SubjectId<>TestName combination
        If Not dict.exists(k) Then   'new combination?
            
            'count all rows for this combo
            num1 = Application.CountIfs(ws.Columns("C"), subjId, _
                                        ws.Columns("E"), testName)
            'count rows for this combo with "Yes" in Col I
            num2 = Application.CountIfs(ws.Columns("C"), subjId, _
                                        ws.Columns("E"), testName, _
                                        ws.Columns("I"), "Yes")
            
            dict.Add k, IIf(num1 = num2, "Yes", "No") 'compare counts for this combo
                                                      'and store the Yes/No outcome
        End If
        'tag the row using the value we already figured out
        ws.Cells(i, "H").Value = dict(k)
    Next i

End Sub
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74269887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档