• ベストアンサー

VBAで表の集計方法(値の出力方法)について

まだVBA初心者です。 とっても曖昧な質問なんですが、今会社で莫大なデータベース?(表:Excel)から特定条件の値を抜き取り、違うシートに表を作るマクロを作ってます。 ただ、値を抜き取ると言っても、1行目のD列が"1"だった場合は1行目のG列の値と2行目のG列の文字列をくっつけて別シートの一つのセルに入れたり…D列の値が"2"だったらG列の二つ下の文字列とくっつけて、他にもB列の日付が今日より過去だったら…みたいな条件が30以上あるんです。 そして元々の表が列数が70弱、行数は4000を超えています。 元々の表(表1)の1行目から条件を特定していき、条件が合えば移してまたその下の行を…とやっていこうと思ってます。 特定条件で抜き取るマクロはなんとか書けそうなんですが、そもそも元の表(表1)から別シートの表(表2)へ値を移す方法がどうしたらいいのかわからず質問しました。 移す方法と言うのは、例えば、元々の表(表1)のA1、C1、E1を別シートに移すとして、移す値が少なければ、A1、C1、E1をコピーして別シートにペーストすればいいんでしょうけど、あまりにも移す値が多い(1行で25の値)ので、マクロ上で条件に合う値を一度変数に全部入れて別シートにValueで入れたほうが早いですよね?それとも2つのシート間で条件に合った値のコピペを繰り返した方がよいのでしょうか?CPUやメモリの量にもよるんでしょうが、どっちの方が負担がすくなく、サクッっと行くのか知りたいです。 どう説明していいのか分からず、意味がわからないかもしれませんがよろしくお願いします。

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

  • ベストアンサー
回答No.1

Sheet1からSheet2にデータをコピーするだけなら、それぞれのシートを参照してValueからValueへ値を渡してしまうのが手っ取り早いです。わざわざクリップボードを経由する必要はありません。 ついでに、アドレスだけを指定すればSheet2の同じアドレスへコピーするプロシージャも作ってみたり。。。 Public Sub Sample() ' 直接コピー Sheet2.Range("A1").Value = Sheet1.Range("A1").Value ' コピー用メソッドを使ってコピー Copy "B1" Copy "B2" Copies "C1", "C2", "C4", "C8", "D3", "D5", "D7" End Sub ' 指定したアドレスをSheet1からSheet2にコピー Public Sub Copy(Address As String) Sheet2.Range(Address).Value = Sheet1.Range(Address).Value End Sub ' 指定した複数のアドレスをSheet1からSheet2にコピー Public Sub Copies(ParamArray Addresses()) Dim Address As String For Each Address In Addresses Sheet2.Range(Address).Value = Sheet1.Range(Address).Value Next End Sub もちろんこれを全て手書きで書くのではなく、For等のループ処理やSelect Caseなどの条件分岐を組み合わせて、できるだけ効率よく処理することが肝要です。

micazroom
質問者

お礼

返事が大変遅れてすみませんでした。 Wizard_Zeroの言うようにValue渡しで作ったら思っていた以上に速く動いて本当に助かりました! ありがとうございました!!

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

少なくともコピペが一番かかりそうです。 一般的には Sheet2.cells(1,1)=Sheet1.cells(2,1) ちょっと裏技的な方法ですけど一番早いのは抽出するデータ量が大きくないという条件ですが variant型の変数を宣言してこれを配列とみなしてデータを入れる 受取側のシートのrange指定=として代入 これは早いです。 暇があったらコードを書きます。 自分で調べてみてください

micazroom
質問者

お礼

返事が遅れてすいませんでした。 データ量が多いので一つずつ宣言しましたが、はやいVBAが書けてとても満足してます! ありがとうございました!

