【问题标题】:Splitting string in a cell into multiple strings/cells after the nth comma [closed]在第n个逗号后将单元格中的字符串拆分为多个字符串/单元格[关闭]
【发布时间】:2014-01-13 01:45:21
【问题描述】:

所以我有一个 Excel 电子表格,其中包含大约 20 个包含股票代码的单元格,每个单元格用逗号分隔。有些行有 8-10 个代码;有些超过 50 个。

对于我使用的其中一个网站,它们将您一次可以查询的代码数量限制为 12。因此,对于具有超过 12 个代码的行,我希望能够自动生成 excel(无论是通过运行 VBA 脚本或在相邻单元格中输入公式)在相邻单元格中输入 13th - 24th 行情。

所以,例如,如果我在 D1:

gs,fb,lnkd,nflx,aapl,goog,amzn,tsla,bidu,cmg,twtr,tsla,kors,pcln.yhoo

我希望 Excel 将上述字符串保留在 A1 中,但随后将以下两个字符串放入 E1 和 F1:

E1 = gs,fb,lnkd,nflx,aapl,goog,amzn,tsla,bidu,cmg,twtr,tsla

F1 = ,kors,pcln.yhoo

此外,正如我所提到的,某些单元格可能有超过 50 个代码,因此理想情况下,代码能够将第 24-36 个代码放在 G1 中,即第 37th - 48 th H1 中的股票代码,等等。

我确信这相对简单,但我对编码一无所知,尽管我有使用 VBA 的基本能力。感谢您提供的任何帮助。

【问题讨论】:

    标签: string excel vba excel-formula


    【解决方案1】:

    以下函数完全符合您的要求:

    Function nextN(r As Range, s As Integer, n As Integer, Optional d)
    ' for a given range, split string by delimiter d (default: comma)
    ' then return at most n values starting at the s-th
    If IsMissing(d) Then d = ","
    splitarray = Split(r.Text, d)
    If UBound(splitarray) > s Then
      If (UBound(splitarray) > s + n) Then lastVal = s + n - 1 Else lastVal = UBound(splitarray)
      For ii = s To lastVal
        retval = retval & splitarray(ii) & ","
      Next ii
      nextN = Left(retval, Len(retval) - 1) ' strip last comma
      Exit Function
    End If
    nextN = ""
    
    End Function
    

    如果您的长字符串在单元格 A1 中,您将在单元格 B1 中输入以下等式:

    =nextN($A1, 12*(COLUMN()-2), 12)
    

    然后将方程拖到 C、D、E 列……并向下拖到第 2、3 行……

    这是截图:

    万一代码中的cmets不清楚:

    函数的第一个参数是带有“大量由逗号分隔的股票代码”的单元格

    第二个参数是单元格的偏移量:0 的偏移量表示“从头开始”,12 的偏移量表示“跳过前 12 个”,等等。在这种情况下,我使用工作表函数COLUMN() 获取列号(B = 2),计算偏移量(如果你想要 12 的块,那么列 B 中的偏移量必须为 0,在 C 中它必须为 12,等等。这个公式计算这些数字随时为您服务)。

    第三个参数是要返回的(最大)元素数。

    正如您在示例中所见,如果您要求的元素数量超过实际数量,它只会停在可用的数量上。

    【讨论】:

    • @user3133470 如果这回答了您的问题,您会将此答案标记为“已接受”吗?这是问题旁边的小复选标记...
    • 如果有人理解这个答案值得一票否决的原因,我会很高兴听到它;这让我很困惑......
    • +1 的工作答案
    • @floris - 我看了又看,但找不到任何可以让我选择您的回复为“已接受”的内容。这是我在屏幕上看到的:prntscr.com/2dvf4k
    • 谢谢。您正在查看问题(我的错,这就是我告诉您要查看的地方...)您需要查看答案。 “分数”正下方是一个灰色复选框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2015-12-14
    • 2014-10-15
    • 2019-06-29
    相关资源
    最近更新 更多