Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在第n个逗号后将单元格中的字符串拆分为多个字符串/单元格_String_Excel_Vba_Excel Formula - Fatal编程技术网

String 在第n个逗号后将单元格中的字符串拆分为多个字符串/单元格

String 在第n个逗号后将单元格中的字符串拆分为多个字符串/单元格,string,excel,vba,excel-formula,String,Excel,Vba,Excel Formula,所以我有一个Excel电子表格,大约有20个单元格,其中包含股票代码,每个单元格用逗号分隔。有些行有8-10个标记;有些人超过50岁 对于我使用的其中一个网站,它们将您一次可以查询的股票代码数量限制为12个。因此,对于超过12个标记的行,我希望能够让excel自动(通过运行VBA脚本或在相邻单元格中输入公式)在相邻单元格中输入第13-24个标记 例如,如果我在D1中有: gs,fb,lnkd,nflx,aapl,goog,amzn,tsla,bidu,cmg,twtr,tsla,kors,pcl

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

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

例如,如果我在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-48个标记放在H1中,等等


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

以下功能完全满足您的要求:

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
,uou将在单元格B1中输入以下等式:

=nextN($A1, 12*(COLUMN()-2), 12)
然后将方程式拖到C、D、E……列,再拖到第2、3……行

以下是一个屏幕截图:

如果代码中的注释不清楚:

函数的第一个参数是带有“用逗号分隔的许多股票代码”的单元格

第二个参数是单元格中的偏移量:偏移量
0
表示“从开头开始”,偏移量
12
表示“跳过前12个”,等等。在这种情况下,我使用工作表函数
COLUMN()
获取列号(B=2),以计算偏移量(如果您希望数据块为12,则B列中的偏移量必须为0,C列中的偏移量必须为12,以此类推。此公式可为您动态计算这些数字)

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


正如您在示例中所看到的,如果您要求的元素比实际的元素多,它只会在可用的数字处停止。

@user3133470如果这回答了您的问题,您会将此答案标记为“已接受”吗?这是问题旁边的一个小复选标记…如果有人知道这个答案的什么值得投反对票,我很高兴听到它;它让我困惑…+1的工作answer@floris-我看了又看,但我找不到任何东西可以让我选择您的回答为“已接受”这是我在屏幕上看到的:谢谢。你正在看问题(我的错,那是我让你看的…),你需要看答案。在“分数”下面有一个灰色复选框。