[[20111031090436]] 『数式の埋め込み』(ミカン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数式の埋め込み』(ミカン)

 お世話になります。
 標記の件で困っております。

 データ入力シートとCSV作成用シート、データ参照用シートがあります。
 データ入力シートにコードを入力し、CSV作成用シートでデータ参照用シートのデータを数式(VLOOKUP)で参照しております。
 問題なのは、入力用シートの入力欄が可変ということです。
 入力シートのレイアウトは以下の通りで図では2行目から77行目で1セットになり、
 次の入力表を作成した場合は79行目〜81行目までがヘッダとなり、82行目からまた入力可能な表となります。

    A    B    C    D    E    F    G    H    I    J    K    L    M    N

 2  |                    ヘッダ               |
 3  |                    ヘッダ                              |
 4  |                           ヘッダ                              |
 5 
 6
 7
 ・
 ・
 74
 75 |                           入力不可                            |
 76 |                           入力不可                            |
 77 |                           入力不可                            |
 78                              空  白
 79 |                    ヘ ッ ダ              |

 上記の図では5行目から74行目のA〜C、F〜I、K列が入力可能で、75〜77行目は入力不可の行です。 
 入力シートではこの入力欄を複数作成したり、削除することが出来ます。 
 CSV作成用シートに予め参照用の数式を複数作っておくということをしましたが
 入力シートの入力欄を削除してしまうと数式が崩れてしまい、#REF!が出てしまいます。
 VBAでの対応となると思いますがどうか宜しくお願い致します。

 CSV作成用のシートのA1に
 =IF(INDIRECT(ADDRESS(ROW(A1),COLUMN(A1),,,"データ入力シート"))="","",INDIRECT(ADDRESS(ROW(A1),COLUMN(A1),,,"データ入力シート")))
 って入力して右と下にフィルコピーしてみて。

 データ入力用シートの方で削除したりしても、#REF!にならないよ。
 (春日野馨)

 =IF(INDIRECT("データ入力シート!RC",)="","",INDIRECT("データ入力シート!RC",))

 (GobGob)

 質問変わったんやね。

 入力範囲が可変になるんなら「入力範囲外〜入力範囲外」を
 数式の参照セルにすればいいんでない?
 (入力範囲外は削除しないんでしょ? 4〜75にすれば5〜74が可変でも大丈夫しょ。)

 例:
 × =VLOOKUP(A1,データ入力シート!$A$5:$B$74,2,FALSE) ・・・ 追加で不備。
 ○ =VLOOKUP(A1,データ入力シート!$A$4:$B$75,2,FALSE) ・・・ 追加OK。

 ※10:00加筆、10:03勘違い修正www

 (GobGob)

 (春日野馨)様、(GobGob)様、回答ありがとうございます。
 自分で見直して不明瞭な部分があったため、加筆、修正致しました。
 お手数をお掛けしてしまい申し訳ありません。

 (ミカン)

 (GobGob)様
 回答ありがとうございます。
 質問の仕方が下手で誠に申し訳ありません。
 CSV作成用シートは全部で252列あり、その内42列に下記のような数式が入っております。
 =IF(入力シート!C5="","",VLOOKUP(入力シート!C5,データ参照用シート,3,0))
 VLOOKUPの検索値と列数とが変わります。
 これをCSV作成用シートで増やしたり減らしたりしなければなりません。
 後出しになってしまい申し訳ありません。
 (ミカン)

 あぁ、列やったんやね。

 名前定義で「データ参照用シート」にINDIRECT関数つかった数式に設定すれば
 いいと思う。

 A列〜

 名前:「データ参照用シート」 範囲 : =INDIRECT("データ入力シート!A5"):D74

 F〜I列

 範囲 = E5:J75

 ※またまた勘違い修正。 10:52

 (GobGob)

 データ参照用シートに範囲を設定するのでしょうか?

 何度も何度も後出しで申し訳ありません。
 =IF(入力シート!C5="","",VLOOKUP(入力シート!C5,データ参照用シート,3,0))
 上記の数式で変わる部分は「入力シート!C5」の「5」の部分と列数の「3」のところです。

 =IF(入力シート!$C5="","",VLOOKUP(入力シート!$C5,データ参照用シート,3,0))

 と書けば良かったですね…すみません

 それと、今更ですが環境を書き加えます。
 XP Proffesional Excel2002 です。

 (ミカン)


 根本的に勘違いしてたわ。

 一度整理すると

 ・入力シートのA〜C列、F〜I列、K列が入力範囲。
 ・入力範囲のセルはVLOOKUP関数の第一引数に使う(検索値)
 ・範囲は追加、削除が自由。

 ってことで、次に疑問。

 ・追加された列の数式はどうすんの?
 ・列固定の複合参照式ってことはA〜B列どうすんの?
 ・VLOOKUPの列数3が変動の意味がわからない。(コレは入力シート対象ではないもんね)

 ってことで、各シートと各数式が見える表がほしいね。

 (GobGob)

  GobGob様、大変お手数お掛けします。

 まず、入力シートですが
   __A__       __B__    __C__    __D__    __E__    __F__    __G__    __H__    __I__    __J__    __K__    __L__    __M__    __N__

 1 空白行
 2 販売店CD
 3 販売店名
 4 客先名称    商品名   コード    名称    販売本数 細目CD    売価    納入数   仕入数   マージン 補助     粗利      金額     金額
 5 あああ      いい     11111    AAAAAA                                                                                 
 ・
 ・
 75                                                                                                       合計(税抜)        =SUM(N5:N74)
 76                                                                                                       消費税            =N75*1.05
 77                                                                                                       合計(税込)        =SUM(N75:N76)

 2行目から77行目までで1セット。
 次は79行目から同じ入力欄が作成可能となっています。

 次に、データ参照用シートですが
   __A__   __B__    __C__    __D__    __E__    __F__      __G__    __H__    __I__    __J__    __K__    __L__    __M__ ・・・  __AM__

 4                                    コード  コード名称       細目1             細目2             細目3              ・・・  細目32
 5                                                        細目CD  細目名称  細目CD  細目名称  細目CD  細目名称    
 6                                    11111   AAAAAA      1111     AAAA      6789     AAA      0123    AA
 7                                    22222   BBBBBB      2222     BBBB      9012     BBB      4567    BB
 8                                    33333   CCCCCC      3333     CCCC      3456     CCC      8901    CC
 9                                    44444   DDDDDD      4444     DDDD      7890     DDD      2345    DD
 ・
 ・
 105                                  99999   EEEEEE      9999     BBBB      6789     EEE      0123    EE

 となっております。

 また、CSV作成用シートですが
   __A__  __B__  __C__  __D__  __E__    __IR__ 
 1 項目1  項目2  項目3  項目4  項目5  …項目252
 2 
 3 
 4
 5  
 ここで、=IF(入力シート!$C5="","",VLOOKUP(入力シート!$C5,データ参照用シート,3,0))の数式をA3から入れていきます。
 ただし、この数式は1例で、
 =IF(入力シート!$C70="","",VLOOKUP(入力シート!$C70,データ参照用シート,15,0))
 だったりすることがあります。

 >・入力範囲のセルはVLOOKUP関数の第一引数に使う(検索値)
 に関してですが、引数に使うのはデータ入力シートのC列の値のみです。

 また、3つの疑問についてですが
 >・追加された列の数式はどうすんの?
 >・列固定の複合参照式ってことはA〜B列どうすんの?
 入力用シートのC列に入力されたコードのみ用いますので、考えなくても良いです。

 >・VLOOKUPの列数3が変動の意味がわからない。(コレは入力シート対象ではないもんね)
 変動というのは、取得したい項目の列の位置が変わってくるからです。

 これで分かりますでしょうか…
 お時間のある時で良いので目を通して頂けるだけで結構です。

 (ミカン)

 この表3つのうち、どこが削除されたり、追加されたりするの?

 結局データ参照用シートで列追加、削除されると読んで。。。。

 =INDEX(入力シート!5:5,MATCH(入力シート!$C5,データ参照用シート!$E$6:$E$105,0),COLUMN(A1)*2+5)

 下、右へコピー。  

 ※実際にEXCELで試してないのけど。こんなかんじかも。

 (GobGob)

 =INDEX(データ参照用シート!5:5,MATCH(入力シート!$C5,データ参照用シート!$E$6:$E$105,0),COLUMN(A1)*2+5)

 の間違い。

 (GobGob)


 削除されたり、追加されたりするのは
 入力用シートとCSV作成用シートです。
 入力用シートの入力欄を増やすロジックは出来ているのですが
 CSV作成用シートの行を増減させるロジックが出来ていません。
 言葉が足りずに申し訳ありません。

 (ミカン)

 入力シートは結局 C列しか数式に使わないんだから
 ココが残れば問題ないわけだよね?(コレ自体を削除しないでしょ?)

 なんで、あの数式なんですけどね。

 (GobGob)

 返事が遅くなってしまい申し訳ありません。
 結局仕様が変わり、対応しないことになりました…
 こんな私の為に尽力して頂きありがとうございました。

 (ミカン)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.