• ベストアンサー

エクセル マクロで数式の検索範囲を指定するには

いつもお世話になります。 別シートに貼り付けたデータを、マクロで自動的にSUMIFやCOOUNTIF関数で集計しているのですが、現在は範囲を3~65536行までにしています。(上2行を見出しにしているので) これだと計算に非常に時間がかかるのですが、貼り付けたデータの行数のみを数式の範囲にするか、もしくは同じようなことをVBで行うことは可能でしょうか。 以上宜しくお願い致します。

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

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

#1です。 こんなのではどうでしょうか?意図されているのとちがいますかね?? Dim a As String Dim i As Integer ' ActiveCell.SpecialCells(xlLastCell).Select a = ActiveCell.Row For i = 1 To 30 ActiveCell.FormulaR1C1 = "SUMIF('Sheet1'!3C4:R" & a & ",RC2,'Sheet1'!R3C11:R" & a & "C11))" Next

7-samurai
質問者

お礼

まさにこれです。問題解決しました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • ta123
  • ベストアンサー率51% (95/186)
回答No.5

集計表シートがsheet2としますと、以下のようになるのではと思います。前後の処理が不明なため、都合の悪いところがあるかもしれません。また、埋め込みたい関数は再チェックしてください。 ' sheet1の最終行を求める(A列でチェック) Worksheets("sheet1").Select Range("A65536").End(xlUp).Select MyRow = ActiveCell.Row   '行番号を記憶 'アクティブシートを集計シートに切り替える Worksheets("sheet2").Select '埋め込む関数を編集する MyStr = "=SUMIF('Sheet1'!R3C4:R" & MyRow & "C4,RC2,'Sheet1'!R3C11:R" & _ MyRow & "C11)" For i = 1 To 30 ActiveCell.FormulaR1C1 = MyStr ・・・・

7-samurai
質問者

お礼

いただきました回答をもとに、問題解決しました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>マクロで自動的にSUMIFやCOOUNTIF関数で集計しているのですが この意味が良く判りませんが。 合計値をセットする(出す)セルは変動するのでしょうか。 =で代入している(下記)のでしょうか。 Worksheet関数を使っているのでしょうか。 式をFormulaで埋めこんでいるのでしょうか。 マクロを使えばSUMIFやCOOUNTIF関数は必ずしも必要なく他のやり方で合計が出せますから。 ただ関数以外を使うと、データが増えても再計算してくれませんが。それで関数を使っているのかも。 最下行はd = Range("A1").CurrentRegion.Rows.Count で捉えるので Sub test02() d = Range("A1").CurrentRegion.Rows.Count Cells(10, 1) = "=Sum(a1:a" & d & ")" End Sub のようにすればよいかと思います。 >質問の中の「貼り付けた」に拘ると VBA程度では、「コピーをした」や「貼り付けをした」、という動作(イベント)を掴まえることが難しい。 (クラスという考えを持ちこんで出来るかどうか。) 貼りつけた後で、一番最下行(か最右行)を知ることは出来ますが、縦列データのある途中までに貼りつけられると お手上げです。 ボタンを貼りつけ、コピー範囲を指定した段階でボタンを 押すと、下記コードを入れておくと、指定範囲を捉えることが出来るのですが。 Private Sub CommandButton1_Click() MsgBox Selection.Address End Sub 関数を使えば、データが貼りつけられた段階で、データが変るので、再計算機能が働きますから、上記を意識しなくてもよいですが。

7-samurai
質問者

お礼

補足を記入した後に、他の方々からも回答をいただきましたが、最初にいただいたお答えでも問題解決できていましたね。 いつもありがとうございます。

7-samurai
質問者

補足

ありがとうございます。 質問が言葉足らずで申し訳ございません。 別シートに集計表があり、 For i = 1 To 30 ActiveCell.FormulaR1C1 = "SUMIF('Sheet1'!3C4:R65536C4,RC2,'Sheet1'!R3C11:R65536C11))" ・・・・ という形で集計するようにマクロを組んでいるのですが、この、「3~65536行」という範囲を、例えば2000行までしかデータが貼り付けられていなければ、「3~2000行」という数式に変更できないかという質問です。 尚、データは3行目から連続して貼り付けられているものとしています。 申し訳ないですが、ご存知でしたら、宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

途中に空白行がある場合は、以下の方法も有効だと思います。 ActiveCell.SpecialCells(xlLastCell).Select これはCtrlキーとEndキーを同時に押して移動するのと同じ動きになります。

全文を見る
すると、全ての回答が全文表示されます。
  • ta123
  • ベストアンサー率51% (95/186)
回答No.1

途中行に空白が無い場合、最終行を以下で知ることができます。 Range("A1").End(xlDown).Select または Range("A65536").End(xlUp).Select これはA1セルをアクティブにしてCtrlと↓(↑)キーを押した時の動作と同じです。この結果選択されたセルの行番号を用いればいいと思います。

7-samurai
質問者

お礼

他の方々からの回答と併せて、問題解決できました。 ありがとうございました。

