【问题标题】:Excel VBA – From Current Cell find the Most Previous Specific Text in a ColumnExcel VBA - 从当前单元格中查找列中最前面的特定文本
【发布时间】:2018-04-10 15:35:19
【问题描述】:

我的情况是,我有 5 列,A -> E。A 列填充了序列号,但也填充了很多“绒毛”,B 列填充了相应的日期。还有重复的序列号,但只有一个填充了相应的日期,重复的序列号有空白列 B,这就是我知道它是否重复的方式。 C & D 列充满了“绒毛”,E 的大部分也是如此。E 列的重要之处在于它包含每个序列号和日期与什么水果相关。难点在于水果的种类在第一个序号前几行,但也在E列。这个距离不是固定的,每个水果下的序号数量也不是固定的。有点像这样

Apples

12012                    
12012                    01 May 17                            fluff

Fluff                                                                       fluff
Fluff 
 12345                   02 May 17                            fluff

*文本实际上并没有说绒毛,只是胡言乱语。

我的目标是将信息粘贴到“帮助页面”上,用于显示数据的绘图。在“帮助页面”上,第 1 行是水果类型,第 2 行 A 列是序列号,B 列是相关日期。数据将粘贴在其各自的标题下,即 A 列下的序列号。

我尝试使用以下代码:

Sub Fruits()

    Dim Helper As Worksheet
    Dim Fruits As Worksheet

    Set Fruits = Sheets("Fruit page")
    Set Helper = Sheets("Helper Page")

    'this refreshes the helper page
     Helper.Range("A3:z11000").ClearContents

    With Worksheets("Fruit Page”)
    ' this next section of the code is responsible for finding the aircraft number that the Fruits is attached to. We know that it will be the most
    ' previous number in column E to the respective Fruit.

    ' if Apples

    For i = 2 To Range("A1", Range("A1").End(xlDown)).Rows.Count
   ‘ Search for any text that starts with GRE or RE and also see if column B is blank
         If (Fruits.Cells(i, 1).Value = "Gre*" Or Fruits.Cells(i, 1).Value = "Re*") And Fruits.Cells(i, 2).Value = "<>" Then
     ‘msgbox (“hey”)
    ' Find Fruit 
            If Range(E1, "E" & i).Find(what:="Apple", searchorder:=xlByRows, searchdirection:=xlPrevious).Row Then

                ' copy cells from column A and B and Paste in Apple heading on Helper Page Sheet in the next blank row
                Helper.Range("A3:B" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value = Fruits.Range("A" & i & ":B" & i).Value

            End If

        End If
    Next
     End With

End Sub

我对 VBA 比较陌生,但我不明白为什么这不起作用。我使用了一个 msgbox,它似乎在第一个 if 语句之后不起作用。任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 您能提供一些具有预期输出的数据吗?我不清楚上述逻辑。
  • Sure thinng 可以说,我们在上表中有一个,在序列号之前(但在同一列中,但在原始编号之前)我们添加 Gre 或 Re 来表示它是什么苹果颜色.然后,一旦代码运行,在另一张表(帮助程序)上,A 列包含符合我在 If 语句中的要求的所有序列号。 B 列包含苹果各自序列号的日期。我们实际上并不知道这些序列号是否真的与苹果有关,因此我们必须检查每个序列号的“标题”(在 E 列中)。

标签: excel vba search


【解决方案1】:

您不能使用通配符比较字符串。

更改您的IF- 声明

 If (left(Fruits.Cells(i, 1).Value, 3) = "Gre" _ 
     Or left(Fruits.Cells(i, 1).Value, 2) = "Re") _
    And Fruits.Cells(i, 2).Value = "<>" Then

(不确定要检查与&lt;&gt; 比较的最新部分的内容)

还要注意区分大小写。如果您的单元格中可以包含“GRE...”或“gre...”,请查看 In VBA get rid of the case sensitivity when comparing words? 的示例。

【讨论】:

  • 谢谢你!今天我会试一试,让你知道结果。 用于检查单元格是否为空白。
  • 如果要检查空单元格,必须将其更改为Fruits.Cells(i, 2).Value &lt;&gt; ""
  • 谢谢!现在按计划工作,直到'找到水果评论。
  • .Range(E1, "E" &amp; i) 之前写一个点。如果您写Range,Excel 将使用ActiveSheet。当您想要访问 with-statement 的对象的成员时,请添加点。
猜你喜欢
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多