• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マトリクス表へのデータ設定高速化)

マトリクス表へのデータ設定高速化方法を学びたい

このQ&Aのポイント
  • office2010のindex関数で別シートを参照してデータ設定する構成だと、データ数が多い場合に時間がかかるため、高速化の方法を知りたい。
  • シート1にはマトリクス表のイメージがあり、列に日付、行に番号が設定されている。WORKシートには番号、文字列データ、日付と番号を合体させたデータが登録されている。計算式を使用してデータを設定しているが、実行時間が長すぎるため、高速化の方法を教えてほしい。
  • Webで調べた結果、配列を使用すると高速化が可能とのことですが、式が複雑なため実装できない状況です。配列を使用せずに、効率的にデータを設定する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

添付画像のレイアウトなら こんなコードでいかがでしょうか? Option Explicit Sub Sample()  Dim tgtBk As Workbook  Dim GetSh As Worksheet  Dim PutSh As Worksheet  Dim RowCounter As Long '行カウンター    Dim Rowadr As Long '出力先行番号  Dim Coladr As Long '出力先列番号    Set tgtBk = ThisWorkbook  Set GetSh = ThisWorkbook.Sheets("work")  Set PutSh = ThisWorkbook.Sheets("Sheet1")    RowCounter = 2  Do   If GetSh.Cells(RowCounter, 1).Value = "" Then Exit Do   Rowadr = GetRowNum(PutSh, GetSh.Cells(RowCounter, 1).Value)   Coladr = GetColNum(PutSh.Cells(2, 10).Value, GetSh.Cells(RowCounter, 7).Value)   If ((Rowadr > 5) And (Coladr > 9)) Then    PutSh.Cells(Rowadr, Coladr).Value = GetSh.Cells(RowCounter, 2).Value   Else    MsgBox ("出力先アドレス算出不能 行:" & Format(RowCounter, "0"))   End If   RowCounter = RowCounter + 1  Loop End Sub '//行番号取得関数 Function GetRowNum(TblSh As Worksheet, BData As String) As Long  Dim RowCounter As Long  RowCounter = 6  GetRowNum = 0  Do   If TblSh.Cells(RowCounter, 1).Value = "" Then Exit Do   If TblSh.Cells(RowCounter, 1).Value = BData Then    GetRowNum = RowCounter    Exit Do   End If   RowCounter = RowCounter + 1  Loop End Function '//列番号取得関数 Function GetColNum(SDate As Date, MData As String) As Long  Dim wkDate As Date  wkDate = DateSerial(Left(MData, 4), Mid(MData, 5, 2), Mid(MData, 7, 2))  GetColNum = wkDate - SDate + 10 End Function

3620313
質問者

お礼

回答ありがとうございます。 助かりました。 もの凄く早く出来ました。 15[s]くらいで完了です。 ※ なお、番号の先頭、開始がセットされた、1つ左のセルには、E列の4桁の番号をセットする構成。 が無かったので、次の様に対応しました。   PutSh.Cells(Rowadr, Coladr).Value = GetSh.Cells(RowCounter, 2).Value →ここに追加   Else 下記を追加 If PutSh.Cells(Rowadr, Coladr).Value = "開始" Then Dim a As String a = Cells(Rowadr, 5).Value PutSh.Cells(Rowadr, Coladr - 1).Value = a End If また、書き込むセルが、数値4桁表現されなかったのでセル自体を文字列としました。

その他の回答 (1)

回答No.1

Q、マトリクス表へのデータ設定高速化法。 A、VBAでプログラミングする。 >別シートを参照してデータ設定する構成だと・・・  この別シートが、一日単位で更新されると仮定。で、更新後に配列に呼び込んで利用できると仮定。この二つの仮定が成立すれば、セットする値の確定に要する時間は、0.001秒以下。後は、シートを更新する時間だけです。 Step1、別シートを更新する都度に、そのデータをバイナリーファイルとして排出する。 ・バイナリーデータのレコードは1行の構造体変数。 Step2、VBAで構造体変数を呼び込み、一気に処理する。 で、無事に高速化が達成されると思います。

3620313
質問者

お礼

回答ありがとうございます。

関連するQ&A