• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2010 複数の表から対応するセルの最大値)

エクセル2010で複数の表から対応するセルの最大値を求める方法

このQ&Aのポイント
  • エクセル2010を使って複数の表のセルの最大値を求める方法について解説します。
  • 添付した図をもとに、同じ行列に相当するセルの最大値を一つの表にまとめる方法を詳しく説明します。
  • 実際の表は37行45列で200個ありますが、本記事では3つの表を例に説明します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>実際の表は37行45列で、表の数が200あります というお話なので、一つ一つの表からセルを拾って数式を書くとか、あるいは配列数式などで無理矢理一発で計算しようとするのは全く適切な方法ではありません。 比較的簡単に答えを導く方法の一つとしては、 G3セルに =MAX(B3,G10) と記入、I7までコピー貼り付け G3:I8をまとめて下向けに表の羅列の下端まで(ご質問のサンプルなら22行まで)コピー貼り付け 以上で全く負荷もかからずにG3:I7に欲しい結果が並びます。

goseinaito
質問者

お礼

すごいアイデアです! 全く気がつきませんでした。 ありがとうございました。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! VBAでの一例です。 >(実際の表は37行45列で、表の数が200あります。) とありますので、↓の画像の左側がSheet1で 画像のような配置で規則だたしく「frame」があるとします。 Sheet2のB1セルから列方向AT1セルまで 1~45の番号が入っている Sheet2のA2セルから行方向A38セルまで1~37の番号がすでに入力済み だとしての一例です。 Sheet3を作業用のSheetとして使用しています。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, endRow As Long, wS1 As Worksheet, wS2 As Worksheet, wS3 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Set wS3 = Worksheets("Sheet3") Application.ScreenUpdating = False Range(wS2.Cells(2, 2), wS2.Cells(38, "AT")).ClearContents For i = 1 To 37 wS1.Range("B2").AutoFilter Field:=2, Criteria1:=i endRow = wS1.Cells(Rows.Count, 2).End(xlUp).Row If endRow > 2 Then Range(wS1.Cells(3, 3), wS1.Cells(endRow, "AU")).Copy wS3.Cells(1, 1) End If For j = 1 To 45 wS2.Cells(i + 1, j + 1) = WorksheetFunction.Max(wS3.Columns(j)) Next j Next i wS1.AutoFilterMode = False wS3.Cells.Clear Application.ScreenUpdating = True MsgBox "処理完了" End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。m(_ _)m

goseinaito
質問者

お礼

ありがとうございました。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

> (実際の表は37行45列で、表の数が200あります。) 面倒な手段を使うなら、 flameごとにシートを用意(200シート)用意し、 集計のシートを別に作り、集計シートに最大値を表示する。 合計201シート使う方法です。 全てのシートは同じフォーマット(セル位置)にしておく必要があります。 例えば、シート名が「flame1」「flame2」・・・「flame200」とした場合、 集計シートの「1-1」のセル(添付図を拝借して、flame1の1-1のセル(B3))に     =MAX(flame1:flame200!B3) としてやると、全対象シートのB3のうちから最大値を返します。 あとはこれを > 実際の表は37行45列 に必要な分、コピー(フィル)してやればOKです。 この手法を「串刺し計算」と呼ぶようです。

goseinaito
質問者

お礼

ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No1です。 実際の表について求めるとなると先に紹介したような簡単な式では対応が難しいですね。作業列を作って対応するのがようでしょう。 frame1について37行45列でしたら縦の数値は1から35で横の数値は1から44までになっているとしますと次のようにしてはどうでしょう。 AU3セルには次の式を入力してCL3セルまでドラッグコピーしたのちに下方にも℃ラグコピーします。 =IF($A3="","",IF(ROW()<=37,B3,MAX(B3,OFFSET(B3,-37,0)))) 最後のframeの作業列に表示されているデータがお求めの表ということになります。最大値が表示されています。 その部分をコピーしてから例えばシート2に「形式を選択して貼り付け」で「値」にチェックをして貼り付けてもよいでしょう。

goseinaito
質問者

お礼

ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

お示しの表の場合でしたらG3セルに次の式を入力してI3セルまで横にドラッグコピーしたのちに5行下方まで下にもドラッグコピーします。 =MAX(B3,B10,B17)

goseinaito
質問者

お礼

ありがとうございました。