|
《こんなことがしたいのですが・・・》
クラスと出席番号の2つの条件が一致する人名をマクロで一発表示する。
ファイル1にクラスと出席番号のみが記載されたリストがあり,これに人名を表示する。
ファイル2にテーブルリスト(ファイル名:テーブル.xls,シート名:テーブル)を用意しています。
LOOKUP関数では下記のようなイメージになります。
<ファイル1>クラスと出席番号の2つの条件が一致する人名を表示する側
VLOOKUPの検索値にクラスと出席番号を連結 A2&B2 したものを使用しています。
A B C
┌───┬────┬─────────
1|クラス|出席番号| 名前
2| 1 | 3 |=IF(ISERROR(VLOOKUP(A2&"-"&B2,'C:\デスクトップ\[テーブル.xls]テーブル'!$A$2:$D$8,4,FALSE)),"",VLOOKUP(A2&"-"&B2,'C:\デスクトップ\[テーブル.xls]テーブル'!$A$2:$D$8,4,FALSE)
3| 2 | 1 |=IF(ISERROR(VLOOKUP(A3&"-"&B3,'C:\デスクトップ\[テーブル.xls]テーブル'!$A$2:$D$8,4,FALSE)),"",VLOOKUP(A3&"-"&B3,'C:\デスクトップ\[テーブル.xls]テーブル'!$A$2:$D$8,4,FALSE)
※#N/A! を表示させないために,=IF(ISERROR・・・を冒頭に使用しています。
<ファイル2 テーブル.xls>テーブル側
A列にクラスと出席番号を連結した列を準備しています。
A B C D
┌─────┬───┬────┬────┬─
1| 連結 |クラス|出席番号| 名前 |
2|=B2&"-"&C2| 1 | 1 |山中 |
3|=B3&"-"&C3| 1 | 2 |古賀 |
4|=B4&"-"&C4| 1 | 3 |島田 |
5|=B5&"-"&C5| 2 | 1 |池田 |
6|=B6&"-"&C6| 2 | 2 |寺田 |
7|=B7&"-"&C7| 2 | 3 |山内 |
8|=B8&"-"&C8| 2 | 4 |松本 |
《これを記録マクロでやってみると・・・》
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-2]&""-""&RC[-1],'C:\デスクトップ\[テーブル.xls]テーブル'!R2C1:R999C4,4,FALSE)),"""",VLOOKUP(RC[-2]&""-""&RC[-1],'C:\デスクトップ\[テーブル.xls]テーブル'!R2C1:R999C4,4,FALSE))"
といった感じになりました。
ちなみにこれですと,1つのアクティブになっているセルにしか有効にならないため,
冒頭のActiveCell.FormulaR1C1 = のところを
Columns("C:C").FormulaR1C1 = に変えてみました。
《問題・・・》
これで,うまくいくことはいくのですが・・・,
1.「値の更新:テーブル」というファイル指定のボックスが必ず現れる。
⇒このボックスを表示させずして,テーブルリストを参照しに行くことはできないでしょうか?
2.Columns("C:C").FormulaR1C1 =と指定してしまうと印刷したときに白紙ページが永遠と出てしまう。
(表示はされないが,最後の行まで数式が入ってしまうためです。)
実際にはファイル1のA列とB列にデータが入っている行までのC列をマクロで指定する方法があればよいのですが,
そのような方法はありますか?
印刷する際に印刷範囲を手動で指定し直すという方法もありますが,できれば自動化したいです。
ちなみにファイル1のA列とB列のデータ入力行数は都度異なります。
3.その他,ほかによい方法があれば教えてください。
よろしくお願いします。
|
|