2017-09-19 4 views
0

私が使用しようとしている式がより合理的になるようにブックを設計する方法を説明する必要があります。外部のブックに基づいて動的テキストを使用する数式を使用する

私がデータを取得しようとしているブックには、隣接するセルに縦書きで書かれた特定の国の上および祝日に水平に実行される日付があります。国は常に同じ行に位置するとは限らず、毎日ではなく前日の国数が同じではありません。例えば、文字を使用すること

workbook1 

      col a  col b  col c 
row 1 1/1/2017 1/2/107 1/3/2017 
row 2 
row 3 Spain  Canada  Australia 
row 4 Colombia Spain  Vietnam 
row 5 Vietnam  England 

ブックでは、私のようなものを持って、任意の行番号と列番号を表すために: date column no列で

workbook2 

    col a  col b    col c        col d          col e 
    date date column no date column letter      code         Spain 
1/1/2017  a     x   ="'[workbook1.xlsx]sheet'!$" & x & ":$" & x 

、私は私を与える式を有します日付が左にある最初のワークブックの列番号。この番号を使用して、私はdate column letter列の文字に相当するものに変換します。これを使用して、MATCHという動的な式をworkbook2に作成しようとしていましたが、最初のワークブックに国があるかどうかわかります。一致式は「Spain」の直下に配置され、=MATCH(E2, D2, 0)と書かれます。これは望ましい結果をもたらさない。私はworkbook2の列dの文字列として外部参照を書いて、それを数式に供給することでそれが機能しているとは思えません。

答えて

1

これらのヘルパー列はすべて必要ではなく、列番号を列文字に変換する必要はありません。インデックスを使用する場合は、列番号に基づいて範囲を作成できます。

=MATCH(E1,INDEX([Workbook1.xlsx]Sheet1!$3:$3,MATCH(A2,[Workbook1.xlsx]Sheet1!$1:$1,0)):INDEX([Workbook1.xlsx]Sheet1!$20:$20,MATCH(A2,[Workbook1.xlsx]Sheet1!$1:$1,0)),0) 

この式は、フォアグラウンドのブックのセルE2に適用されています。ワークブック1はバックグラウンドです。数式は、2つの索引式を使用して範囲を作成します。最初の1つは正しい列を見つけて3行目のセルを返します。2つ目のインデックスは正しい列を見つけて20行目のセルを返します。返された2つの範囲は「:」演算子で連続した範囲に結合されます。範囲は3行目から20行目までの正しい列になりました。この範囲はMatch関数に入力され、 "Spain"またはその範囲のセルE1の値を検索しようとします。

enter image description here

式が機能するためにWorkbook1を開いておく必要があります注意してください。開いていない場合、数式は#Ref!を返します。エラー。

E1の国が範​​囲内にない場合、数式は#N/A!を返します。エラー。これを抑制するには、式全体をIfErrorにラップするか、IF(IsNumber(theformula),"found","not found")

+0

これは美しく機能します。どうもありがとうございました! – erik7970

関連する問題