搜索一系列文本,如果找到,将单元格复制到电子表格的另一部分
Posted
技术标签:
【中文标题】搜索一系列文本,如果找到,将单元格复制到电子表格的另一部分【英文标题】:Search a range of text, if found, copy cells to another part of spreadsheet 【发布时间】:2014-04-22 19:47:36 【问题描述】:我是制作 excel 宏的新手,所以不知道如何编写代码。基本上,在运行时,我想在一系列单元格(在本例中为 A2-A25)搜索某些数字范围(如 1700-1799、2900-2999),如果找到,将它们复制/排序到另一个位置电子表格。
例如,工作表(运行后)如下所示: 1712 2983 2931 1723 第1745章
1712 1723 第1745章
2983 2931
这样的宏可能吗?
【问题讨论】:
到目前为止你有没有尝试过?如果没有 - Macro Recorder 对你来说是一个好的开始。 加里的学生给了我我需要的东西。谢谢:) 【参考方案1】:这会将结果放在 B 和 C 列中:
Sub GetValues()
Dim A As Range, r As Range
Dim i As Long, j As Long
Dim v As Long
Set A = Range("A2:A25")
i = 1
j = 1
For Each r In A
v = r.Value
If v >= 1700 And v <= 1799 Then
Cells(i, "B").Value = v
i = i + 1
End If
If v >= 2900 And v <= 2999 Then
Cells(j, "C").Value = v
j = j + 1
End If
Next r
End Sub
编辑#1:
此版本将结果存储在 A 列中,从 row #30 和 row #50 开始............ ........根据您的需要进行修改:
Sub GetValues()
Dim A As Range, r As Range
Dim i As Long, j As Long
Dim v As Long
Set A = Range("A2:A25")
i = 30
j = 50
For Each r In A
v = r.Value
If v >= 1700 And v <= 1799 Then
Cells(i, "A").Value = v
i = i + 1
End If
If v >= 2900 And v <= 2999 Then
Cells(j, "A").Value = v
j = j + 1
End If
Next r
End Sub
编辑#2:
此版本复制整行:
Sub GetValues()
Dim A As Range, r As Range
Dim i As Long, j As Long
Dim v As Long
Set A = Range("A2:A25")
i = 30
j = 50
For Each r In A
v = r.Value
If v >= 1700 And v <= 1799 Then
r.EntireRow.Copy Cells(i, "A")
i = i + 1
End If
If v >= 2900 And v <= 2999 Then
r.EntireRow.Copy Cells(j, "A")
j = j + 1
End If
Next r
End Sub
【讨论】:
太棒了,这非常接近我的需要,也是我跳下的好地方。想知道是否可以调整。与其将值复制到不同的列,是否可以将在其中找到该值的行(从 A 到 J)复制到电子表格下方的行(例如,第 30 行)? 你绝对摇滚。我什至无法表达你刚刚为我省了多少麻烦。太棒了。非常感谢! 如果可能,再进行一次调整。我想复制整行,而不仅仅是找到数字的单元格。例如,如果在第 2 行找到 2912,它将 A2 - J2 复制到第 30 行。 给我大约 1 小时【参考方案2】:你不需要宏,你可以使用这个数组公式:
=SMALL(IF(($A$1:$A$25>=1700)*($A$1:$A$25<=1799);$A$1:$A$25;"");ROW(A1))
例如在 c1 中写入,然后向下复制以获取所有值。
你需要 Ctrl Shift Enter 才能输入公式
根据您的区域设置,您可能需要替换“;”由“,”
【讨论】:
以上是关于搜索一系列文本,如果找到,将单元格复制到电子表格的另一部分的主要内容,如果未能解决你的问题,请参考以下文章
Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格