所以我有一个Excel电子表格,其中包含大约20个包含股票行情的单元格,每个单元格用逗号分隔。有些行有8-10个代码;有些人有50以上。
对于我使用的其中一个网站,他们将您可以一次查询的代码的数量限制为12.因此,对于超过12个代码的行,我希望能够自动拥有Excel(无论是通过运行VBA脚本或在相邻单元格中输入公式,输入13 th - 24 th ,相邻单元格中的代码。
所以,例如,如果我在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中,37 th - 48 H1等的代码
我确信这是相对简单的,但我对编码很无能为力,尽管我有使用VBA的基本能力。感谢您提供的任何帮助。
答案 0 :(得分:3)
以下功能完全符合您的要求:
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行......
以下是截图:
如果代码中的注释不明确:
该函数的第一个参数是带有"大量的逗号符号以逗号分隔的单元格"
第二个参数是单元格的偏移:0
的偏移意味着"从开头开始",12
的偏移意味着"跳过第一个12"等。在这种情况下,我使用工作表函数COLUMN()
来获取列号(B = 2),以计算偏移量(如果你想要12个块,那么B列中的偏移量)必须是0,在C中它必须是12,等等。这个公式为你动态计算这些数字。)
第三个参数是要返回的(最大)元素数。
正如您在示例中所看到的,如果您要求的元素多于其中的元素,则只会停留在可用的数字上。