マトリクス表へのデータ設定高速化
office2010
index関数で別シートを参照してデータ設定する構成だと、データ数が多い場合に
時間がかかるので、高速化を実現したい。
sheet1:マトリクス表イメージのシート
J2セルに2019/01/01という日付が入っている
K2セル2019/01/02、L2セル2019/01/03以降、右方向へ+1日ずつのデータが入っており、IR2セルが2019/08/31までのデータが設定されている。
J1セルは、=TEXT(J2,"YYYYMMDD")という式で、日付を8桁の文字列表現にしたデータ設定している。
J1が20190101、K1が20190102、IR1が20190831までのデータが設定されている
A6セルからA538セルまでは、8桁の文字列データが入っている。
ABCD0001、ABCD0002の様なデータで重複番号は無い。
先頭4桁が文字列、右4桁が数字の構成。
E6セルからE538セルまでは、A列の番号を抜き出す式 =RIGHT(A6,4)が設定されている。
J6セルからIR538セルまでにWORKシートのデータを参照した結果を設定する。
なお、番号の先頭、開始がセットされた、1つ左のセルには、E列の4桁の番号をセットする構成。
WORKシート
A2セルからA4801セルまで番号データが設定されている。
B2セルからB4801セルまで、Aの番号に関連する文字列データが登録されている。
E2セルからE4801まで、日付と番号を合体させたデータを設定している。
A列 B列 E列
ABCD0001 開始 20190220ABCD0001
ABCD0001 x1 20190221ABCD0001
ABCD0001 X2 20190222ABCD0001
ABCD0001 X3 20190223ABCD0001
ABCD0001 X4 20190224ABCD0001
ABCD0001 X5 20190225ABCD0001
ABCD0001 X6 20190226ABCD0001
ABCD0002 開始 20190221ABCD0002
ABCD0002 x1 20190222ABCD0002
ABCD0002 X2 20190223ABCD0002
ABCD0002 X3 20190224ABCD0002
ABCD0002 X4 20190225ABCD0002
ABCD0002 X5 20190226ABCD0002
ABCD0002 X6 20190227ABCD0002
…
XXXX0047 X6 20190830XXXX0047
シート1のイメージ
20190220 20190221 20190222 20190223
ABCD0001 0001 0001 開始 X1 X2 X3
ABCD0002 0002 0002 開始 X1 X2
これを設定する計算式が下記で、結果が#N/Aになるのは非表示としている
Range(Cells(6, 10), Cells(Range("A" & Rows.Count).End(xlUp).Row, Cells(2, Columns.Count).End(xlToLeft).Column)).Value = _
"=IF(RC[1]=""開始"",RC5,IF(ISNA(INDEX(WORK!C2,MATCH(R1C&RC1,WORK!C5,0))),"""",INDEX(WORK!C2,MATCH(R1C&RC1,WORK!C5,0))))"
上記の計算を実施すると2分くらいかかるので、もっと早く対応可能な構成にしたい。
Webでいろいろ調べた所、配列を使用すると高速化可能というのが分かったのですが、上記の通り、式が複雑なので、対応できない次第です。
配列でなくても、短い時間でシート1のイメージの様にデータが設定されるマクロを教えて頂きたく。
よろしくお願いします。
お礼
ありがとうございます! どれもなるほどという回答でしたが、中でも添付していただいた表は簡単で今すぐ実践できるものです! 感動レベルです!本当にありがとうございます!!