gooポイントが当たる質問投稿キャンペーン>>

EXCELの関数,数式で質問です。
<例題>異なる様式の表(数値)で構成された3つのシート(a,b,c)をもつブックが,同じ型式で50個(50ブック)ある。各ブックの特定のシートの特定の数値セル(1~50ブックのbシートのA5セル)の合計を求める数式を示しなさい。
※この回答の1つは「=1ブックのbのA5+2ブックのbのA5+3ブックのbのA5+4ブックのbのA5+…+50ブックのbのA5」だと思うのです。しかし,いちいち各ブックの対象シート(b)の対象セル(A5)をクリックして数式を完成させるのは大変です。さらに,求めたい特定の数値セルが「bのA5」だけでなく「aのB3」や「cのR6」など,3つ,4つと増えるとすると,同様の数式を入力するのに大変な労力を要します。何か簡単な集計方法(関数,数式)はあるでしょうか。ややこしい質問ですみません。どうぞ御教示ください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1です。


VBAは関数ではありません。言って見ればプログラムです。

下記はサンプルです。
実行する場合はテスト環境で行って下さい。

1)集計元ブック(1ブック.xls や 2ブック.xls 等)を適当なフォルダにまとめて置きます。(例 C:\Test)
2)新規ブックを開き、メニューのツール-マクロ-VisualBasicEditorでVBE画面を起動します。
3)VBE画面のメニューで挿入-標準モジュールに下記をコピペします。
4)VBE画面を閉じます。
5)上記と同じフォルダに適当な名前で保存します。
6)メニューのツール-マクロで Test を実行します。

これで集計元ブックのシートBのA5にある値を順次転記していきます。

Sub Test()
Dim MyName As String, wb As Workbook

On Error Resume Next
MyName = Dir(ThisWorkbook.Path & "\*.xls", vbNormal)
Do While MyName <> ""
  If UCase(MyName) <> UCase(ThisWorkbook.Name) Then
   Application.ScreenUpdating = False
   Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & MyName)
   ThisWorkbook.Worksheets("Sheet1").Range("A65536").End(xlUp) _
     .Offset(1, 0).Value = wb.Worksheets("b").Range("A5").Value
   wb.Close
  End If
  MyName = Dir
Loop
Application.ScreenUpdating = True

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
御礼が大変遅くなり,申し訳ありません。
「マクロ」なんですね。
まだ,よく理解できていませんが,今回の案件意外にも幅広く活かせそうです。修得に励みます。
今後も,よろしくお願いします。

お礼日時:2006/11/26 22:31

同一ブック内のシート集計なら =SUM(Sheet1:Sheet4!A1) のように最初と最後を出来ますが、他ブック間はわかりません。



それより50ブックもリンクして不安定になりませんか?
私ならリンクでなくVBAで集計するかな。

この回答への補足

ありがとうございます。そうなんです。同一ブック内での方法は知っていたのですが,<例題>のような場合の簡単な集計方法が分かりません。
50ブックのリンクですが,今のところ大丈夫です。というのも,<例題>でいうと,各ブックのbのA5を,別の集計用一覧表にひとつずつ呼び出して,それを集計するという方法で答えを求めています。(別のブックの集計用シートのA1セルに「=[1ブック.xls]b!$A$5」,A2セルに「=[2ブック.xls]b!$A$5」,A3セルに「=3ブック.xls]b!$A$5」,A4セルに=「4ブック.xls]b!&A&5」,……と入力(「=」の後に対象セルをそれぞれクリックするだけ)し,あとはA1~A*をオートサムで求めています。
これって,すごく面倒で…
「VBA」ってどのような関数ですか?

補足日時:2006/11/12 23:53
    • good
    • 2

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelの複数ファイルの内容を一つのファイルに集計する方法について教

Excelの複数ファイルの内容を一つのファイルに集計する方法について教えてください。
各支店からの報告を集計したいのですが、同一フォームのファイル(約100ファイル)で報告されるデータを一つのファイルに集計したいと思っています。
A支店ファイルのsheet1、B支店ファイルのsheet1、・・・・を、合計ファイルのsheet1に集約したいのです。(フォームは同じで、内容は数値のみです。)
いい方法がある方、お教えください。

Aベストアンサー

フォルダー内の全エクセルファイルのデータを1シートにまとめるVBAのコードはWeb検索すれば、種々みつかります。下記はコードの若干の解説もあって良いと思います。
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=39812&no=0&P=R&KLOG=266
問題は、「同一フォーム」の内容ですね。
データ中に各支店名が含まれていなければ、抽出時に付与しないと訳が分からなくなるし、
変に凝った様式だと単純にコピーするだけではうまくいかないし。

