Excel精英培训网

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

[已解决]使用VBA一表内横向输入数据时,另一表格以竖向自动填入相应数据

[复制链接]
发表于 2017-5-10 19:09 | 显示全部楼层 |阅读模式
麻烦各位老师了,我因工作需要,急需VBA这功能。要求是,在”清单“工作表从指定单元格I2起往右输入数据时,在”汇总“工作表指定单元格E2起以竖向自动填入,如:
当”清单“工作表 I2 单元格输入1时,”汇总“工作表 E2 单元格自动填入1;
”清单“工作表 J2 单元格输入2时,”汇总“工作表 E3 单元格自动填入2;
”清单“工作表 K2 单元格输入3时,”汇总“工作表 E4 单元格自动填入3;
以此类推。

最佳答案
2017-5-11 19:35
wwj804 发表于 2017-5-11 18:32
老师你好,效果是有了,但是方向错了,我的要求是02表输入数据时01表自动填入,现在反过来了,怎么改 ...

见附件

Book1.rar

9.53 KB, 下载次数: 6

发表于 2017-5-10 19:57 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim a
  3. If Application.Intersect(Target, Range("e2:e65536")) Is Nothing Then
  4.     Exit Sub
  5.     Else
  6.         a = Target.Row
  7.         Sheets("汇总").Cells(2, 7 + a) = Target
  8. End If
  9. End Sub
复制代码


回复

使用道具 举报

 楼主| 发表于 2017-5-11 08:09 | 显示全部楼层

代码加进去后,不对啊,怎么没反应呢?Excel 2007,老师,你直接写在附件中吧

回复

使用道具 举报

发表于 2017-5-11 08:59 | 显示全部楼层
wwj804 发表于 2017-5-11 08:09
代码加进去后,不对啊,怎么没反应呢?Excel 2007,老师,你直接写在附件中吧

确认两个事项:
如果清单输入时跳过一列,那么要不要在汇总表内体现出此空单元格?
如果清单输入时没有顺序,比如M1→I1→P1这样的顺序时,汇总表内要怎么体现?
回复

使用道具 举报

发表于 2017-5-11 09:00 | 显示全部楼层
另,如果你要清单表内修改了一个数字,怎么体现至汇总表?
回复

使用道具 举报

发表于 2017-5-11 14:43 | 显示全部楼层
自己把页名改过来, 程序里的"02"也改过来

Book1.zip

12.55 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2017-5-11 18:32 | 显示全部楼层
france723 发表于 2017-5-11 14:43
自己把页名改过来, 程序里的"02"也改过来

老师你好,效果是有了,但是方向错了,我的要求是02表输入数据时01表自动填入,现在反过来了,怎么改?
回复

使用道具 举报

发表于 2017-5-11 19:35 | 显示全部楼层    本楼为最佳答案   
wwj804 发表于 2017-5-11 18:32
老师你好,效果是有了,但是方向错了,我的要求是02表输入数据时01表自动填入,现在反过来了,怎么改 ...

见附件

Book1.zip

12.51 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2017-5-11 19:43 | 显示全部楼层

谢谢老师,太好了!
回复

使用道具 举报

 楼主| 发表于 2017-5-12 10:09 | 显示全部楼层
本帖最后由 wwj804 于 2017-5-12 10:12 编辑

你好老师,我想把二组代码整合在一起,可是不会做,怎样做?

代码1:
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim a
    If Target.Row <> 2 Then
    Exit Sub
    Else
        a = Target.Column
        Sheets("汇总").Cells(a - 7, 5) = Target
    End If
End Sub

代码2:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row < 3 Or Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Len(Target) = 0 Then Target.EntireRow = ""
    arr = Sheet8.[a1].CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    For i = 2 To UBound(arr)
        d(CStr(arr(i, 1))) = i
    Next
    i = d(CStr(Target.Value))
    If i > 0 Then
        Target.Offset(, 1) = arr(i, 4)
        Target.Offset(, 2) = arr(i, 9)
    End If
        
    Application.EnableEvents = True
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 20:26 , Processed in 0.386766 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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