【问题标题】:Substring with Excel VBAExcel VBA的子字符串
【发布时间】:2018-03-24 08:48:17
【问题描述】:

我一直使用这段代码作为起点:https://danwagner.co/how-to-transpose-horizontal-data-to-vertical-data-for-easy-pivot-tables/

我的一个单元格Ax(x指数字),内容是ABCDEFGHI,我想每2个字符对单元格进行子串化,最后一组是3个字符。最终结果如下:

AB CD EF GHI

在第 44 行,使用变量

varDetails = .Range(.Cells(lngIdx, 1), .Cells(lngIdx, 4)) 

并认为这是我需要修改代码的地方。我对 VBA 不够流利,需要一些帮助。

【问题讨论】:

  • Mid() 提取子字符串。如果您在使用Mid() 时遇到问题,请说明问题所在。您提供的代码 sn-p 缺少上下文(说它在第 44 行对我们没有帮助)并且似乎与您的其余问题无关。
  • 我不知道如何将它与上述变量中​​的范围与我正在使用的代码结合起来。
  • 如果varDetails 包含这个9 个字符的字符串,那么您可以使用Mid() 来提取您想要的子字符串。这是一个易于使用的功能:homeandlearn.org/excel_vba_mid_function.html
  • 我正在使用代码(请参阅原始帖子中的链接)尝试使用与代码示例相同数量的单元格来反透视数据。而不是使用单元格 A2-A4,我宁愿使用单元格 A1 ABCDEDGHI 并将其子串到 A2-A4
  • 如果您不希望 lngIdx 从 2 开始,而是希望它从 5 开始,请将 For lngIdx = 2 To lngLastRow 中的 2 替换为 5。这似乎解决了您的问题评论。不是听起来刺耳,但是如果您想使用VBA,那么您应该学习VBA。对您在 Internet 上找到但不理解的代码进行随机更改并不是获得所需代码的可靠方法。

标签: vba excel


【解决方案1】:

要从字符串中拆分数据,您可以使用以下代码

Sub SplitStringEveryTwoCharacters()
    Dim arrayWithValuesByTwo() As String
    Dim myString As String

    'Just replace with your data
    myString = "ABCDEFGHIJKLM"

    'Resize
    ReDim arrayWithValuesByTwo(Len(myString) - 1)

    'For each 2 character in string
    For i = 1 To Len(myString) Step 2
        'Add in array
        If (i <= Len(myString) - 1) Then
            arrayWithValuesByTwo(i - 1) = Mid$(myString, i, 2)
        End If

        If (i = Len(myString)) Then
            arrayWithValuesByTwo(i - 1) = Mid$(myString, i, 1)
        End If
    Next
End Sub

你需要改变什么

在这里,我将字符串设置为带有myString = "ABCDEFGHIJKLM" 的变量,但您可以轻松更改它并直接从带有myString = Range("A5") 之类的单元格中获取它。

例如,您可以使用arrayWithValuesByTwo(1) 访问您的数据。只需遍历它即可获取所有值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2018-05-02
    相关资源
    最近更新 更多