【问题标题】:How to get VBA code to check if cell value matches column heading and return value from another cell in the same row?如何获取 VBA 代码以检查单元格值是否与列标题匹配并从同一行中的另一个单元格返回值?
【发布时间】:2018-12-11 21:56:02
【问题描述】:

我已经搜索了所有内容,但似乎无法让这件作品正常工作。

我有 2 个工作表。

表 1 包含测验问题编号,然后是每个相应 q# 的分数。

表 2 包含每个 q# 作为列标题,我希望 VBA 代码从对应于右标题的 q# 中获取分数。

例如:

表 1

Question#      Score 
1               100
2                90
3                75
4                95

表 2

Q1    Q2    Q3   Q4 
100   90    75   95

表 2 中的列标题可以更改为简单地说“1”、“2”等,这样可以更容易地进行精确匹配。

我找到并使用了这段代码,但是如果它找到一个不起作用的匹配项,它会复制整个列:

Sub CopyDataDynamically()
Dim lr As Long, num As Long
Dim rng As Range
lr = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("a2")
num = Range("b2").Value
If num = 1 Then
    Range("B2:B" & lr).Copy
    rng.Offset(0, num - 1).PasteSpecial xlPasteValues
End If
End Sub

提前致谢!

【问题讨论】:

  • 更改标题并使用 VLOOKUP()
  • 如果是一次性复制表格,paste special -> transpose 可能会完成这项工作

标签: excel vba loops range


【解决方案1】:

我总是觉得Dim 你的WorkbookWorksheet 是很好的做法。如果您决定扩展,您已经准备就绪。

无论有多少问题,以下代码本质上都会转置数据集。

Sub test()


Dim wbk As Workbook
Dim wks_1 As Worksheet
Dim wks_2 As Worksheet

    Set wbk = ThisWorkbook
    Set wks_1 = wbk.Sheets("Sheet1")
    Set wks_2 = wbk.Sheets("Sheet2")

    LastRow = wks_1.Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 To LastRow
        wks_1.Cells(i, 1).Copy wks_2.Cells(1, i)
        wks_1.Cells(i, 2).Copy wks_2.Cells(2, i)
    Next i


End Sub

它也会复制标题。

首先我想知道最后一行在哪里,因此是LastRow 代码。然后我们简单地遍历所有行并转置数据集。

wks_1.Cells(i, 1).Copy wks_2.Cells(1, i) 行中的引用 .Cells 始终引用 Row,然后是 Col

告诉我你的情况。

【讨论】:

  • 感谢上面的代码!我遇到的问题是,如果所有列都排成一行,这会很好用。但是,我提供的示例被简化了。所有列/数据点并不总是完美排列。有没有办法让它将单元格的内容与列标题匹配,如果为真,则返回该单元格的值?
  • 感谢您的回答,因为它回答了您的问题。非常感激。一切皆有可能。我可以建议开始一个新的问题,说明你在追求什么。还请阅读此链接,看看您是否可以回答自己的问题。如果不是,我会非常乐意提供帮助。 stackoverflow.com/questions/52113901/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多