Excel精英培训网

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

[已解决]查询并拆分

[复制链接]
发表于 2022-4-20 15:19 | 显示全部楼层 |阅读模式
   要求:输入型号,查询总表中型号相同提取相应的数据,生成新的工作表。请高手帮忙编写下VBA代码,谢谢

最佳答案
2022-4-20 17:15
本帖最后由 hasyh2008 于 2022-4-20 17:26 编辑

SHEET1中:
Private Sub Worksheet_Activate()
  Dim Arr()
  Dim X%, I%
  Dim Rng As Range
  On Error Resume Next
  With Sheet1.Cells(2, 2).Validation
    .Delete
    Set Rng = Sheet2.Range("J4:V4")
    X = Rng.Columns.Count
    ReDim Arr(1 To X)
    For I = 1 To X
      Arr(I) = Rng.Cells(1, I)
    Next
    .Add Type:=3, AlertStyle:=1, Operator:=1, Formula1:=VBA.Join(Arr, ",")  '来自一维数组
    .ErrorMessage = "输入的数值有误,请重新输入!"
  End With
  Set Rng = Nothing
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Arr(), Brr(1 To 10000, 1 To 9)
  Dim Str$
  Dim X%, Y%, I%, K%
  On Error Resume Next
  If Target.Address = Range("B2").Address Then
    Str = Sheet1.Range("B2").Text
    Arr = Sheet2.Range("A1").CurrentRegion
    Sheet3.Name = Str
    Sheet3.Range("A2:I10000").ClearContents
    K = 1
    For Y = 10 To 22
      For X = 6 To UBound(Arr)
        If Arr(4, Y) = Str And Arr(X, Y) > 0 Then
          Brr(K, 1) = Str
          For I = 2 To 8
            Brr(K, I) = Arr(X, I)
          Next I
          Brr(K, 9) = Arr(X, Y)
          K = K + 1
        End If
      Next X
    Next Y
  End If
  Sheet3.Range("A2").Resize(K, 9) = Brr
End Sub

样本.rar

18.14 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2022-4-20 16:00 | 显示全部楼层
第一列加下型号

样本.rar

18.45 KB, 下载次数: 2

回复

使用道具 举报

发表于 2022-4-20 16:53 | 显示全部楼层
这个试试看!!!!!!!!!

样本.rar

26.27 KB, 下载次数: 6

回复

使用道具 举报

发表于 2022-4-20 17:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hasyh2008 于 2022-4-20 17:26 编辑

SHEET1中:
Private Sub Worksheet_Activate()
  Dim Arr()
  Dim X%, I%
  Dim Rng As Range
  On Error Resume Next
  With Sheet1.Cells(2, 2).Validation
    .Delete
    Set Rng = Sheet2.Range("J4:V4")
    X = Rng.Columns.Count
    ReDim Arr(1 To X)
    For I = 1 To X
      Arr(I) = Rng.Cells(1, I)
    Next
    .Add Type:=3, AlertStyle:=1, Operator:=1, Formula1:=VBA.Join(Arr, ",")  '来自一维数组
    .ErrorMessage = "输入的数值有误,请重新输入!"
  End With
  Set Rng = Nothing
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Arr(), Brr(1 To 10000, 1 To 9)
  Dim Str$
  Dim X%, Y%, I%, K%
  On Error Resume Next
  If Target.Address = Range("B2").Address Then
    Str = Sheet1.Range("B2").Text
    Arr = Sheet2.Range("A1").CurrentRegion
    Sheet3.Name = Str
    Sheet3.Range("A2:I10000").ClearContents
    K = 1
    For Y = 10 To 22
      For X = 6 To UBound(Arr)
        If Arr(4, Y) = Str And Arr(X, Y) > 0 Then
          Brr(K, 1) = Str
          For I = 2 To 8
            Brr(K, I) = Arr(X, I)
          Next I
          Brr(K, 9) = Arr(X, Y)
          K = K + 1
        End If
      Next X
    Next Y
  End If
  Sheet3.Range("A2").Resize(K, 9) = Brr
End Sub

样本.zip

26.55 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2022-4-20 19:04 | 显示全部楼层
本帖最后由 jordanlive 于 2022-4-22 10:48 编辑

非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 03:37 , Processed in 0.263200 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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