在随机填充的不同长度的单元格中,是否可以将LEFT或RIGHT与LEN结合使用?

序言:我有一个问题,我有一个非常简单的解决scheme,我正在使用。 但是,为了学习,我想知道,如果任何Excel Guru的外面有我的问题的替代解决scheme。


我有一个Excel列表,其中包含大约4500个美国和加拿大城市。 以下是列中数据格式化的示例:

  • 多伦多
  • 佛罗里达州jackson维尔
  • 温哥华,不列颠哥伦比亚省

在工作簿的另一张表格中,我随机select一个城市。

所以我使用以下function:

=INDEX(DATA!$E$2:$E$4576,RANDBETWEEN(1,4574),1) 

该function从4500个城市中随机select; 问题是我想填充两个单元格 ,一个是具有城市和一个具有省/州的单元格。

通常,从格式为“城市,省”的单元格中提取城市/省是非常简单的。

我会做这样的事情:

对于州或省:

 =RIGHT(A1,2) 

城市:

 =LEFT(A1,LEN(A1)-4) 

我的问题在于随机select城市/州。

我无法使用以下选项来select城市:

 =LEFT(INDEX(DATA!$E$2:$E$4576,RANDBETWEEN(1,4574),1),LEN(INDEX(DATA!$E$2:$E$4576,RANDBETWEEN(1,4574),1))-4) 

因为当我计算LEN函数时,它随机select另一个城市并使用该长度进行计算。 因此,根据一个函数中的随机城市select的组合,一些将是短的,一些将是漫长的(有些将是准确的)。

同样的问题的一个扩展是,当我做右边的string函数来获得状态,这将从另一个随机select的值,所以它不会(必然)匹配城市。

我能想到的最简单的事情就是在一个单元格中进行随机select,然后在该单元格上执行右和左函数。

喜欢这个:

 //populate cell A1 randomly A1=INDEX(DATA!$E$2:$E$4576,RANDBETWEEN(1,4574),1) //pull the province/state form A1 B1=RIGHT(A1,2) //pull the city name from cell A1 C1=LEFT(A1,LEN(A1)-4) 

我只是好奇,如果有另一种方法在RANDOM选项上执行LEFT / LENfunction,而不必从另一个单元格播放。 如果可能,我想避免使用VBA。 有可能没有解决scheme,但我希望有一个比我更了解的人会有一些想法!

试试这个公式来得到一个没有省份的随机城市

=TRIM(LEFT(SUBSTITUTE(INDEX(DATA!$E$2:$E$4576,RANDBETWEEN(1,4575)),",",REPT(" ",99)),99))

注意:你有4575行数据,所以你需要RANDBETWEEN上升到4575,否则你不考虑最后一行

该公式用逗号replace99个空格,然后取第99个字符并修剪空格 – 这是获得城市的一种方法,而不必再次使用RANDBETWEEN。

现在假设你的城市是不同的,你可以使用VLOOKUP来查找城市的通配符并得到省份,例如在A2中使用上面的公式,在B2中使用这个公式

=RIGHT(VLOOKUP(A2&",*",DATA!$E$2:$E$4576,1,0),2)

如果城市可能有重复,那么你可以在B2中使用这个“数组公式”

=RIGHT(INDEX(DATA!$E:$E,SMALL(IF(LEFT(DATA!$E$2:$E$4576,LEN(A2)+1)=A2&",",ROW(DATA!$E$2:$E$4576)),RANDBETWEEN(1,COUNTIF(DATA!$E$2:$E$4576,A2&",*")))),2)

用CTRL + SHIFT + ENTER CTRL + SHIFT + ENTER确认

您不能保证第二个公式返回的省份与第一个公式中select的单元格的省份是一样的(除非城市没有重复),但这并不重要。 如果有重复的城市,它将随机select一个省份

这是不可能的,因为公式RANDBETWEEN()是在每个单元格中独立计算的。

因此,为了得到相同的随机值,按照已经做的那样进行。