Excel VBAで別シートの特定列を参照して新しいシートを作成する方法

このQ&Aのポイント
  • Excel VBAを使用して、別のシートの特定の列を参照し、新しいシートを作成する方法について教えてください。
  • 現在のコードでは、20回以上の同じ処理を行っており、処理が非常に遅くなっています。
  • 参照元シートの値を変更すると、参照先シートの表も自動的に書き換えたいと考えています。値コピーではなく参照式を一括で埋め込む方法や、他の高速な方法があれば教えてください。
回答を見る
  • ベストアンサー

こんにちは。

こんにちは。 Excel VBA で別シートの特定列をセル参照させて、あたらしいシートを作成しています。 以下の方法で実現できてはいるのですが、行数が多く且つ20回以上(20列というべき?)も 同じ処理をさせているため、処理が3分近くかかって遅いことを気にしています。 (やりたいこと) ・参照元シート「AAA」の値を変更すれば、参照先シート「BBB」の表も自動的に書き換わるようにしたい。 ・AAAシートのデータ行数は各列とも同じだが、何行あるかは不定。 ・参照元、参照先の列関係(下の例で言えばAAAシートB列をBBBシートC列に、AAAシートY列をBBBシートD列に対応させる)は固定。 (現在のコード) 参照元シート「AAA」のB3~B5003のセル番地を、参照先シート「BBB」のC11~C5011に設定。 同様に、参照元シート「AAA」のY3~Y5003のセル番地を、参照先シート「BBB」のD11~D5011に設定。 同様に…(これを約20列分行なう) Dim maxRow As Long, n as Long maxRow = 5003 ' 実際には関数を使って取得します。 For n = 3 To maxRow ' AAAシートB3~B5003 → BBBシートC11~C5011 Cells(8 + n, 3).Formula = "=AAA!B" + n ' AAAシートY3~Y5003 → BBBシートD11~D5011 Cells(8 + n, 4).Formula = "=AAA!Y" + n '  : '  以下同様の処理がおよそ20列続きます。 Next n 値コピーではなく参照式を一括で埋め込む方法や、別の手段で参照式の設定を高速化させる うまい方法をご存知の方、ご教授いただけませんでしょうか。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

列ごとに分解する必要もないかと ・・・ Range("C11:Z5011").FormulaR1C1 = "=AAA!R[-8]C[-1]" の実行1回で数式の設置が出来ると思いますよ アクティブなシートがBBB以外なら BBB.Range("C11:Z5011").FormulaR1C1 = "=AAA!R[-8]C[-1]" といった具合にしましょう

yasuke7
質問者

お礼

参照式もRange関数で設定できるのですね!大変助かりました。 ありがとうございました。

