• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルを用いた計算についてです)

エクセルを使った計算方法と効率化

このQ&Aのポイント
  • エクセルを使った計算方法についてご質問です。B2の値をG2に代入し、B2から9行目にあたるE11の値をJ2に代入する方法、C2からC11の範囲内の最大値をH2に、D2からD11の範囲内の最小値をI2に代入する方法を教えてください。手計算では処理が遅く、10,000行以上あるため不可能です。
  • エクセルを用いた計算方法についてのご質問です。具体的には、B2の値をG2に代入する方法、B2から9行目にあたるE11の値をJ2に代入する方法、C2からC11の範囲内の最大値をH2に、D2からD11の範囲内の最小値をI2に代入する方法を教えてください。手計算では時間がかかるため、効率的な方法を知りたいです。
  • エクセルの計算方法に関する質問です。B2の値をG2に代入する方法と、B2から9行目にあたるE11の値をJ2に代入する方法、C2からC11の範囲内の最大値をH2に、D2からD11の範囲内の最小値をI2に代入する方法を教えてください。処理速度を考慮しているため、手計算ではなく効率的な方法を知りたいです。

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

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

こんにちは! 関数での方法はすでに出ていますので、 VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample() 'この行から Dim i As Long, cnt As Long, myArea As Range Application.ScreenUpdating = False i = Cells(Rows.Count, "G").End(xlUp).Row If i > 2 Then Range(Cells(2, "G"), Cells(i, "J")).ClearContents End If cnt = 1 For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row Step 10 cnt = cnt + 1 With Cells(cnt, "G") .Value = Cells(i, "B") .Offset(, 3) = Cells(i + 9, "E") End With Set myArea = Range(Cells(i, "C"), Cells(i + 9, "C")) With Cells(cnt, "H") .Value = WorksheetFunction.Max(myArea) .Offset(, 1) = WorksheetFunction.Min(myArea.Offset(, 1)) End With Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないので、データ変更があってもすぐに反映されません。 その都度マクロを実行してみてください。m(_ _)m

nyan_nyanko
質問者

お礼

 ご回答いただきまして、どうもありがとうございました。  マクロでの記載方法はとても参考になりました。  また、他の時間足にも容易に応用可能なことも、非常に助かりました。  この場をお借りし、厚くお礼申し上げます。

nyan_nyanko
質問者

補足

 誠に申し訳ございません。勝手ながらこの欄をお借りする非礼をお許しください。  皆様のご回答、とても勉強になりました。  全員にベストアンサーと致したく、そう思っている次第でございます。ただ、規約で1名のみということで、非常に悩みました。  ただ、他の時間足にも容易に応用が可能という点におきまして、tom04様にベストアンサーと致しました。  皆様、本当に、ありがとうございました。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

[No.4]の一部訂正、 J2 の式を次のように訂正します。 誤 =OFFSET(E$2,10+(ROW(A1)-1)*10,0)         ↓ 正 =OFFSET(E$2,9+(ROW(A1)-1)*10,0)          または   =OFFSET(E$2,9+(ROW(A1)-1)*10,)

nyan_nyanko
質問者

お礼

 ご丁寧な回答をお寄せいただきましたこと、厚くお礼申し上げます。  どうもありがとうございました。

noname#204879
noname#204879
回答No.4

G2: =OFFSET(B$2,(ROW(A1)-1)*10,) H2: =MAX(OFFSET(C$2,(ROW(A1)-1)*10,,10)) I2: =MIN(OFFSET(D$2,(ROW(A1)-1)*10,,10)) J2: =OFFSET(E$2,10+(ROW(A1)-1)*10,0)

nyan_nyanko
質問者

お礼

 ご回答いただきまして、どうもありがとうございました。  計算式の勉強に、とても役立つことができました。  この場をお借りし、厚くお礼申し上げます。

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

G2セルには次の式を入力します。 =IF(INDEX(B:B,ROW(A1)*10-8)=0,"",INDEX(B:B,ROW(A1)*10-8)) H2セルには次の式を入力します。 =IF(G2="","",MAX(INDEX(C:C,ROW(A1)*10-8):INDEX(C:C,ROW(A1)*10+1))) I2セルには次の式を入力します。 =IF(G2="","",MIN(INDEX(D:D,ROW(A1)*10-8):INDEX(D:D,ROW(A1)*10+1))) J2セルには次の式を入力します。 =IF(G2="","",INDEX(E:E,ROW(A1)*10+1)) 10000行にも及ぶセルにコピーするためにはG2セルからJ2セルを選択してから右クリックして「コピー」を選択します。その後に数式バーに左側にある名前ボックスはG2が表示されていますがG2:G10000と入力しEnterキーをします。G列が選択状態になりますので右クリックして「貼り付け」を選択します。 最後にEscキーを押して終了です。

nyan_nyanko
質問者

お礼

 ご回答いただきまして、どうもありがとうございました。  特に、コピーの仕方はとてお勉強になりました。  この場をお借りし、厚くお礼申し上げます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 まず、G2セルには次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($B:$B,(ROW()-ROW(G$2))*10+1+ROW($B$1))),INDEX($B:$B,(ROW()-ROW(G$2))*10+1+ROW($B$1)),"")  次に、H2セルには次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($G:$G,ROW())),MIN(INDEX($C:$C,(ROW()-ROW(H$2))*10+1+ROW($C$1)):INDEX($C:$C,ROWS(H$2:H2)*10+ROW($C$1))),"")  次に、I2セルには次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($G:$G,ROW())),MAX(INDEX($D:$D,(ROW()-ROW(I$2))*10+1+ROW($D$1)):INDEX($D:$D,ROWS(I$2:I2)*10+ROW($D$1))),"")  次に、J2セルには次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($G:$G,ROW())),LOOKUP(9E+307,$E$1:INDEX($E:$E,ROWS(J$2:J2)*10+ROW(E$1))),"")  そして、G2~J2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。

nyan_nyanko
質問者

お礼

 ご回答いただきまして、どうもありがとうございました。  また、画像をも載せていただきまして、感謝の極みでございます。  厚くお礼申し上げます。

関連するQ&A