7-samurai
質問者

補足

ありがとうございます。 質問が言葉足らずで申し訳ございません。 別シートに集計表があり、 For i = 1 To 30 ActiveCell.FormulaR1C1 = "SUMIF('Sheet1'!3C4:R65536C4,RC2,'Sheet1'!R3C11:R65536C11))" ・・・・ という形で集計するようにマクロを組んでいるのですが、この、「3~65536行」という範囲を、例えば2000行までしかデータが貼り付けられていなければ、「3~2000行」という数式に変更できないかという質問です。 いただいた回答の内容でしたら、ActiveCellの行番号を取得するということだと思うのですが、そこからどのように数式に反映すれば良いかが分からないのです。 申し訳ないですが、ご存知でしたら、宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel関数について,参照データの範囲が変わる時

    Excelの関数について教えてください。 まずExcelで、”Sheet1とSheet2があり、Sheet2には、Sheet1のデータをもとに情報が入力されるように関数{IF(Sheet1!A1="","",Sheet1!A1)}を200行目まで入力されている”ものがあるとします。 それを使って以下のような作業を行います。 1. 職場のシステムからExcelデータを抽出する 2. 抽出したデータをエクセル(sheet1)に貼り付ける。 3. Sheet2にSheet1をもとにした計算結果が表示される 以上が現在、行っている作業です。 ただ問題があり、毎回、sheet1に貼り付けるデータの範囲(行数)が異なるため、sheet2のどこまでに数式を設定しておけばいいのかわかりません。今は適当に200行目まで数式を入力してあります。 『質問』Sheet1に貼り付けるデータの範囲(行数)と同じ範囲(行数)分だけ、Sheet2にも数式が表示されるようにしたい。(例)sheet1に2345行あるデータが貼り付けられた→それをもとに、Sheet2に関数を2345行目まで、自動で入力する。 大変お手数ですが、分かる方教えて頂けますか?よろしくお願いします。

  • エクセル 異なる範囲の集計(合計)

    誰かアドバイスをお願いします。 エクセルで下記の様な異なる行数(範囲)を自動集計させたい場合はどうすればよろしいでしょうか?       A      B      C     D        E      日付    注文NO  金額   注文金額計  日別注文金額合計 1   5月1日     1     50     150       250 2                  50       3                  50                4             2    50     100 5                  50                    6   5月2日     3     50     50        150 7             4     50    100 8                   50                                            やりたい事は、D列へ注文金額計に注文NO別の合計金額を集計させる事(注文NOごとの一番上の行のみです。)  と E列へ日別の注文金額合計を集計させる事です。(日別の一番上の行のみに表示)   sumif関数を使えばうまく行きそうなのですが、問題が2つあります。 (1)集計条件の日付や注文NOは、重複している場合は、一行のみ表示の仕様です。(他ファイルからデータを貼りける為、その様な仕様になり、極力入力する事は避けたいです。) (2)合計範囲の行数が一定ではないので出来ればEやD列の全てのセルに関数なりを設置し、一番最上行のみに結果を表字したい。例えばsumif関数をE,D列全ての行に設定してしまうと同じ集計結果が何行にも渡って表示されてしまうのは避けたい。(上の例でいえばE列に150が何行も表示されてしまう。 かといって重複行の最上行のみに関数を設定するのは、一行ずつの作業になってしまう為、避けたい。 何かいい方法がないでしょうか?   個人的には、関数の方がやりやすいのでいいのですが、マクロやVBEでもあれば教えて頂けますでしょうか?

  • VBAでのセル範囲指定について

    お世話になります。 私が分からないのは、VBAでのセル範囲指定なのですが、 例えば、シートにデータが有、そのデータの1行目は見出しなので 2行目からデータが入っているセルまでの範囲を指定、コピーして 隣のシートに貼付したいのですが、そのデータの入力される範囲が 毎回違います。「CurrentRegion.Select」としてしまうと、1行目 の見出しまでも範囲指定されてしますので、どうやったら良いのか どなたかお教え頂きたく宜しくお願い申し上げます。

  • Excelのマクロを使わず、数式内のセル指定範囲をダイナミックにすることはできますか?

    Excelで数式内に範囲を指定するときに、先頭と最後尾のセル番地を指定しますが、他のセルで指定した数値を指定したセル番地の行数に指定することはできますか? 例えば、以下のようなサンプルにおいて A B C D 1 10 2 4 2 32 3 42 4 20 5 17 6 =sum(A2:A4) C1番地に2、D1番地に4を入力すると自動的に A6番地でA2~A4の範囲を指定して足し算してくれるようなことをマクロを使わずに実現できるでしょうか?

  • エクセルのマクロについて

    エクセルのマクロについて教えてください。 毎月、データをダウンロードし、VLOOKUP関数などを使って、 必要項目を入れ、ピポットテーブルで合計を出すという 作業をしています。マクロを使ったら、簡単にできるのでは ないかとやってみましたが、マクロで登録しても 毎月集計をするデータの件数が異なるため、 VLOOK関数で入力されるのが、そのマクロで登録したときの ものまでで、残りのセルが空欄になっていたり、 ピポットテーブルの集計は、データの範囲を選びなおしたり しないといけませんでした。 いい方法はないでしょうか。 マクロに作業を記録して、そのシートではなく、 ほかのファイルのシートで 実行する場合は、そのマクロを登録したときのファイル(シート)を 毎回開かなければならないのでしょうか。 基本的なことがわかっていません。 教えてください。

  • マクロでグラフ範囲を変更するには

    シート上の全グラフに対して、データ範囲のうち上から4行目までだけをグラフに使うように、マクロで一気に変更したいのです。(今は、使っている行数はグラフによって違う) そもそも、現在のデータ範囲をどうやって取得すればよいでしょうか? ネットや本で探しても見つかりません。マクロは初心者なので、調べ方がわるいと思うのですが・・・何かとっかかりだけでも教えてもらえると助かります!

  • エクセル ファイルサイズ

    エクセルのファイルサイズが約15MBと非常に大きく、立ち上がり/保存が遅く、困ってます。 データを入力しているシートは41シート。データを入力している列は全シート9列。データを入力している行はシートによりばらつきがありますが、60行~4000行の範囲です。また、全シートの入力行数総計は約36000行です。 マクロはVBAは使っていない(はず)です。数式、関数も使ってません。 ここまで容量が大きくなるか?と思います。ファイルサイズを縮小する方法、どなたかご存知ないでしょうか?ご教示お願いします。

  • 数式のコピーのズレを直す方法、マクロ、関数のいずれかの方法を教えてください!!

    数式のコピーのズレを直す方法、マクロ、関数のいずれかの方法を教えてください!! Sheet1には、計算結果が表示されるようにしてあります。 その結果の数式は、 =IF(Sheet2!A1="","",IF(Sheet2!A1<2,"<",ROUND(Sheet2!A1,2))) と、入っています。 計算結果の表示上、「Sheet1 A1とA2」の2行のセルを結合して1行にしてあって、対して「Sheet2はA1」の1行です。 これをつぎの「Sheet1 A2」に数式をコピペしていくと、 =IF(Sheet2!A2="","",IF(Sheet2!A2<2,"<",ROUND(Sheet2!A2,2))) と、していきたいのですが、 =IF(Sheet2!A3="","",IF(Sheet2!A3<2,"<",ROUND(Sheet2!A3,2))) となってズレてしまいます。 これを300行ほど作らなければならないのです。 数式、1行のセルを2行の結合したセルにコピペできる方法、もしくはマクロや他の関数があれば教えていただきたいです。 わかりにくくて申し訳ありませんが、お願いします。

  • 条件を指定して範囲指定をできるエクセル関数はありますか?

    関数でCOUNTIFがありますが、この関数では自分が指定した範囲の中から条件にあうデータの個数を数えられます。でもその範囲指定自体を別の関数等を利用して自動的に(毎日ではなく)範囲指定したいのですが教えていただけませんでしょうか?  具体的には、 12/29 +1000 12/29 -1000 12/29 +1000 12/29 +3000 12/30 +5000 12/30 +2000 12/31 0 12/31 -2000 12/31 -2000 といったデータの場合に、別シートに下記のような日付だけのシートが存在します。COUNTIFを使用して上記データすべてを選択すればそれぞれの日のプラスのデータ数、マイナスのデータ数は計算可能ですが、各日のデータ数がまちまちで毎回下記表の右欄にCOUNTIF関数をうちデータの選択をせずに自動的に各日だけのプラス、マイナスの各々のデータ数を数えられるように範囲を指定できる関数はありますでしょうか? また関数のほかに方法はありますでしょうか? 12/29 12/30 12/31

  • EXCELの計算式がこわれる(?)

    EXCELを教えてください。 [問題の表] ブック内にワークシートを3枚つくり、 1枚目にA~Sまで、1300行程度の表を作成 2枚目に1枚目から品目毎の値引金額抽出(SUMIF) 3枚目に1枚目から得意先毎の売上、原価抽出(SUMIF) しています。 1枚目は別の表よりデータを貼り付け、使いやすいように マクロを使って、移動・削除をしています。 (マクロは分からないので新規マクロ作成で作りました) [問題の起こるとき] 1枚目のマクロを実行すると、2,3枚目の計算式のSUMIFで 指定している列がおかしくなってしまいます。 マクロ実行後の行、列を参照して2,3枚目は集計して欲しい ときは、どういった対処をすれば良いでしょうか? EXCELには詳しくなく、マクロも分かりませんが、どなたか教えてください。 よろしくお願いします。

お正月に会わない甥へのお年玉
このQ&Aのポイント
  • 正月に会わない甥へのお年玉をどうするか悩んでいます。
  • 遠方の甥姪に会わない方、お年玉はどうされていますか?
  • 出費しなくていい部分だけでも減らしたいなと思って相談しました。
回答を見る

専門家に質問してみよう