【问题标题】:Excel VBA CodingExcel VBA 编码
【发布时间】:2016-11-02 13:02:12
【问题描述】:

我是 VBA 编码的新手,您能帮我解决这个问题吗?

我目前正在创建一个宏,它将搜索 AJ 列中的特定文本(例如“Chase”),如果找到,它将从 A 列中查找实体,然后将其复制粘贴到其他工作表。

非常感谢!

【问题讨论】:

  • 请发布您目前拥有的代码。
  • 也许VLOOKUP函数就是你要找的!
  • Sub EachLoopExample() Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet3") For Each MyCell In ws1.Range("AE:AE ") If MyCell.Value = "check" Then sResult = Application.WorksheetFunction.VLookup("check", ws1.Cells("AE7:A2693"), 31).Select ws2.Range("A2").Selection.Value End If Next MyCell End Sub
  • 但是我有一个错误。错误 1004。
  • @RCaetano 您好,先生,您能告诉我什么是更好的编码吗??

标签: excel vba


【解决方案1】:

试试这个。取自 cmets。请记住,您可能会遇到的错误是由于 VLookup 公式。你需要看看 VLookup 公式是如何工作的。
=VLOOKUP(Value you want to look up, range where you want to lookup the value, the column number in the range containing the return value, Exact Match or Approximate Match – indicated as 0/FALSE or 1/TRUE).

公式正在搜索“检查”。您得到的错误在您正在搜索的范围内,您正在搜索“AE7:A2693”,即 AE 到 A 列 - 无法向后搜索,因此它应该是 A2693:AE7。您必须找到正确的范围并在下面的代码中进行更改。
您确定第 31 列包含返回值吗?

Sub EachLoopExample()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim MyCell As Range
Dim sResult As String

Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet3")
For Each MyCell In ws1.Range("AE:AE")
    If MyCell.Value = "check" Then

        sResult = Application.WorksheetFunction.VLookup("check", ws1.Range("B1:C3"), 1, False)
        ws2.Range("A2").Value = sResult
    End If
Next MyCell
End Sub

【讨论】:

  • 嗨 Niclas,我设法使上述编码工作,非常感谢您的指导和建议。但是,在上述编码中只能查找 1 个单元格值。例如,如果 AK 列中有三个值为“chase”的单元格,则只会将第一行复制到指定的工作表中。您能否告知上述编码中可以更改的内容?
  • 能否请您发布您正在使用的确切 VLookup 公式以及数据范围。我仍然不太确定您要做什么。您想在 Sheet3 中插入​​此 VLookup 公式(清洁表以查看匹配项),但是在 Sheet1 中有什么? AE是check,AK是追逐?
  • 重新阅读您的问题。你想要的是查找例如AJ 列中的“Chase”,如果找到,您希望它返回 Sheet3 A 列中 A 列(例如 OC_81)的值?
  • 嗨 Niclas,请参考我上面的回答 :) 谢谢!
  • 嗨 Niclas,我已经得到了正确的编码,唯一的问题是当单元格为空白时,宏不会捕获它然后跳转到带有值的单元格并将其粘贴到另一张表。并因此遇到,因为它不会与其正确的行对齐。我该如何解决这个问题?
【解决方案2】:
Sub EachLoop()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim FinalRow As Integer
Dim i As Integer

Set ws1 = Sheet1
Set ws2 = Sheet3

ws1.Select
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 7 To FinalRow
    If Cells(i, 31) = "check" Then
        Range(Cells(i, 1), Cells(i, 7)).Copy
        ws2.Select
        Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
        ws1.Select
    End If

Next i

ws2.Select

Range("B2").Select

Call EachLoop2

End Sub

Sub EachLoop2()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim FinalRow As Integer
Dim i As Integer

Set ws1 = Sheet1
Set ws2 = Sheet3

ws1.Select
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 7 To FinalRow
    If Cells(i, 32) = "check" Then
        Range(Cells(i, 1), Cells(i, 13)).Copy
        ws2.Select
        Range("H200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
        ws1.Select
    End If

Next i

ws2.Select

Range("B2").Select

Call EachLoop2_ext


End Sub

Sub EachLoop2_ext()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim FinalRow As Integer
Dim i As Integer

Set ws1 = Sheet1
Set ws2 = Sheet3

ws2.Select
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 3 To FinalRow
    If Range(Cells(i, 9), Cells(i, 13)) = "" Then
        ws2.Select
        Range(Cells(i, 9), Cells(i, 13)).ClearContents
        Range(Cells(i, 14), Cells(i, 20)).Cut
        Range("I200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats

    Else
        ws2.Select
        Range(Cells(i, 9), Cells(i, 13)).ClearContents
        Range(Cells(i, 14), Cells(i, 20)).Cut
        Range("I200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats

    End If

Next i

ws2.Select

Range("I2").Select

End Sub

【讨论】:

  • 嗨 Niclas,我已经设法编写了另一个代码来实现我想要的结果。但是,对于 EachLoop2_ext() 的最后编码,我仍然有一些错误。错误 1004。您能检查一下吗??
  • 我只是对 EachLoop 做了不同的宏编码,因为我不知道如何在范围选择中跳过列。 EachLoop2 中的示例: Range(Cells(i, 1), Cells(i, 13)).Copy 我真正想要的是它只会从 Range(Cell(I,1) 复制然后跳转到 Cell(i,8 ) 到单元格(i,13)。
  • 你知道更简单的编码吗?
猜你喜欢
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2020-02-10
  • 2014-12-18
  • 2012-09-23
相关资源
最近更新 更多