Q複数の同じフォーマットのファイルを新しいブックで一つのシートにまとめる方法

仕事で、各部署から送られてきた、同じフォーマットのファイル(シート1にのみデータ有)が50個近くあります。
それを新しいブックで一つのシートにまとめなくてはいけません。
地道にコピペするのは時間がかかるのでマクロで処理を行いたいと思います。
マクロでの処理方法ご存知の方、処理方法の載っているサイトをご存知の方、もしくはマクロより簡単な方法がありましたら教えてください。

あと、逆に一つのシートをいくつかのファイルに振り分けていく方法もご存知でしたら教えて下さい。
よろしくお願いします。

Aベストアンサー

すみません。質問を勘違いしていました。
>新しいブックで一つのシートにまとめなくてはいけません
でしたね。
Sub Sample1()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Sheets("Sheet1").Range("A1:J1000").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCopyMode = False
Workbooks(buf).Close SaveChanges:=False
buf = Dir()
Loop
End Sub
で試してみてください。使い方などは
http://oshiete1.goo.ne.jp/qa4225063.html
を参照してみてください。同じ質問があったので気がつきました。

すみません。質問を勘違いしていました。
>新しいブックで一つのシートにまとめなくてはいけません
でしたね。
Sub Sample1()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Sheets("Sheet1").Range("A1:J1000").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCop...続きを読む

Q複数のエクセルファイルからデータ抽出とまとめる方法について。

500のエクセルファイルがあり、それぞれのエクセルデータのA2からF2までのデータのをまとめた一覧表(1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、という感じでです)のを、新しいエクセルファイルもしくはテキストなどにでも手早く作れる方法をご存知の方、ご教授ください。コピペでやっていますが嫌になってしまいました。。マクロも触っては見たのですが、2枚目のエクセルファイルを2行目に、3枚目のエクセルファイルを3行目になどの方法の解決は思いつかず、挫折しました。よろしくお願いいたします

Aベストアンサー

対象のフォルダをcドライブの「sample」とした場合で回答します。
新規エクセルブックのシート名タブを右クリックし「コードの表示」
右側のエディタエリアに下記コードを貼り付け、実行して下さい。
G列にファイル名が入るようになっています。不要であれば
Cells(rIdx, 7).Value = fName
を削除して下さい。


Sub getA_F()
Const myPath As String = "c:\sample\"
Dim rIdx As Long
Dim fName As String
fName = Dir(myPath & "*.xls")
Do Until fName = ""
Workbooks.Open Filename:=myPath & fName
rIdx = rIdx + 1
Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value
Cells(rIdx, 7).Value = fName
Windows(fName).Close
fName = Dir
Loop
End Sub

対象のフォルダをcドライブの「sample」とした場合で回答します。
新規エクセルブックのシート名タブを右クリックし「コードの表示」
右側のエディタエリアに下記コードを貼り付け、実行して下さい。
G列にファイル名が入るようになっています。不要であれば
Cells(rIdx, 7).Value = fName
を削除して下さい。


Sub getA_F()
Const myPath As String = "c:\sample\"
Dim rIdx As Long
Dim fName As String
fName = Dir(myPath & "*.xls")
Do Until fName = ""
Workbooks.Open ...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセルで別ブックのセルを参照する式の内部

エクセルで別ブックのセルを参照する式の内部


別ブックのセルを参照する時は

='パス名[ブック名]シート名'!セル名

という式みたいなので、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
という式を作りました(パスは適当です)。

それで、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_02.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_03.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_04.xls]在庫シート'!B5

と日付を連番で複数のセルに入れていきたいので、
日付の 2010_06_01 の部分を他セルから持ってきたいのですが、
この式の中に 文字列参照のMID() とかで挿入できるでしょうか?
日付の入っているセルがちょうど横の方に連番で存在しています。

分かる方いましたら教えてください。
よろしくお願いします。

エクセルで別ブックのセルを参照する式の内部


別ブックのセルを参照する時は

='パス名[ブック名]シート名'!セル名

という式みたいなので、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
という式を作りました(パスは適当です)。

それで、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_02.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_03.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_04.xls]在庫シート'!B5

と日付を連番で複数のセルに入れていきたい...続きを読む

Aベストアンサー

=INDIRECT("''item\zaiko\[zaiko_"&A1&".xls]在庫シート'!B5")
とすれば出来ることはできますが、参照先のブックは開いている必要があります。

