拉出矩阵的列标题和行标题

时间:2014-05-07 14:22:05

标签: excel vba excel-vba matrix

所以我有一个格式如下的矩阵:

|           | joe   | michelle  | tom   |  
|:-----:    |:---:  |:--------: |:---:  |  
|  red      |  1    |     0     |  1    |  
|  blue     |  0    |     1     |  0    |  
| green     |  0    |     0     |  0    |  

我试图在excel中编写VBA,根据此表创建两列。如果矩阵内的单元格等于" 1",那么我想将列名和行名写入列表中。例如,因为行" red"有一个" 1"在列"乔" " tom"和row" blue"有一个" 1"在" michelle"下,我的新表将是这样的:

|    joe    |  red  |  
|    tom    |  red  |  
| michelle  | blue  | 

这是我到目前为止写的VBA,但它不起作用,我遇到了障碍。

sub subname()  
dim i as integer  
for i = 1 to 3  
  if cells(2,i).value=1 then  
    cell(5,i).value = cells(1,i).value  
  end if  
next i  
end sub  

2 个答案:

答案 0 :(得分:1)

你只有一个周期...

Dim x As Integer

Range("B19").Select
x = 4
For i = 1 To 3  ' Row
    For e = 1 To 3  ' Column
        If ActiveCell.Offset(i, e).Value = "1" Then
            x = x + 1
            ActiveCell.Offset(x, 0).Value = ActiveCell.Offset(0, e).Value
            ActiveCell.Offset(x, 1).Value = ActiveCell.Offset(i, 0).Value
        End If
    Next
Next

我认为B19是桌子的top_left角落...
好的,正确的代码是:

Dim i As Integer
For i = 1 To 3
  If Cells(2, i + 1).Value = 1 Then
    Cells(5, 1).Value = Cells(1, i + 1).Value
  End If
Next i

如果表的top_left是A1,则错误是i的引用。您需要添加1或将周期从2更改为4.
第二个"错误"它将值放在单元格(5,i)而不是单元格(5,1)中。在这种情况下,您必须将名称放在修复位置。在一个循环中,你改变单元格(5 + e,1)......

答案 1 :(得分:0)

enter image description here

您也可以使用此代码。

Sub prabhat()
Dim rng As Range
Dim r As Integer
Dim c As Integer
Dim lastRow As Integer
Dim lastRow2 As Integer
Set rng = Range("a2:d4")
For Each dng In rng
lastRow = Range("E" & Rows.Count).End(xlUp).Row
lastRow2 = Range("F" & Rows.Count).End(xlUp).Row
If dng.Value = 1 Then
r = dng.Row
c = dng.Column
Range("E" & lastRow + 1).Value = Cells(r, 1).Value
Range("F" & lastRow2 + 1).Value = Cells(1, c).Value
End If
Next dng
End Sub