根据 IF 结果写入 TXT
Posted
技术标签:
【中文标题】根据 IF 结果写入 TXT【英文标题】:Writing to TXT depending of IF outcome 【发布时间】:2018-02-01 09:36:15 【问题描述】:我有一个 Excel 文件,其中添加了一些数据,它可以是 1 行,也可以是 1000 行。
VBA 脚本根据 C 列和 E 列匹配将使用的结果:
Sub LoopRange()
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer
Dim N As Long
N = Cells(1, 1).End(xlDown).Row
For i = 2 To N
If Range("E" & i).Value = "South" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "South" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "West" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "West" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "North" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "North" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "East" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "East" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "NorthWest" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "NorthWest" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "NorthEast" And Range("C" & i).Value = "Yes" Then
'Do this
End If
Next i
For i = 2 To N
If Range("E" & i).Value = "NorthEast" And Range("C" & i).Value = "No" Then
'Do this
End If
Next i
End Sub
我想根据正确的 IF 语句创建不同的文本文件。要打印到文本文件的值是最静态的,但我想在文本中使用的 A 列和 B 列中的值。
例如: 第 1 行和第 9 行匹配 IF 语句
If Range("E" & i).Value = "South" And Range("C" & i).Value = "Yes" Then...
然后我想获取 A2 和 B2 中的值以用于文本文件中的一个结果以及其他一些静态代码。 我想在同一个文本文件中获取 A9 和 B2 中的值,但要在另一行中。
我找到了如何将数据导出到 TXT,但我不知道如何根据 IF 语句选择要检索的内容。
myFile = Application.DefaultFilePath & "\South_Rename.txt"
Set rng = Selection
Open myFile For Output As #1
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
cellValue = rng.Cells(i, j).Value
If j = rng.Columns.Count Then
Write #1, cellValue
Else
Write #1, cellValue,
End If
Next j
Next i
Close #1
有人有什么建议吗?
【问题讨论】:
您只需要一个 For 循环,然后评估每个可能的场景。您可以根据结果为另一个变量赋值。 【参考方案1】:如下所示,请记住,Output 将在写入之前完全清空文本文件,因此我包含了 Append 方法作为添加到文本文件而不先清空其内容的替代方法,有一个看看下面代码中的cmets:
Sub LoopRange()
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer
Dim N As Long
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set your worksheet, amend as required
N = ws.Cells(1, 1).End(xlDown).Row 'get the last row with data on Column A
For i = 2 To N
If ws.Range("E" & i).Value = "South" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\South_Yes.txt" 'choose the text file to write to
'Open myFile For Output As #1 'Output will re-write the file
Open myFile For Append As #1 'Append will add the rows to the file
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "South" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\South_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "West" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\West_Yes.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "West" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\West_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "North" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\North_Yes.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "North" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\North_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "East" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\East_Yes.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "East" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\East_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "NorthWest" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\NorthWest_Yes.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "NorthWest" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\NorthWest_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "NorthEast" And ws.Range("C" & i).Value = "Yes" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\NorthEast_Yes.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
ElseIf ws.Range("E" & i).Value = "NorthEast" And ws.Range("C" & i).Value = "No" Then
acellValue = ws.Range("A" & i)
bcellValue = ws.Range("B" & i)
myFile = Application.DefaultFilePath & "\NorthEast_No.txt" 'choose the text file to write to
Open myFile For Append As #1
Write #1, acellValue & ", " & bcellValue & vbNewLine
Close #1
End If
Next i
End Sub
【讨论】:
谢谢。我认为这是在路上。虽然如果我没有理解错,它只会创建一个名为 South_Rename.txt 的文本文件,并且它只会是打印的最后一行。这并不是我想要完成的。对于列 C 和 E 具有相同结果的所有行都应该在同一个文本文件中。在我上面的示例(来自 excel 的图像)中,它会给我一个文件,其中重命名“是”和位置“南”是匹配的,并且将包括第 2 行和第 9 行的 A 列和 B 列的值。然后继续使用匹配的 IF 语句创建新的文本文件。基于 IF 语句的名称? @MarkusSacramento 更新了我的答案,为每个 IF 使用不同的文件,它会将 A 列和 B 列中的值附加到 IF 语句返回 true 的给定行中,然后继续查找其他匹配项并在以下行中写入... 完美,谢谢!现在我只需要修复文件中的结果应该是什么样子并添加一些其他文本。感谢您的所有帮助!以上是关于根据 IF 结果写入 TXT的主要内容,如果未能解决你的问题,请参考以下文章