Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3561|回复: 10

[已解决]请帮忙写一个函数

[复制链接]
发表于 2015-8-14 08:46 | 显示全部楼层 |阅读模式
因为这个数据每天都要输,而且还有很多是重复的,比如10号输入过了,但是11号又可能要输。所以我想做一个函数,下拉一下就自动填写已经输入过的数据。我就不用输入了



=如果上面有50-4128-00-45这料号填写过了售价,那这里就直接等于上面填写过的售价,请问该怎么写代码
1.jpg
最佳答案
2015-8-14 09:44
Private Sub ListBox1_Click()
    ActiveCell = ListBox1.Value
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Row > 2 And Target.Column = 4 And Target.Count = 1 Then
        Dim A, v, i, d
        Set d = CreateObject("scripting.dictionary")
        A = Range("c3:d" & Range("d65536").End(3).Row)
        v = Target.Offset(0, -1).Value

        '统计列表
        For i = 1 To UBound(A)
            If A(i, 1) = v Then d(Format(A(i, 2), "0.00")) = ""
        Next i

        '导出列表
        With ListBox1
            .Left = Target.Offset(0, 1).Left
            .Top = Target.Top
            .Clear
            .List = d.keys
        End With
        Set d = Nothing
    End If
End Sub

副本各车间每日成本费用表8.12.rar (27.63 KB, 下载次数: 5)

副本各车间每日成本费用表8.12.rar

13.85 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-8-14 09:01 | 显示全部楼层
QQ截图20150814085512.jpg


你需要在另外一个表里,保存一份数据:A列料号,B列是对应的售价。
那么,在“成本控制表”里,就可用查找函数了,如VLOOKUP()。
回复

使用道具 举报

 楼主| 发表于 2015-8-14 09:05 | 显示全部楼层
爱疯 发表于 2015-8-14 09:01
你需要在另外一个表里,保存一份数据:A列料号,B列是对应的售价。
那么,在“成本控制表”里,就可 ...

不需要在另一份表的,就是在这份上,因为是每天有专人在这份表格上更新日期、型号。料号,然后我来填写售价。她每天的数据都是往下面单元格加上去的,不用重新弄一份
回复

使用道具 举报

发表于 2015-8-14 09:13 | 显示全部楼层
D59=IF(ISERROR(VLOOKUP(B59,B$3:D58,3,0)),"",VLOOKUP(B59,B$3:D58,3,0))
下拉,如果前面出現過.就自動出來.如果前面沒有.得到的結果就是空值

评分

参与人数 1 +1 收起 理由
lidaoying6 + 1 神马都是浮云

查看全部评分

回复

使用道具 举报

发表于 2015-8-14 09:30 | 显示全部楼层
向4楼学习!
回复

使用道具 举报

发表于 2015-8-14 09:43 | 显示全部楼层
=IF(MATCH(A3&B3&C3,A$3:A122&B$3:B122&C$3:C122,0)=ROW(A3)-2,"请输入",INDEX(D:D,MATCH(A3&B3&C3,A$3:A122&B$3:B122&C$3:C122,0)+2))
数组公式,下拉
回复

使用道具 举报

发表于 2015-8-14 09:44 | 显示全部楼层    本楼为最佳答案   
Private Sub ListBox1_Click()
    ActiveCell = ListBox1.Value
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Row > 2 And Target.Column = 4 And Target.Count = 1 Then
        Dim A, v, i, d
        Set d = CreateObject("scripting.dictionary")
        A = Range("c3:d" & Range("d65536").End(3).Row)
        v = Target.Offset(0, -1).Value

        '统计列表
        For i = 1 To UBound(A)
            If A(i, 1) = v Then d(Format(A(i, 2), "0.00")) = ""
        Next i

        '导出列表
        With ListBox1
            .Left = Target.Offset(0, 1).Left
            .Top = Target.Top
            .Clear
            .List = d.keys
        End With
        Set d = Nothing
    End If
End Sub

副本各车间每日成本费用表8.12.rar (27.63 KB, 下载次数: 5)

评分

参与人数 1 +1 收起 理由
lidaoying6 + 1 神马都是浮云

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-8-14 10:24 | 显示全部楼层
爱疯 发表于 2015-8-14 09:44
Private Sub ListBox1_Click()
    ActiveCell = ListBox1.Value
End Sub

太强大了!!!!!!!!!!!!超出比预想效果
回复

使用道具 举报

 楼主| 发表于 2015-8-14 10:25 | 显示全部楼层
心正意诚身修 发表于 2015-8-14 09:13
D59=IF(ISERROR(VLOOKUP(B59,B$3:D58,3,0)),"",VLOOKUP(B59,B$3:D58,3,0))
下拉,如果前面出現過.就自動出來 ...

谢谢,正是想要的结果!!!!!!
回复

使用道具 举报

发表于 2015-8-14 10:32 | 显示全部楼层
Listbox显示已录入数据.rar (25.8 KB, 下载次数: 4)

评分

参与人数 1 +1 收起 理由
lidaoying6 + 1 淡定

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 21:53 , Processed in 0.495351 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表