VBA 读取I列非空单元格,满足>到[之间的字符全部保留,在> [ 以外字符删除
时间: 2023-09-20 16:06:14 浏览: 147
VBA 按照某一列进行筛选拆分数据,拆分成多个表或多个Sheet,按某列检查重复生成新的Sheet,删除除本表外的所有表
5星 · 资源好评率100%
### 回答1:
可以使用以下代码实现:
```VBA
Sub FilterData()
Dim lastRow As Long
Dim i As Long
Dim cellValue As String
Dim result As String
lastRow = Cells(Rows.Count, "I").End(xlUp).Row '获取最后一行的行数
For i = 1 To lastRow '循环遍历每一行
cellValue = Trim(Cells(i, "I").Value) '获取单元格的值并去除首尾空格
If InStr(cellValue, ">") > 0 And InStr(cellValue, "[") > 0 Then '判断是否满足条件
result = Mid(cellValue, InStr(cellValue, ">") + 1, InStr(cellValue, "[") - InStr(cellValue, ">") - 1) '获取符合条件的部分
Cells(i, "I").Value = result '将结果写入单元格
Else
Cells(i, "I").Value = "" '如果不满足条件,则清空单元格
End If
Next i
End Sub
```
这段代码会遍历 I 列中的每一个单元格,如果单元格中包含 ">" 和 "[",那么就将它们之间的字符提取出来,然后写入到同一个单元格中。如果不满足条件,则清空单元格。
### 回答2:
通过使用VBA编写一个宏来实现这个需求。
首先,我们需要定义一个函数来获取满足条件的文本。函数的参数将是一个单元格的地址,函数将返回满足条件的文本。
```
Function GetFilteredText(cellAddress As String) As String
Dim text As String
Dim startPos As Integer
Dim endPos As Integer
text = Range(cellAddress).Value
startPos = InStr(1, text, ">") + 1
endPos = InStr(startPos, text, "[")
If startPos > 0 And endPos > 0 Then
GetFilteredText = Mid(text, startPos, endPos - startPos)
End If
End Function
```
接下来,我们将遍历I列的每个非空单元格,并将满足条件的文本保存到新的单元格中。
```
Sub FilterText()
Dim lastRow As Integer
Dim cell As Range
Dim filteredText As String
lastRow = Cells(Rows.Count, "I").End(xlUp).Row
For Each cell In Range("I1:I" & lastRow)
If Not IsEmpty(cell) Then
filteredText = GetFilteredText(cell.Address)
' 将满足条件的文本保存到J列对应的单元格中
Range("J" & cell.Row).Value = filteredText
End If
Next cell
End Sub
```
将以上代码复制粘贴到VBA编辑器中,然后运行`FilterText`宏。这个宏将会遍历I列的每个非空单元格,将满足条件的文本保存到J列的对应单元格中。
### 回答3:
在VBA中,如果我们想要读取I列中的非空单元格,并且只保留其中" > "和" [ "之间的字符,同时删除其他字符,可以使用以下代码实现:
首先,我们需要定义一个用于存储结果的字符串变量,以及两个整数变量用于记录">"和"["的位置。
```vba
Dim result As String
Dim startPos As Integer
Dim endPos As Integer
```
然后,我们使用一个循环来逐个检查I列中的单元格。假设I列中的数据从第1行到第n行:
```vba
For i = 1 To n
```
在循环中,我们首先判断当前单元格是否为空,如果为空则跳过该单元格:
```vba
If Not IsEmpty(Range("I" & i).Value) Then
```
如果单元格不为空,我们使用Instr函数找到字符串" > "和" [ "在该单元格中出现的位置。如果找到了">"和"[",则分别将它们的位置存储到startPos和endPos变量中:
```vba
startPos = InStr(1, Range("I" & i).Value, " > ")
endPos = InStr(1, Range("I" & i).Value, " [ ")
```
接下来,我们判断startPos和endPos的值是否大于0,如果大于0则表示找到了">"和"[",我们使用Mid函数从原始字符串中提取出满足条件的部分,并将其添加到result变量中:
```vba
If startPos > 0 And endPos > 0 Then
result = result & Mid(Range("I" & i).Value, startPos + 3, endPos - startPos - 3) & vbNewLine
End If
```
最后,在循环结束后,我们可以打印或者使用result变量中存储的结果。
```vba
MsgBox result
```
这样,我们就可以通过以上代码实现VBA读取I列非空单元格,满足">"和"["之间的字符全部保留,并删除其他字符的需求。
阅读全文