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 

希望这可以帮助 :)