【问题标题】:Pull the column title and row title of a matrix拉取一个矩阵的列标题和行标题
【发布时间】:2014-05-08 00:15:08
【问题描述】:

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

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

我正在尝试在 excel 中编写 VBA 以基于此表创建两列。如果矩阵内的单元格等于“1”,那么我想将列名和行名写入一个列表。例如,因为“red”行在“joe”和“tom”列中有一个“1”,而“blue”行在“michelle”下有一个“1”,我的新表将是这样的:

|    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  

【问题讨论】:

  • 1 列可以包含多于 1 个数字 1 的实例吗?即名称可以有不止一种颜色吗?

标签: vba excel matrix


【解决方案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 是桌子的左上角 ...
好的,正确的代码是:

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) 中。在这种情况下,您必须将名称放在固定位置。在一个循环中,您会更改 Cells(5+e,1)...

【讨论】:

  • 是的,我意识到我只有一个周期,或“列表”的一侧,但我的代码甚至没有生成任何东西,我不知道为什么:(谢谢你的回复不过。我正在尝试为自己学习 VBA,所以我不想像往常一样复制和粘贴其他人的代码 :)
  • 在您的示例数据中,第一个数据行是 3,但您的宏测试不包含任何 1 的第 2 行。
【解决方案2】:

您也可以使用此代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多