excel - 循环遍历行和列以在 vba 中搜索值
问题描述
我正在遍历从第 7 列开始到最后一列(搜索范围)的数据,以查找基于第 3 列和第 4 列(即等位基因调用)的三 (3) 个事物。
首先,我正在寻找第 3 列和第 4 列中以“等位基因”为标题的列中的任何值的完全匹配,即第 7、10、13 列等,一旦找到,我的代码会用颜色索引加上右边的下两个单元格(即等位基因、大小、高度列,因为所有这些仍然属于同一个等位基因调用)。
其次,我想要的值是第 3 列和第 4 列中的值的负 1,例如如果单元格(i,3)=11,那么我想在标题“等位基因”下搜索 10(注意有一个或没有出现这个值),最后我正在寻找第 3 列或第 4 列中的值加 1 的值,例如单元格(i,4)=17,然后我想搜索 18。
然后是第二种方法,用于查找等位基因调用两侧的值(第 3 列和第 4 列值)。我需要使用与等位基因相邻的列,即大小,而不是该值的负 1 或加 1(在搜索范围的等位基因标题下)。准确地说,根据大小,等位基因调用和下一个等位基因的变化是 4。因此,如果等位基因 11 的大小为 100,那么我正在寻找大小为 96 的反向等位基因和正向等位基因的大小为 104 的等位基因。
由于这些值是小数,我的范围是 3-5。
颜色:实际匹配=蓝色;反向等位基因=绿色;正向等位基因=黄色。
下面是我的代码,为了清楚起见,我还附上了一张图片
ArrFS = Split("3 - 5", "-")
mnFS = CDbl(ArrFS(0))
mxFS = CDbl(ArrFS(1))
'loop through rows in first column
For i = 2 To totN
'loop through columns
For j = 7 To lastCol Step 3
On Error Resume Next
If shN.Cells(i, 3) = shN.Cells(i, j) Then
Size = shN.Cells(i, j).Offset(0, 1)
ElseIf shN.Cells(i, 4) = shN.Cells(i, j) Then
Size = shN.Cells(i, j).Offset(0, 1)
End If
If shN.Cells(i, 2) = ("N/A") Then
Resume Next
'True Alleles=Blue (exact value in column 3 or 4)
ElseIf shN.Cells(i, 3).Value = shN.Cells(i, j).Value Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 41 '6
ElseIf shN.Cells(i, 4) = "" Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = xlNone
ElseIf shN.Cells(i, 4) = shN.Cells(i, j) Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 41
End If
For K = 8 To lastCol Step 3
'Reverse Allele-Green (value in columns 3 or 4 minus 1 or within minus 3-5 size range)
If shN.Cells(i, 3) = ("X") Or _
shN.Cells(i, 4) = ("Y") Then
Resume Next
'search based on size range (minus 3-5)
ElseIf ((shN.Cells(i, K) + mnFS) <= Size) And ((shN.Cells(i, K) + mxFS) >= Size) Or _
shN.Cells(i, 3) - 1 = shN.Cells(i, j).Value Then
shN.Range(Cells(i, K - 1), Cells(i, K + 1)).Interior.ColorIndex = 35 Or _
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 35
ElseIf shN.Cells(i, 4) - 1 = shN.Cells(i, j).Value Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 35
End If
Next
'Forward Allele=Yellow (value in columns 3 or 4 plus 1)
If shN.Cells(i, 3) = ("X") Or _
shN.Cells(i, 4) = ("Y") Then
Resume Next
ElseIf shN.Cells(i, 3) + 1 = shN.Cells(i, j) Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 6 '6
ElseIf shN.Cells(i, 4).Value + 1 = shN.Cells(i, j).Value Then
shN.Range(Cells(i, j), Cells(i, j + 2)).Interior.ColorIndex = 6 '4
End If
Next
Next
解决方案
推荐阅读
- python - 字段 'id' 需要一个数字,但得到了 'xyz'
- vb.net - 我可以在 Visual Studio 2003 中导入 System.Security.Cryptography.Xml 吗?
- python - 访问 scapy DHCP 请求中的字段
- html - 怎么做可从底部滚动
- php - Get and display product custom field on WooCommerce archive pages
- qt - 使用 QSortFilterProxyModel
- java - Marklogic - 如何在 Java POJO 中从外部指定集合名称(使用 spring JPA 存储库)
- java - 你可以在没有 starter-web 的情况下使用 spring-boot-starter-test 吗?
- c# - 如何使返回 true 的多个 if 条件在 C# 中执行?
- docker - Docker为同一个服务提供不同的环境变量