【问题标题】:VBA search for value in a column after specific patternVBA在特定模式后的列中搜索值
【发布时间】:2016-11-10 20:17:34
【问题描述】:

我有这样的输入数据:

gen,N,,,GONGD,,,N,,,KL,0007bd,,,,,,,,TAK,
gen,N,,,RATEC,,,N,,,KP,0007bc,,,,,,,,TAZ,
kap,N,,,EBFWE,N,,,,,,,,,KP,002bd4,,,KP,123000,,,,,N,,,,P
kap,N,,,ST,WEIT,E3,EBFWEI,,,KP,002bd2,N,,,,,,KP,002bd3,,,,,,,Z,MG00,,,,,N,,,,P

一行是一列。首先我需要知道我以“kap”开头,然后我需要在第一个“,KP”之后将6个字符(或数字)保存为“Variable1”,并在第二个之后保存6个字符或数字“ ,KP”作为“变量 2”。请帮帮我,我没救了。

预期结果:第一个“kap”行的 Var1 = 002bd4,Var2 = 123000。 Var3 = 002bd2, Var4 = 002bd3

我试过这个知道我在“kap”起跑线上:

Sub Find()
Dim rFoundAddress As Range
Dim sFirstAddress As String
Dim x As Long

With ThisWorkbook.Worksheets("Sheet1").Columns(1)
    Set rFoundAddress = .Find("kap,*", LookIn:=xlValues, LookAt:=xlWhole)
    If Not rFoundAddress Is Nothing Then
        sFirstAddress = rFoundAddress.Address
        Do


            Set rFoundAddress = .FindNext(rFoundAddress)
        Loop While Not rFoundAddress Is Nothing And _
            rFoundAddress.Address <> sFirstAddress
    End If
End With
End Sub

谢谢!

【问题讨论】:

  • 您搜索的“msz,*”与“kap”和“KP”有什么关系?
  • Split或者更好的方式,正则表达式,先用逗号分割找到第一个元素,然后用“KP”分割可能是数字作为第一个元素
  • @user3598756 我的错,我已经编辑过了。谢谢。
  • 形成我期望的叙述:Var1 = 002bd4, Var2 = 002bd5 用于第一个“kap”行,而不是 Var1 = 002bd4, Var2 = 123000 。其实怎么样?
  • @user3598756 很抱歉我又犯了错误。现在应该是正确的。第一行 - Var1,Var2,第二行 - Var3,Var4 等。当然,每行总是只有 2 个 KP,而较低的 Var 数字意味着从左边开始的第一个 KP。再次抱歉。

标签: string vba


【解决方案1】:

试试这个

Sub Find()
    Dim rFound As Range
    Dim sFirstAddress As String
    Dim vals As Variant

    With ThisWorkbook.Worksheets("Sheet1").Columns(1)
        Set rFound = .Find("*kap,*", LookIn:=xlValues, LookAt:=xlWhole)
        If Not rFound Is Nothing Then
            sFirstAddress = rFound.Address
            Do
                vals = Split(Split(Split(rFound.text, "KP")(1), ",")(1) & "," & Split(Split(rFound.text, "KP")(2), ",")(1), ",")
                Set rFound = .FindNext(rFound)
            Loop While rFound.Address <> sFirstAddress
        End If
    End With
End Sub

在每一行你会得到 vals 数组,存储该行中的两个想要的值

【讨论】:

  • 我无法正确格式化它。但我已经使用了这段代码。你的一个可能也在工作。无论如何,谢谢你的帮助! Dim WrdArray() As String Dim text_string As String text_string = rFoundAddress WrdArray() = Split(text_string, "KP,") strg = Left(WrdArray(1), 6) &amp; vbNewLine &amp; Left(WrdArray(2), 6) MsgBox strg
  • 不客气。顺便说一句,我不知道您可能遇到什么格式问题:我的代码返回一个包含两个元素的数组 (vals),以便您可以将其元素检索为 vals(1)vals(2),然后执行您想要的操作和他们一起
  • 不,我的意思是我无法正确格式化回复评论:D 代码正在运行,再次感谢
  • 我已经更新了我的代码和我的问题。有时间请看here
  • 嗨,我看了你的新帖子,我必须说很遗憾,那里的人给了你错误的建议:它一个新问题,因此要发布在一个问题中。发表那篇新文章,如果你能给我一个字,我一定会看看它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2016-05-03
  • 2023-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多