excel VBA上水平单元格与垂直单元格的比较

excel VBA上水平单元格与垂直单元格的比较,excel,vba,Excel,Vba,我有一张excel表格 我想比较垂直方向上的单元格和水平方向上的单元格的值,在相互作用上加一个“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).Va

我有一张excel表格

我想比较垂直方向上的单元格和水平方向上的单元格的值,在相互作用上加一个“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 = " "

我只是想说清楚-很抱歉,我的设置不允许我 看到上传到这个网站的图片,所以我不能 查看您的照片-您的代码建议您 对照第1行中的100列,检查“A”列中的900行。 对吗。如果中的单元格之间存在匹配 列“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行中的100列,检查“A”列中的900行。 对吗。如果中的单元格之间存在匹配 列“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
线路

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
让我知道这是否按预期工作。

线路

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

让我知道这是否如预期的那样工作。

感谢您的回复,但我仍然对代码有一点问题。它在行中给我一个错误424被认为是错误的
如果c.Cells(rowNumber,“G”)。Value=c.Cells(1,columnNumber).Value然后
,我想做的比较是比较一列,但不是从“H1”开始的所有标题如果你想从列
H
开始,那么columnNumber=2到100的
行应该是
columnNumber=8到100的
(因为column
H
是第8列/字母)。谢谢你的回复,但我还是有一个小问题的代码给我一个错误424行被认为是错误的是
如果c.Cells(rowNumber,“G”)。Value=c.Cells(1,columnNumber)。然后值
和比较,我想做的是比较一列,但不是从“H1”开始的所有标题如果要从列
H
开始,则columnNumber=2到100的行
应该是columnNumber=8到100的
(因为column
H
是第8列/字母)。不清楚哪一列有标题。您无法分辨行的位置。如示例所示,很明显,列和行的内容是固定的或混合的。不清楚列中哪一列有标题。您无法分辨行的位置。如示例所示,很明显,列和行的内容是常量或混合的。