|
本帖最后由 Ex_EP 于 2014-11-23 13:18 编辑
我 这个代码 用 sub 过程 可以实现 不知道为什么 改成了 function 函数 总是无法实现
要求是:1、表中的 A B C D 列 为数据区域 ,F G 为条件 区域 ,如果 数据区域中的 订单号 和 品名都一样 则将 C D 列的数据 汇总成一句话 ,显示在 H 列 效果 如 H 列 所示
我的代码 已经写好了 就是不知道 为什么 总是返回#value 这样的错我 请高手赐教- Function lianhua(danhao As Range, pinming As Range)
- Dim c As Range, str$, q!
- '查找订单号出现的首行和最后一行
- With Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
- Set c = .Find(danhao.Value, , xlValues, xlWhole, xlByColumns)
- If Not c Is Nothing Then
- firstaddress = c.Address
- Do
- lastaddress = c.Address
- Set c = .FindNext(c)
- Loop While Not c Is Nothing And firstaddress <> c.Address
- End If
- End With
- '如果查找不到相应的订单号,则进行相应的错误处理
- If c Is Nothing Then q = q + 1: GoTo 100
- '根据查找到的订单号,设置品名的查找区域
- With Range("b" & (Range(firstaddress).Row - 1) & ":b" & Range(lastaddress).Row)
- Set c = .Find(pinming.Value, , xlValues, xlWhole, xlByColumns)
- '查找品名出现的首行和最后一行
- If Not c Is Nothing Then
- firstaddress1 = c.Address
- Do
- lastaddress1 = c.Address
- Set c = .FindNext(c)
- If c.Row = Range(firstaddress).Row - 1 Then Exit Do
- Loop While Not c Is Nothing And firstaddress1 <> c.Address
- End If
- End With
- '如果查找不到品名,则进行相应的错误处理
- If c Is Nothing Then q = q + 1: GoTo 100
- '根据查找到的品名的首行和最后一行,设置相应的废板数和质量说明区域
- a = Range("c" & Range(firstaddress1).Row & ":d" & Range(lastaddress1).Row).Value
- '采用循环的方式将废板数量和质量说明汇总成一句话
- For i = 1 To UBound(a)
- str = str & a(i, 1) & a(i, 2) & "片,"
- Next i
- '查找不到订单号或者品名时进行的错误处理
- If q <> 0 Then
- 100:
- lianhua = ""
- End
- Else
- lianhua = Left(str, Len(str) - 1)
- End If
- End Function
复制代码
Ex_EP 发表于 2014-11-23 12:25
如果我表述的 大家 看不明白 还可以再问我 - Function demo(区域 As Range, 条件 As Range)
- Dim ar, br, d As Object, str As String, tj As String, i As Long
- Set d = CreateObject("scripting.dictionary")
- ar = 区域: br = 条件
- If UBound(br) = 1 And UBound(br, 2) = 2 Then
- tj = br(1, 1) & br(1, 2)
- For i = 1 To UBound(ar)
- str = ar(i, 1) & ar(i, 2)
- d(str) = d(str) & ar(i, 3) & ar(i, 4) & "片,"
- Next
- demo = d(tj)
- End If
- End Function
复制代码
|
|