単に、沢山の数式を入力するのが面倒だというだけであれば、A1のセル以降に日付部分が入力してある場合、
="='item\zaiko\[zaiko_"&A1&".xls]在庫シート'!B5"
のように入力し、下へ数式をオートフィル等でコピーし、
入力した数式範囲を範囲選択→コピー→形式を選択して貼り付け→値でOKし、
範囲選択したまま、編集→置換で検索する文字列「=」、置換後の文字列「=」で置換します。

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

QExcelでファイルを越えて連携できるのでしょうか

Excel2010なのですが、同じファイルであればシートをまたいであるセルを参照出来ますが、
別ファイルの、あるシートのあるセルを参照するというような事は出来ないのでしょうか?
ほんの初歩的なマクロは学んだのですが、そういうファイルをまたいでの設定は無かったように思いますが、マクロとか使えば出来るのでしょうか?
例えばプログラミングなどであるinclude()などあればファイルを参照出来るのでしょうが。

Aベストアンサー

エクセルの数式では,
='c\test\[book1.xls]Sheet1'!A1
といった数式で多ブックの値を参照し計算に利用できます

参照元ブックを開いておいて
=[book1.xls]sheet1!A1
のように数式を作成し,参照元ブックを保存して閉じると,自動で閉じたブックを参照する式に書き換わります。エクセルの操作になれていないときは,こちらの手順を行った方が間違いがありません。




マクロでは別のブックを「開いて参照する」のが原則です。
sub macro1()
 dim w as workbook
 set w = workbooks.open("c:\test\book1.xls")
 msgbox w.worksheets("シート名").range("セル番地")
 w.close false
end sub


開きたくないご相談はしばしば見かけますが,労多くして功少ないの典型と言えます。

方法1:開いているところを見せない
sub macro2()
 dim w as workbook
 dim x
 application.screenupdating = false
 application.calculation = xlcalculationmanual
 set w = workbooks.open("c:\test\book1.xls")
 x = w.worksheets("Sheet1").range("A1")
 w.close false
 application.calculation = xlcalculationautomatic
 application.screenupdating = true
 msgbox x
end sub

方法2:エクセルに閉じたブックの値を取ってこさせる
sub macro3()
 dim x
 range("A1").formula = "='C\test\[book1.xls]Sheet1'!A1"
 x = range("A1").value
 range("A1").clearcontents
 msgbox x
end sub

方法3:4.0マクロ関数を使う
色々制約があるのでお薦めしませんが,下記など参考に。
http://www.moug.net/tech/exvba/0060037.html

エクセルの数式では,
='c\test\[book1.xls]Sheet1'!A1
といった数式で多ブックの値を参照し計算に利用できます

参照元ブックを開いておいて
=[book1.xls]sheet1!A1
のように数式を作成し,参照元ブックを保存して閉じると,自動で閉じたブックを参照する式に書き換わります。エクセルの操作になれていないときは,こちらの手順を行った方が間違いがありません。




マクロでは別のブックを「開いて参照する」のが原則です。
sub macro1()
 dim w as workbook
 set w = workbooks.open("c:\test\book1.xls")
...続きを読む

Qエクセルで多数のシートをまとめる方法

エクセルで10以上あるシートを一発でひとつにまとめる方法はあるでしょうか?

コピー&ペーストを繰り返すしかないのでしょうか…

仕事で明日やらなければならないので、
お分かりになる方、是非教えてください!

Aベストアンサー

まぁ既出回答にもあるように,10数回程度コピー貼り付けすることで,どうという作業ではないとは思います。

さておき。
ご利用のエクセルのバージョンが不明ですが,ご利用のOfficeのバージョンによっては

1.ワードを起動する
2.挿入のファイルからエクセルブックを指定する
3.添付図のようなダイアログが表示されたらラッキー成功です,ブック全体を指定して挿入する
4.Ctrl+Aで全体を選び,コピーして,エクセルの新しいシートに貼り付ける

と一発でできます。
添付図のようにならなかったときは,出来ません。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QEXCEL BOOK間の計算方法

各BOOKの数値を集計したいのですが、方法が分かりません。教えてください。
例 BOOK1のsheet1A1とBOOK2のsheet1A1 をBOOK3のsheet1の
A1に集計したい場合です。出来ればマクロ以外の方法でおねがいします。

Aベストアンサー

あーーーっと書き漏らしあり。失礼しました。

2)と3)の間で、+を入力してください。
あとBOOK1~3とも、Sheet1のセルA1です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング