EXCEL VBA 要求 在sheet1中某一列的单元各种有字符串 石材 在sheet2中显示sheet1中的有该单元格的行

PrivateSubCommandButton1_Click()Worksheets.AddActiveSheet.Name="完成"Worksheets.AddActi... Private Sub CommandButton1_Click()
Worksheets.Add
ActiveSheet.Name = "完成"
Worksheets.Add
ActiveSheet.Name = "未完成"
End Sub
Private Sub CommandButton2_Click()
With Sheets("完成") '在sheet2表操作
n = 1 '变量n为0,n主要用来存储符合条件的个数
For i = 4 To 300 '在第4到第1000行循环
If Sheets("台账").Range("T" & i) > 0 Then '如果sheet1表的ai单元格的底色是黄色
.Range("A" & n + 1 & ":Z" & n + 1) = Sheets("台账").Range("A" & i & ":Z" & i).Value 'sheet2表的相关行复制过来sheet1的内容
n = n + 1
End If
Next
End With
With Sheets("未完成")
n = 1
For i = 4 To 300
If Sheets("台账").Range("T" & i) = 0 Then
.Range("A" & n + 1 & ":Z" & n + 1) = Sheets("台账").Range("A" & i & ":Z" & i).Value
n = n + 1
End If
Next
End With
n = 0
End Sub
If Sheets("台账").Range("T" & i) > 0 Then '如果sheet1表的ai单元格的底色是黄色 主要是把这段改一下就好了 我find的那个函数不会用
展开
 我来答
2724421
2012-07-13 · TA获得超过2495个赞
知道大有可为答主
回答量:1554
采纳率:71%
帮助的人:717万
展开全部
实在是看不懂你的代码,不知道该怎么帮你修改,想帮你重新写代码,又不知道你具体要搜索哪一列,
所以,我只好给你写了一个例子并加了注释 你根据注释按F8单步执行应该能弄明白find和findnext的用法.
代码如下:(例中的sheet1中的A列的A1:A10你随机在几个单元格输入A,同行任意输入一些数据.然后执行下面代码)
插入模块,粘贴代码
Sub test()
Dim rng As Range
istr = "A" '给变量istr赋值为字母A
Set rng = Sheet1.Range("A1:A10").Find(istr, lookat:=xlPart) '在A1:A10范围内搜索包含字母A的单元格并赋值给rng变量
If Not rng Is Nothing Then '如果rng不等于nothing
iadd = rng.Address(0, 0) '给变量iadd赋值为搜索到的单元格地址
Do
irow = Sheet2.Range("A65536").End(xlUp).Row '获取工作表2的A列最后一个有数据的行号
Sheet2.Rows(irow + 1).Value = Sheet1.Rows(rng.Row).Value '把找到的包含字母A的那一行的数据写入工作表2的有数据行的下一行
Set rng = Sheet1.Range("A1:A10").FindNext(rng) '继续搜索包含字母A的单元格并赋值给rng变量
Loop While Not rng Is Nothing And rng.Address(0, 0) <> iadd '如果rng不等于空并且 rng的单元格地址不等于初始搜到的单元格地址继续do循环
End If
End Sub

-----------分割线----------
完整的find VBA帮助说明

