Excel宏从一个表/数组中选择值到另一个

时间:2017-03-30 07:04:39

标签: excel excel-vba copy row element vba

我有以下"表"在Excel工作表中。我想做以下改变:

每次有" x"我想在另一张表上报告第一行的相应值和第一列的相应值:

"原始表"

    a1      a2      a3      a7      a8      a9
    main    main    main    main    main    main
u1  X       X        X
u2          X        X
u3                      
u4                      
u5  X           
u6                   X      

"转换表":

  u1 a1
  u1 a2
  u1 a3
  u2 a2
  u2 a3
  u5 a1
  u6 a3 

您能否告诉我将执行此操作的Excel宏是什么?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

这假定表(2)存在(即不检查)。它将使用您在示例中给出的行和列标题填充工作表(2):

Sub ReportOnAllXs()
  Dim r As Integer, c As Integer, r2 As Integer
  r2 = 1
  With Sheets(1)
    For r = 3 To .Cells(.Rows.Count, "A").End(xlUp).row
      For c = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column
        If .Cells(r, c).Value = "X" Then
          Sheets(2).Cells(r2, 1).Value = .Cells(r, 1).Value
          Sheets(2).Cells(r2, 2).Value = .Cells(1, c).Value
          r2 = r2 + 1
        End If
      Next
    Next
  End With
End Sub

我还假设您希望在工作表(2)上的单独单元格中生成行和列值。

答案 1 :(得分:0)

我知道这是Excel VBA问题,内置公式无法完成。在Google表格中,您只需使用内置功能即可实现此目的。当“a1”在B1上且“u1”在A3上时,您只需使用一个公式即可获得该表格。样本表为here

=transpose(
  split(
   concatenate(
    arrayformula(
     if(B3:G8="x", "u"&(row(B3:G8)-row($A$3)+1)&" a"&(column(B3:G8)-column($B$1)+1)&char(10), "")
    )
   ), char(10)
  )
 )

enter image description here