我在工作簿中有两张纸,每张纸上都有自己的电子邮件地址列以及其他数据。我将在Sheet1中引用Column1,在Sheet2中引用Column2,其中只有Column1可能列出了重复的电子邮件地址。
我需要确定是否在Column2中找到了Column1中的电子邮件地址,并且每当为true时,都必须运行某些代码。
我用两个嵌套的Do While循环解决了这个问题,其中外部循环从上到下遍历了Column1中名为Cell1的每个单元,内部循环将Cell1与Column2中每个名为Cell2的单元也从上到下进行了比较,如果找到相同的值,则尽早退出内部循环。
为了提高效率,我想按升序对每一列进行排序,并让每个Cell1仅浏览Column2,直到Cell2中的字符串的值大于Cell1中的字符串的值,并迭代下一个Cell1为止。由于先前的Cell2值均小于Cell1并且不能具有相等的值,因此它将从最后循环停止的Cell2继续。
我想出的代码是一个遍历Column1中每个单元格的外部循环,以及一个如下所示的内部循环:
'x1 is the row number of Cell1
'x2 is the row number of Cell2
'below is the code for the internal loop looking through Column2
Do While Sheets(2).Cells(x2, 1).Value <> 0
If LCase(Sheets(1).Cells(x1, 1).Value) < LCase(Sheets(2).Cells(x2, 1).Value) Then
Exit Do
ElseIf LCase(Sheets(1).Cells(x1, 1).Value) = LCase(Sheets(2).Cells(x2, 1).Value) Then
'... code is run
Exit Do
End If
x2 = x2 + 1
Loop
Run Code Online (Sandbox Code Playgroud)
问题是电子邮件地址可以带有连字符(-)和撇号(')。尽管Excel在对列进行排序时会忽略它们,但VBA在比较字母数字值时不会忽略它们。
如果我有:
A B
1 Noemi Noemi
2 no-reply no-reply
3 notify notify …Run Code Online (Sandbox Code Playgroud) 我正在学习VBA,我正在尝试理解For Each ... Next语句的语法.如果语法是:
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
Run Code Online (Sandbox Code Playgroud)
您可以为"元素"和"组"使用哪种变量,并定义它们吗?我问,因为我为函数找到的大多数例子都没有定义"元素".
假设我有一个满是"a","b","c","d"和"N/A"的列,我想确定每个列出现在列中的次数.
到目前为止,我有以下内容:
Sub Count()
Dim lastRow, aCount, bCount, cCount, dCount, NACount As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row
aCount = 0
bCount = 0
cCount = 0
dCount = 0
NACount = 0
For Each MyCell In Range("A1:A" & lastRow)
If MyCell.Value = "a" Then
aCount = aCount + 1
ElseIf MyCell.Value = "b" Then
bCount = bCount + 1
ElseIf MyCell.Value = "c" …Run Code Online (Sandbox Code Playgroud)