関連するQ&A

  • 参照先をセルに入力して、他のブックのセルを参照する方法

    Excelで、他のブックのセルを参照したいです。 たとえば、あるExcel(test.xls)上から、別のフォルダにある複数のブック C:\AAA.xls D:\BBB.xls の値を参照する場合ですが(AAA.xlsとBBB.xlsは、値の内容は違うが、同じシート名の同じセルに値が入っている)、 test.xlsのSheet1のA1に「C:\」、A2に「AAA.xls」を入力すると、test.xlsのSheet2にはAAA.xlsの値を表示し、 test.xlsのSheet1のA1に「D:\」、A2に「BBB.xls」を入力すると、test.xlsのSheet2にはBBB.xlsの値を表示するような方法です。 参照先が固定であれば、='C:\[AAA.xls]Sheet名'!D5・・・のような指定ができるのですが、参照するファイル名とパス名が都度変わるので、入力したセルの値で参照先を変えたいのです。 ちなみに、INDIRECTを使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • エクセルVBA

    例えば、 Range("A1").Formula = "=$B$1+$C$1" は可能なのですが、 シートが違う場合の書き方を教えてください。 A1は(AAAシート) B1とC1は(BBBシート) マクロを登録するシートはAAAシートの方です。

  • 列挿入の時、セル参照を変化させたくないんです!!

    列挿入の時、セル参照を変化させたくないんです!! エクセル2003XP AというブックとBというブックが存在し、ブックBのあるセルを参照しブックAに出したり、ブックBのあるセルを使用しブックAで計算したりしています。 参照元のブックBに、たまに列を挿入することがあるのですが、参照先セルが自動で調整され、とりたいセルを変えてしまいます。   例えば・・・[B.xls]Sheet1!$C$7がB列に1列挿入されることで[B.xls]Sheet1!$D$7に変化 列を挿入しても参照先がC7のままにしたいのですが、どうしたらいいのでしょうか? お力をお貸しください。 宜しくお願いします<m(_ _)m>

  • マクロで重複データの削除

    過去ログを使っていろいろ試したのですが、うまくいかなかったので助言お願いします。 データ的には B列 C列 AAA 50 AAA 50 BBB 70 BBB 70 BBB 72 CCC 25 のようなデータあります。 これを「AAA」でC列のデータが同じやつはひとつにするということをやりたいのです。 B列 C列 AAA 50 BBB 70 BBB 72 CCC 25 のようになります。 B列第一優先にC列第二で並べ替えをして、過去ログ参照より、下のデータからループしてくというのを試したのですが、全部削除されてしまいます。 しかし、これでは並べ替えの場合によってはCの重複がおかしくなると思うので、B列参照したほうがいいのかな? 別シートに書き出しタイプでないやり方をしたいと思っています。お助けくださいよろしくお願いします。

  • Excel2002:複数条件のデータの個数の集計

    苦手な集計について質問させてください。 [A] [B] [1] AAA aaa [2] BBB bbb [3] AAA aaa [4] AAA bbb [5] BBB ccc 上記のようなデータで[A]と[B]のAND条件でみたときの個数を集計したいと思います。 例えば上記であれば、 [A]AAAかつ[B]aaa・・・2個 [A]BBBかつ[B]bbb・・・1個 [A]AAAかつ[B]bbb・・・1個 [A]BBBかつ[B]ccc・・・1個 になります。[B]のデータは[A]のデータに依存せず、[A]の各値にまたがっています。([B]bbbは[A]AAAと[A]BBBの場合があります) 実際のシートでは、全パターンを網羅したリストがA列とB列、集計対象がD列とE列にあります。 上記の例でいえば、以下のようになっています。 [A] [B] [C] [D] [E] [1] AAA aaa AAA aaa [2] AAA bbb BBB bbb [3] BBB bbb AAA aaa [4] BBB ccc AAA bbb [5] BBB ccc つまり[A]列と[B]列が組み合わせパターン、[D]列と[E]列が集計元データです。 ちなみにパターン数が414個、集計元データは29000個程度です。 そして最終的な各パターンの個数を[C]列に表示させたいと思います。 VLOOKUPやピボットテーブルを考えましたが、ピンと来ません。 適切なやり方を教えてください。よろしくお願いします。

  • エクセルの文字処理

    以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD    A   B   C   D  1|    AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は  ・セル内にスペースで区切られない文字列があった場合には、B列に入れる  ・それ以外はスペースで区切って、A列B列C列D列に入れる  ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。

  • エクセルで数式の中のセル番地を取り出す方法?

    エクセル2000です。 C列で =Sheet1!B17とか =Sheet2!C13というように他のシートのセルを参照しています。 これをA列にシート名(Sheet1)、B列にセル番地(B17)を取り出す方法はないでしょうか? なお、実際のシート名はSheet1~Nではなく、不定です。

  • Excelの参照について。

    こちらでは初めて質問させてもらいます。マクロ初心者です。長くなりますが携帯からなので画像貼れずにすいません。 vistaで2007使用です。 Sheet1に備品一覧表(結合セルなしで1行に備品ひとつ分が15列で400行くらい)があり、Sheet2に個表(空欄で枠のみの表で横に3品、縦に3品の9品分を1ページに印刷できるよう設定)を作成したいです。 Sheet2はSheet1の1行の中から一部を抽出して作製したい様式の違う表です。 例えばSheet1のA1がSheet2のA1からC1を結合したセルに、Sheet1のD1がSheet2のB2に、Sheet1のN1がSheet2のC3に…など 1つ目の参照が終わったら2つ目はSheet1のA2がSheet2のD1からF1を結合したセルに、Sheet1のD2がSheet2のE2に、Sheet1のN2がSheet2のF3に…という具合で もう1つ分右にいってから 4つ目は1つ目の下に移動しSheet1のA4がSheet2のA13からC13を結合したセルに、Sheet1のD4がSheet2のB14に、Sheet1のN4がSheet2のC15に…という具合で400行分参照するようにしたいのです。 Sheet2の各セルに一つ一つ参照を設定していくのも大変なので、Sheet1の必要なセルを参照してSheet2の各セル(結合セルあり)に表示させるマクロをつくりました。 今後Sheet1で変更したいのでコピー貼り付けでは都合がよくありません。いろいろ参考にさせてもらってヘルプで意味を調べながら作ったのですが、下記のコードでSheet1に文字が入っているセルの参照はできましたが、Sheet1に関数を入れているセルの参照の部分がうまくいきません。(関数が表示されます) Sheets(2).Select Cells(x, y).Select ActiveCell.FormulaR1C1 = "=Sheet1!R[" & CStr(i) & "]C[" & CStr(j) & "]" Sheet1で使った関数はこれです。 =IF(M10=1111111,"不明","H"&RIGHT(M10,6)) Sheet1のM列には購入日を数値化した七桁の数字(例えば4210310はH21.3.10のこと)が入っていて、N列に関数でH210310(ホントはH21.3.10としたいができませんでした。)と表示させそれをSheet2で参照させようと考えました。 文章表現がわかりにくいところがあると思いますし、マクロ初心者のため簡単なところが間違っているのかもしれませんが自分で解決できないのです。どなたかお助け下さい。

  • シート内の一部のセルを別シートにコピー

    Excelのマクロ(VBA)の記載方法について お分かりになる箇所だけでも結構ですので、 どなたかご教授を願い致します。 シートX   A    B   C  1 data1 data2 data3 2 x   data7 data8 3 data4 data5 data6 4 data7 data8 data9 シート Y   A   B   C    D 1 length 3  (任意) (任意) 2 xxxx (任意) (任意) (任意) 3 zzz  (任意) (任意) (任意) 4 (空白)(任意) (任意) (任意) 上記のような2つのシート(同一Excelファイル内)があって、 シートXの一部のセルを次の条件(1~4)でシートYにコピーしたい場合 1.コピー元の列の数は、シートYの "length"と書かれたセルの右となりの数字   とする(上記では3なので、A,B,C列をコピー対象) 2.コピー元の行の数は、シートXの1~4行目までとするが、   シートXのA列のセルが"x"だったら、その行は全てコピーしない。 3.コピー先(Y)の列は、コピー元(X)の列と一つずれてコピー(BならCに、CならDに) 4.コピー先(Y)の行は、シートYのA列で1行からで始めて空白セルになった行からコピー開始。 (上記では、A列で空白セルのある4行目からコピー) 上記条件で、下記のシートYを作成したいのですが、 この場合どようなマクロ(VBA)で実現できますでしょうか。 コピー結果(シートY)  A     B   C   D 1 length  3  (任意) (任意) 2 xxxx  (任意) (任意) (任意) 3 zzz   (任意) (任意) (任意) 4 (空白) data1 data2 data3 5 (任意) data4 data5 data6 6 (任意) data7 data8 data9

  • エクセル VBA Select case の繰り返し処理

    エクセル VBA Select case の繰り返し処理がうまくいきません。 セルB5に条件となる文字列(AAA、BBB、CCC...)があり、 セルC5にAAAなら10、BBBなら20、CCCなら30といった具合に出力し、 セルB6⇒C6、B7⇒C8と順々にセルB50⇒C50まで続けて処理したいのですがどのように対処すればよろしいでしょうか? For~Nextを使って繰り返し処理したいのですが、お分かりの方がいればご教授のほどよろしくお願いします。

専門家に質問してみよう