在excel VBA上比较horizental细胞和垂直细胞

时间:2017-10-30 12:10:30

标签: excel-vba vba excel

我有一张excel表enter image description here

我希望将垂直细胞的值与horizental中的细胞进行比较,然后放入" X"关于互动

这就是我所做的:

Set c = ThisWorkbook.Worksheets("harnwire")
For j = 2 To 100 Step 1
For i = 2 To 900 Step 1
If c.Cells(i, 1).Value = c.Cells(1, j).Value Then

c.Cells(i, j).Value = "X"
Else
c.Cells(i, j).Value = " "

2 个答案:

答案 0 :(得分:1)

只是要清楚 - 抱歉,但我的设置不允许我 看到上传到这个网站的图片,因此我不能 看你的照片 - 你的代码建议你想要的是什么 列“A”中的900行与第1行中的100列相对应。 那是对的吗。如果单元格之间存在匹配 列“A”和第1行中的单元格,然后您需要结点 两者之间的单元格显示“X”。这是对的吗?

如果是这样,那么你的逻辑是正确的。也许你的语法 已关闭。试试这个。

Sub sdftgyhj()

    Set c = ThisWorkbook.Worksheets("harnwire")
    For j = 2 To 100 Step 1
        For i = 2 To 900 Step 1
            If c.Cells(i, 1).Value = c.Cells(1, j).Value Then
                    c.Cells(i, j).Value = "X"
            Else
                c.Cells(i, j).Value = " "
            End If
        Next i
    Next j

End Sub

答案 1 :(得分:1)

该行

If c.Cells(i, 1).Value = c.Cells(1, j).Value Then

似乎不正确。因为这会将列A与第1行中的标题进行比较。此行与

基本相同
If c.Cells(i, "A").Value = c.Cells(1, j).Value Then

然而,根据图片,您似乎更感兴趣的是将另一列与标题进行比较。所以,也许尝试这样的事情:

If c.Cells(i, "G").Value = c.Cells(1, j).Value Then

(或任何正确的列)

所以,将所有这些结合在一起:

Option Explicit

Public Sub tmpSO()

Dim ws As Worksheet
Dim rowNumber As Long, columnNumber As Long

Set ws = ThisWorkbook.Worksheets("harnwire")

For columnNumber = 2 To 100
    For rowNumber = 2 To 900
        If c.Cells(rowNumber, "G").Value = c.Cells(1, columnNumber).Value Then
            c.Cells(rowNumber, columnNumber).Value = "X"
        Else
            c.Cells(rowNumber, columnNumber).Value = vbNullString
        End If
    Next rowNumber
Next columnNumber

End Sub

更新

以下代码解决了提供的评论: (1)开始与列H和中的标题进行比较 (2)如果两个单元格无法进行比较,则处理错误,因为任何一个单元格都包含错误。

Option Explicit

Public Sub tmpSO()

Dim ws As Worksheet
Dim rowNumber As Long, columnNumber As Long

Set ws = ThisWorkbook.Worksheets("harnwire")

For columnNumber = 8 To 100
    For rowNumber = 2 To 900
        If IsError(c.Cells(rowNumber, "G").Value) Or IsError(c.Cells(1, columnNumber).Value) Then
            c.Cells(rowNumber, columnNumber).Value = "err"
        Else
            If c.Cells(rowNumber, "G").Value = c.Cells(1, columnNumber).Value Then
                c.Cells(rowNumber, columnNumber).Value = "X"
            Else
                c.Cells(rowNumber, columnNumber).Value = vbNullString
            End If
        End If
    Next rowNumber
Next columnNumber

End Sub

请告诉我这是否符合预期。