macros遍历工作表所有列中的所有行,并比较单元格以将行复制到文本文件
我正在写一个VB excelmacros,遍历打开的工作簿中的所有工作表。 在每个工作表中,K列中存储的“Y”很less。我想将K列中的值与“Y”进行比较,如果相等,则同一行的列A,B,D,H应该得到插入格式选项卡分隔的文本文件。
这是我试过的代码。 在这个代码中,我只将列K插入到文本文件中。 但是我也想把A,B,D,H和K列值的值插入到由tab分隔的文本fil中。
请帮我一下
我试过的代码是
Sub Button3_Click() Dim fso, myfile, I As Integer, mycount As String, x As String Dim curCell As Range Dim sh As Worksheet x = "Y" Set fso = CreateObject("Scripting.FileSystemObject") Set myfile = fso.CreateTextFile("d:\RECP_IMP_COLUMNS.txt", True) myfile.WriteLine ("Work Sheet Names are as follows") For Each sh In ActiveWorkbook.Worksheets For Each curCell In Sheet4.Range("K1:K300").Cells If (curCell.Value = x) Then myfile.WriteLine (curCell) End If Next curCell Next myfile.Close End Sub
您可以使用Range对象和vbTab
常量的.Offset()
方法来创build制表符分隔的空格
.Offset(rows, columns)
需要2个参数。 当前单元格向上或向下的行数。 为了导航,你给它一个负面的价值去下降一个积极的。 除了您使用负向左移动和正向右移之外,同样适用于列。
vbTab
在上下文中的两个对象之间创build一个选项卡
"this is " & vbtab & " tab delimited"
我修改了一下你的比较方法,并添加了StrComp()函数 。 这是更可靠的,你可以指定比较参数。
请参阅如何在VBA中比较string比较中的=
运算符的更多详细信息。
我已经改变了你的Sheet4.Range("K1:K300")
因为这有点误导和错误。 你遍历所有表中的循环,但是每个循环只使用Sheet4
。 因此,在文本文件中打印的所有结果都将是Sheet4
列K的副本。
在行末尾的_
下划线将代码分割成更多行,这样可以更多地挤压代码,使代码更具可读性和清晰性。
Sub Button3_Click() Dim fso, myfile, I As Integer, mycount As String, x As String Dim curCell As Range Dim sh As Worksheet x = "Y" Set fso = CreateObject("Scripting.FileSystemObject") Set myfile = fso.CreateTextFile("d:\RECP_IMP_COLUMNS.txt", True) myfile.WriteLine ("Work Sheet Names are as follows") For Each sh In ActiveWorkbook.Worksheets For Each curCell In sh.Range("K1:K300").Cells If StrComp(curCell, x, vbTextCompare) = 0 Then myfile.WriteLine curCell.Offset(0, -10) & vbTab & _ curCell.Offset(0, -9) & vbTab & _ curCell.Offset(0, -7) & vbTab & _ curCell.Offset(0, -3) & vbTab & _ curCell End If Next curCell Next myfile.Close End Sub
希望这可以帮助 :)