1

Preamble: I have a problem and I've got a very simple solution that I'm using. However, I was wondering, for the sake of learning, if any Excel Guru's out there had an alternate solution to my problem.


I have an excel table with a column that contains about 4500 U.S. and Canadian cities. Here’s a sample of the way the data in the column is formatted:

  • Toronto, ON
  • Jacksonville, FL
  • VANCOUVER, BC

On another sheet in the workbook, I randomly select a City.

So I’m using the following function:

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

This function produces a random selection from the 4500 cities; the problem is that I want to populate two cells, one that has the City and one that has the Province/State.

Typically, extracting the City/Province from a cell formatted ‘City, Province’ is pretty straight forward.

I’d do something like this:

For the State or Province:

=RIGHT(A1,2)

For the City:

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

My problem lies in the random selection of the city/state.

I can’t select the city using:

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

Because when I’m calculating the LEN function, it randomly selects another city and uses that length for the calculation. So depending on the combination of random city selections in the one function, some will be short, some will be long (and some will be accurate).

An extension of the same problem is when I do the RIGHT string function to get the state, that'll be from another randomly selected value, so it won't (necessarily) match the city.

The simplest thing I could think of, and it's what I've done, is to make the random selection in one cell, then perform the RIGHT and LEFT functions on that cell.

Like this:

//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)

I'm just curios if there's another way of doing the LEFT/LEN function on the RANDOM selection without having to play off of another cell. I'd like to avoid VBA if possible. It's possible there isn't a solution, but I'm hoping someone who knows more than I do will have some ideas!

4

2 に答える 2

2

この式を試して、州のないランダムな都市を取得してください

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

注: 4575 行のデータがあるため、RANDBETWEEN を 4575 にする必要があります。それ以外の場合は、最後の行を考慮していません。

この式は、カンマを 99 個のスペースに置き換え、最初の 99 文字を取り、スペースを削除します。これは、RANDBETWEEN を再度使用せずに都市のみを取得する 1 つの方法です。

都市がすべて異なると仮定すると、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

2 番目の式で返された州が、最初の式で選択されたセルの州と同じであるという保証はできませんが (都市に重複がない場合を除きます)、それは問題ではありません。重複する都市がある場合は、いずれかの州をランダムに選択します

于 2013-09-25T19:29:06.997 に答える
1

数式 RANDBETWEEN () は各セルで個別に計算されるため、これは不可能です。

したがって、同じランダム値を取得するには、既に行っているように続行します。

于 2013-09-25T19:23:31.023 に答える