[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『INDIRECTとoffset?』(minoru)
お世話になります。
同じブック内に、データの入力されたシート名 北海道、秋田、青森、・・・沖縄の40シートあります。
各シートは同じ書式とレイアウトです。
A列は項目 B列C列D列・・・は年月別にデータが入力されています。
B1、C1、D1のセルには年月が入力されています。
まとめシートのA列に項目、B1セルに「北海道」C1セルに「秋田」D1セルに「青森」・・・以下シート名が入力されています。
まとめシートのA1セルに年月を入力すると、各データシートの該当する年月のデータをB2以下のセルに抽出する関数をご教示願います。
シート名「北海道」
[A] [B] [C] [D] [E] [F] [1] 2014/4 2014/5 2014/6 2014/7 2014/8 [2] 収入 100 200 300 300 200 [3] 支出 50 60 60 100 60 [4] 利益 50 140 240 200 140
シート名「秋田」
[A] [B] [C] [D] [E] [F] [1] 2014/4 2014/5 2014/6 2014/7 2014/8 [2] 収入 200 400 350 500 150 [3] 支出 70 80 70 100 50 [4] 利益 130 320 280 400 100
シート名「まとめ」
[A] [B] [C] [D] [E] [F] [1] 2014/5 北海道 秋田 青森 [2] 収入 200 400 [3] 支出 60 80 [4] 利益 140 320
まとめシートのA1セルに年月入力で各データシートの年月別データを抽出する。
関数でもマクロでも結構ですのでよろしくお願します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
マクロの方がよさそうですが、そちらは上級者にまかせて・・・ まとめシートのB2セル =IFERROR(HLOOKUP($A$1,INDIRECT(B$1&"!1:4"),MATCH($A2,INDIRECT(B$1&"!A2:A4"),0)+1),"") 右と下にフィルコピー (se_9) 2015/03/24(火) 07:46
B2 =OFFSET(INDIRECT(B$1&"!A1"),ROW(A1),MATCH($A$1,北海道!$B$1:$F$1)) B2 =SUMIF(INDIRECT(B$1&"!A:A"),$A2,INDIRECT(B$1&"!C"&MATCH($A$1,北海道!$1:$1),0))
??? (GobGob) 2015/03/24(火) 07:59
ああ、GobGobさんの回答を見て気付いたけど1行目はどのシートも共通しているから・・・ =IFERROR(INDEX(INDIRECT(B$1&"!B2:F4"),ROW(A1),MATCH($A$1,北海道!$B$1:$F$1,0)),"") (se_9) 2015/03/24(火) 08:05
「まとめ」シート上でマクロを行ってください。
まとめシートには、A列の項目名は入っているものとします。
作用上シート名をA列の10行目から貼り付けています。
Sub まとめ()
Dim Sh As Object
Dim rx As Integer
Dim lx As Integer
Dim y As Integer
Dim z As Integer
Dim w As Integer
Dim wknm As String
Application.ScreenUpdating = False
Range("A10", "A" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents
lx = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 2), Cells(4, lx)).ClearContents
x = 0
y = 10
For Each Sh In ActiveWorkbook.Sheets
x = x + 1 Cells(y, 1).Value = Sh.Name y = y + 1 Next Sh
rx = Cells(Rows.Count, 1).End(xlUp).Row
lx = Sheets("北海道").Cells(1, Columns.Count).End(xlToLeft).Column
For y = 2 To lx
If Cells(1, 1) = Sheets("北海道").Cells(1, y) Then w = y Exit For End If Next y
z = 2
For y = 10 To rx
If Cells(y, 1) <> "まとめ" Then wknm = Cells(y, 1) Sheets(wknm).Select Range(Cells(2, w), Cells(4, w)).Select Selection.Copy Sheets("まとめ").Select Cells(2, z).Select ActiveSheet.Paste Cells(1, z) = wknm z = z + 1 End If Next y
Application.ScreenUpdating = True
MsgBox "終了"
End Sub
(コヨーテひな) 2015/03/24(火) 11:33
Sub aaa()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 1
b = 2
c = 2
Do Until c = 4
If Worksheets("まとめ").Cells(1, 1).Value = Worksheets("北海道").Cells(1, c).Value Then
Exit Do
End If
c = c + 1
Loop
Do Until b = 4
Do Until a = 4 If Sheets(a).Name = Worksheets("まとめ").Cells(1, b).Value Then Worksheets("まとめ").Cells(2, b).Value = Sheets(a).Cells(2, c).Value Worksheets("まとめ").Cells(3, b).Value = Sheets(a).Cells(3, c).Value Worksheets("まとめ").Cells(4, b).Value = Sheets(a).Cells(4, c).Value End If a = a + 1 Loop a = 1 b = b + 1 Loop End Sub これは青森まで行う時のマクロです。あとはお好みに合わせて変更してください。 (スズメ) 2015/03/24(火) 12:22
早朝よりの回答ありがとうございます。
OFFSETの中でINDIRECTの使い方がよく判らなかったのですが思うように抽出できました。
sumif関数使用にはビックリしました。
コヨーテひな 様
スズメ 様
コードのご教示ありがとうございます。
自宅のため手元に試行するファイルがありませんので、明日会社で試してみます。
(minoru) 2015/03/24(火) 21:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.