Find 方法
应用于 Range 对象的 Find 方法。
在区域中查找特定信息,并返回 Range 对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回 Nothing。本方法不影响选定区域或活动单元格。
有关在 Visual Basic 中使用 Find 工作表函数的详细信息,请参阅在 Visual Basic 中使用工作表函数。
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
expression 必需。该表达式返回一个 Range 对象。
What Variant 类型,必需。要搜索的数据。可为字符串或任意 Microsoft Excel 数据类型。
After Variant 类型,可选。表示搜索过程将从其之后开始进行的单元格。此单元格对应于从用户界面搜索时的活动单元格位置。值得注意的是,After 必须是区域中的单个单元格。请记住搜索是从该单元格之后 开始的;直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。
LookIn Variant 类型,可选。信息类型。
LookAt Variant 类型,可选。可为以下 XlLookAt 常量之一:xlWhole 或 xlPart。
SearchOrder Variant 类型,可选。可为以下 XlSearchOrder 常量之一:xlByRows 或 xlByColumns。
SearchDirection XlSearchDirection 类型,可选。搜索的方向。
XlSearchDirection 可为以下 XlSearchDirection 常量之一。
xlNext 默认值
xlPrevious
MatchCase Variant 类型,可选。若为 True,则进行区分大小写的查找。默认值为 False。
MatchByte Variant 类型,可选。仅在选择或安装了双字节语言支持时使用。若为 True,则双字节字符仅匹配双字节字符。若为 False,则双字节字符可匹配其等价的单字节字符。
SearchFormat Variant 类型,可选。搜索的格式。
说明
每次使用本方法后,参数 LookIn、LookAt、SearchOrder 和 MatchByte 的设置将保存。如果下次调用本方法时不指定这些参数的值,就使用保存的值。设置这些参数将更改“查找和替换”对话框中的设置,如果您忽略参数,更改“查找和替换”对话框中的设置将更改使用的保存值。若要避免这种问题的出现,每次使用该方法时请明确设置这些参数。
可以使用 FindNext 和 FindPrevious 方法重复搜索。
当搜索到指定的搜索区域的末尾时,本方法将绕回到区域的开始继续搜索。发生绕转后,若要停止搜索,请保存第一个找到的单元格地址,然后依据该保存地址测试每个后续查找到的单元格地址。
若要进行更为复杂的模式匹配查找,请用 For Each...Next 语句和 Like 运算符。例如,下列代码在单元格区域 A1:C5 中搜索字体名称以“Cour”开始的单元格。当 Microsoft Excel 找到匹配单元格以后,就将其字体改为“Times New Roman”。
For Each c In [A1:C5]
If c.Font.Name Like "Cour*" Then
c.Font.Name = "Times New Roman"
End If
Next

示例
本示例在工作表的单元格区域 A1:A500 中查找包含值 2 的所有单元格,并将这些单元格的值更改为 5。
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
追问
基本上就是这个意思,,不是模块 搞成类是这样的话就完美了
Private Sub CommandButton1_Click()
Worksheets.Add
ActiveSheet.Name = "石材归并"
With Sheets("石材归并")
n = 1
For i = 4 To 300
if。。。。。。。。
石材归并.Range("A" & n + 1 & ":Z" & n + 1) = Sheet1.Cells.Find("石材").Range("A" & i & ":Z" & i).Value 'sheet2表的相关行复制过来sheet1的内容
n = n + 1
Next
End With
End Sub
追答
其实你自己简单的修改一下就可以套进commandbutton1_Click() 过程
Private Sub CommandButton1_Click()
Dim rng As Range
Worksheets.Add
ActiveSheet.Name = "石材归并"
With Sheets("石材归并")
istr = "石材"
Set rng = Sheet1.Range("c1:c100").Find(istr, lookat:=xlPart) '这个指定的列和范围你自己改一下
If Not rng Is Nothing Then
iadd = rng.Address(0, 0)
Do
irow = .Range("A65536").End(xlUp).Row
.Rows(irow + 1).Value = Sheet1.Rows(rng.Row).Value
Set rng = Sheet1.Range("c1:c100").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address(0, 0) iadd
End If
End Sub
zhjf_21st
2012-07-13 · 超过30用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:77.6万
展开全部
If Sheets("Sheet1").Range("A" & i).Interior.colorIndex = 6 then
更多追问追答
追问
不是这个 我是想查找 单元各种字符串  石头   然互输出该行
n = 1
For i = 4 To 300
If Sheets("台账").Range("T" & i) = 0 Then
.Range("A" & n + 1 & ":Z" & n + 1) = Sheets("台账").Range("A" & i & ":Z" & i).Value
n = n + 1
追答
不是很明白你的意思,是否是查找某一个区域中, 如果单元格的值为"石头",则输出?
Dim rng as Range
Set rng = Range("查找范围").find("石头", Lookin:=xlValues) ’将查找结果赋值给rng
if NOT rng is nothing then '如果查到了(rng不为空)
if len(rng)=2 then ‘如果rng的长度为2,即只有2个字
‘查找到了,按照你的要求处理rng中的内容
end if
end if
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式