関連するQ&A

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • ExcelVBAのコピーもしくは集計方法

    ExcelVBAについて質問させて下さい。 いくつもの区分に分かれたデータが以下のように並んでいます。(区分は80程度あります) A   | B | C | D | E | F | G | H | ------------------------------------------- 1 | 行ラベル | 11 | 12 | 13 | 14 | 15 | 21 | 22 | ------------------------------------------- 2 | 123456 | | | | | | | | ------------------------------------------- 3 |(性別:男)1| | | | | | | | ------------------------------------------- 4 | (年代)40 | 1 | 5 | | | | | | ------------------------------------------- 5 | (年代)45 | | | | 2 | | | | ------------------------------------------- 6 | (年代)50 | ------------------------------------------- … 16| (年代)100| 1 | 2 | 3 | 2 | 1 | | | ------------------------------------------- 17|(性別:女)2| ------------------------------------------- 18|(年代)40 | ------------------------------------------- … 30|(年代)100| ------------------------------------------- 31| 234567 | ------------------------------------------- 32|(性別:男)1| ------------------------------------------- 33| (年代)40| … ・「123456」「234567」は区分コードです。 ・( )を含めた文字は、実際の表にはありません。 ・区分ごとに「男」と「女」があり、それぞれ「40」から5才刻みで「100」まで年代があります。 ・行ラベル「11」「12」はあるデータ名を数値化したものです。  (1)区分コード  (2)性別  (3)行ラベル  (4)年代 以上の4つの条件が集約された表です。 ・この表は別にデータがあったのではなく、これを与えられました。マクロなどで加工していません。 ・年代は数値が入っていない場合には、行が無い場合があります。40代は何も数値がないので、45から始まるなど。 この表を使って何をしたいかというと、行ラベルの「12」「13」「14」「15」だけに絞り別シートに抽出し、区分コード別に表を作りたいのです。表を作成するときには、抜けている年代もきちんと入れて。例え値が0でも。 以前、ここでの質問で複数条件で一致した場合の集計方法を教えていただきましたので、A列をコピーして、「区分コード」「性別コード」を次のコードが出てくるまでコピーできれば同じことができると考えました。 ですが、次のコードが出てくるまでのコピーのコードの記述方法、列をコピーするので区分コードの行では、性別コードの部分もコピーして上書きしてしまう方法が分かりませんでした。 一番は、こんなややこしい表の集計方法を教えていただけましたら幸いですが、もしくは、次の値が出てくるまで同じもののコピーの繰り返しと特定の文字は無視して上書きの方法を教えて下さい。 例えばなのですが、「123456」がある列に対して、「1を空白にする」という置換を行ったら「23456」になってしまいますか? 質問が多くて申し訳ございません。

  • 【VBA】エクセルからパワポの表に値を貼り付けたい

    エクセルに項目が縦に1列に並んでおり、その右隣の列に値Aがあるとします。 エクセルの項目と同じ文字列が書かれた表がパワーポイントにあり、その右側に値Aを貼り付けたいです。(表は項目が左に1列、右に値Aを入力したい列が1列ある形です。) エクセルと同じ文字列が入っている表があれば、その表の右側に値を代入するといった条件式をVBAで作成することは可能でしょうか。 エクセルのマクロはよく使っているのですが、パワポは全く分かりません。 実現可能かも含めご教示いただきたいです。

  • Excel VBAにてSUMIF関数の入力

    Excelのあるシートに以下の表があります。     E列 ・・・・・・ F列 ・・・ G列 17行 2008/1/5 ・・ 売上 ・ 1,500 18行 2008/2/10 ・・売上 ・ 2,100 19行 2008/3/11 ・・売上 ・ 1,700 20行 2008/3/18 ・・売上 ・ 1,000 21行 2008/4/1 ・・・売上 ・ 2,500 23行 2008/3/15 ・・・・・・・ 3,500 この場合G23セルには=SUMIF(E17:E21, ">" & E23,G17:G21) という式が入っており、結果的に3,500という数字が見えます。 しかし、このG23セルにマクロにて式を書込み同じ3,500という 値を出したいのですが、マクロ上では何と記述すれば同じに なるのか教えて下さい。 例えばrange("G23").Fomula= "=SUMIF(E17:E21, ">" &E23,G17:G21) と記述してもエラーになってしまいます。

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • Excel 2007 マクロ 表の値の抽出について質問させて頂きます。

    Excel 2007 マクロ 表の値の抽出について質問させて頂きます。 4つの表がSheet1にあります。 表は画像として添付しました。 外国産、国産、その他のいずれかの列に数値が入って いる行をコピーしてSheet2に貼り付けるマクロを考えています。 昨日、2つの表の場合のマクロのご回答を頂きました。 2つ表が追加されると上の2つは、抽出されるのですが 下2つは抽出されません。 表が4つと2つではマクロが異なるのでしょうか。 マクロ超初心者ですので、文が長くなっても構いません。 容易なマクロのサンプルをご紹介いただけませんでしょうか。

  • このような行の集計(統一)方法はありますか?。

      次のような行の集計(統一)をしたいのですが、できる方法があればご教示ください。   統一は方法は、関数でも、マクロでもかまいません。   予めA列でソートを行っており、行は5行目からとなります。      ソートの結果、下記のような   5行目6行目7行目のあA列が同じであるため、5行目と6行目7行目の数字は合計、   文字はそのまま表示とした統一方式です。   なお、BCD列の文字列には必ず1列にしか文字は入りせん。   また、結果を別シートに統一でもかまいません。     列    A  B  C  D  E  F  G             5行目  あ い          1  3  4 6行目  あ    か     3  5  6 7行目  あ       き  1  2  1  ↓ 結果   あ い か き  5  10  11     行は;5行目から500行ほどあり、A列の同一項目行が2行であったり、4行であったり、   また、単一の行もあるなど、バラバラです。   要は、A列が同じ行は一行に統一したいのです。   どなたか、よろしくお願いします。   

  • 1の表の値を2表から探してその隣列の値を3表へ貼付

    なかなかうまくできないため、もう少し詳しくかきます。 表画像は細かいので貼りつけません。excel2007 (1)book1.の表の値を (2)book2.の表の中から見つけて、その隣の列の値を (3)book3.の表の該当する箇所にふりがな表記の縦書きにして貼付けます。 book1.sheet1 B3から下方に英数字の値が1000行程度羅列しています。 例)a243,a546,b124... その値をbook2.sheet1 A列の中から見つけ、 その隣B列の値"文字列"を book3.sheet1の表の該当箇所に、 ふりがな表記の縦書きにして貼付けます。 book3.の表は、A2:Y2 までの列に25,24,23,22,...1と A5:Y5の列に50,49,48...26と数字が左から右に並んでいて、 このA2:Y7で1グルーブになり、Z2に"A1グループ"となっています。 このグループが下方に"A1グループ"~"A8グループ" 8グループあるというような表です。 ちなみに"A2グループ"はA8:Y13というぐあいです。 このAグループがsheet1に,sheet2にはBグループが同じ表であります。 例)book1でa243という値は最終的にbook3のA2グループの43のセルの2つ下H13に (2)(3)という方法で貼付けます。 b124という値はbook3 sheet2 Bグループの表”B1グループ"の24のセルの2つ下B:4に貼付けられます。 よろしくお願いします。

  • 同じ様式の表の複数シートから行ごと抽出

    A2:K12の範囲に表がある全く同じ様式のシートが複数あります。 特定の条件が満たされた行を全て別シートに抽出したいです。 1列目と2列目とX列目(これは集計のA1セルに入った値を参照)が空白でない行を全て抽出したいです。1列目と2列目は1行目から順番に埋まっているのですが、X列目は空白になっているものと空白でないものが混在しています。 たとえば、Xが10列目のときは、Aさん、Bさん、Cさん、Dさん、Eさんの行が抽出されるようにしたいです。 VBAのコードを自力で書けないので、よろしくお願いします。

専門家に質問してみよう