所以我有一个格式如下的矩阵:
| | 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
答案 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)
您也可以使用此代码。
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