• ベストアンサー

科目によって処理を変えたい

エクセル2003を使っています。 F列に科目名が入っています。 その科目名によってM列の値を見て、N列に返す値が変わってきます。 その処理を2行目から最下行迄、繰り返し処理をしたいと思っています。 例えば、2行目のF列が数学、M列が100と入ってたとします。 数学の場合、M列の値が179以下なら、N列は空白で180以上なら「期限切れ」とN列に表示させたいと思います。 この場合、M列が100なのでN列は空白にしたいと思います。 次に3行目が国語で、M列が377とします。 国語の場合、M列が364以下ならN列は空白で、365以上なら「期限切れ」とN列に表示させたいと思います。 この場合、M列が377なので、N列は期限切れにしたいと思います。 このようなことをVBAでしたいと思います。 どうすれば良いでしょうか? よろしくお願いします。

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

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

こんばんは! 参考になるかどうか分かりませんが・・・ 科目数がいくつあるか分からないので ↓の画像のように表を作ってみました。 (数学と国語だけならIF関数で対応できるとおもいますが・・・) Sheet2のA~C列は空白と期限切れの境界値を入力しておきます。 (実際はC列だけでOKですが、理解しやすいように範囲を表示してみました) 尚、最大値がいくつになるか分からないので、とりあえず1000までのデータとしています。 そして、Sheet1の N2セル =IF(INDEX(Sheet2!$D$2:$G$4,MATCH(M2,Sheet2!$C$2:$C$4,-1),MATCH(F2,Sheet2!$D$1:$G$1,0))=0,"",INDEX(Sheet2!$D$2:$G$4,MATCH(M2,Sheet2!$C$2:$C$4,-1),MATCH(F2,Sheet2!$D$1:$G$1,0))) としてオートフィルで下へコピーします。 これで希望に近い形にならないでしょうか? 以上、お役に立てれば幸いですが、 的外れの回答なら無視してくださいね。m(__)m

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

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

マクロです Sub test() Dim 科目名 As String Dim M列 As Integer Dim N列 As String Dim i As Long For i = 2 To Range("F65536").End(xlUp).Row 科目名 = Cells(i, 6).Value M列 = Cells(i, 13).Value Select Case 科目名 Case "数学" If M列 <= 179 Then N列 = "" Else N列 = "期限切れ" End If Case "国語" If M列 <= 364 Then N列 = "" Else N列 = "期限切れ" End If End Select Cells(i, 14).Value = N列 Next i End Sub 参考程度に

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

VBAにする必要は全くないように思います。 次のようにすることで比較的容易にできますね。 はじめにデータベースとして例えばP2セルに数学と入力し、Q2セルには180と入力します。P3セルには国語と入力し、Q3セルには365と入力します。以下の行についても科目ごとに入力します。 その上でN2セルには次の式を入力し下方にオートフィルドラッグすればよいでしょう。 =IF(M2="","",IF(M2<VLOOKUP(F2,P:Q,2,FALSE),"","期限切れ"))

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

関連するQ&A

  • cygwinでのテキスト処理方法がわかりません。

    CSVファイルで1~3列目に値が入っています。1列目と2列目が同じ行を抜き出し、同じ行の3列目の値を足し合わせる事は簡単にできますでしょうか? たとえば 1 0 10 1 0 20 1 1 5 2 0 5 2 1 10 の構造で、1列目が1で、かつ2列目が0の行について足し合わせた値(この場合;30)をスクリプトで処理したいのですが? どうぞよろしくお願い致します m(..)m

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • 行列の入れ替え

    次の処理を行うプログラムを書きたいのですが教えていただけないでしょうか? (処理) B列のあるセルの値が2000または2001の場合、当該行のc列からn列までのセルをコピーし、11行を挿入し、行列を入れ替えて貼り付ける。 この処理を繰り返したいです。             (処理前) A  B  C  D  E  F  G   H  I  J  L  M  N  O 1 2000  1  2  3  4  5  6  7  8  9  10  11  12 2 3 4 5 6 7 8 9 10 11 (処理後) A  B  C  D  E  F  G  H  I  J  L  M  N  O 1  2000  1 2      2 3      3 4      4 5      5 6      6 7      7 8      8 9      9 10     10 11     11 12     12 13     13 よろしくお願いします。

  • マクロで指定した処理がうまくいかない

    いつもお世話になります。 エクセル2000で、タイトルを除くと、9行目から17行目までの表があり、その表の列Hの値が 0 の時、その行を非表示にするという下記のマクロを作成したのですが、処理がうまくいかないことがあります。 エラー内容は、たまに9行目のHの値が0なのに、行が表示されたままであるということです。 ’全ての行を表示させてから Rows("9:17").EntireRow.Hidden = False ’列Hの値が0の場合、その行を非表示にする Dim n As Integer For n = 17 To 9 Step -1 If Cells(n, 8).Value = 0 Then Rows(n).EntireRow.Hidden = True n = n - 1 End If Next 原因かどうかは分かりませんが、気づいた点は、その時10行目のHの値も0だったことです。 どうぞ宜しくお願い致します。

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • エクセル excel 複数範囲選択マクロ

    a列2行目からa列の値がある最下行 と c列2行目からc列の値がある最下行 という範囲を同時に選択するマクロの構文を教えてください。

  • 【Excel】条件を満たした最下行の値を表示

    こんにちは。 Excel2013を使用しています。 《Sheet1》    A     B     C    ・・・・・・    N 1  1234   ○    01/01          2,000 2  1234   ○    01/30          5,000 3  2345   △    01/05          1,000 4  3456   □    01/20          3,000 5  3456   □    01/25          4,000 6  1234   ○    02/10          6,000 7  3456   □    02/15          5,000 上記のような表がSheet1にある場合、A列が1234(数値)である最下行のN列の値をSheet2のA1セルに表示させたいのですが、関数で可能でしょうか? この場合はSheet2のA1セルに表示される値は6,000、同様にA列が2345(数値)である最下行のN列の値の場合は1,000です。 よろしくお願いします。

  • 2つの待ち行列を処理する順列

    長さm、nの2つの待ち行列A={a1,a2,...,am}とB={b1,b2,...,bn}があるとき、 処理する順番が何通りあるかをm、nで表せないかと悩んでおります。 m=1,n=1とすると、 a1→b1とb1→a1で2通りなので、 f(1,1)=2です。 m=1,n=2とすると、、 a1→b1→b2 と b1→a1→b2 と b1→b2→a1の3通りなので、 f(1,2)=3です。 このようなf(m,n)をmとnの式で表せないでしょうか。 今のところ私がわかっているのは、 f(m,n) = f(m,n-1) + f(m-1,n) f(m,n) = f(n,m) f(m,1) = m + 1 ということです。 私は数学家ではないので、難しいことは分かりませんが、 どうかお力添えのほどお願いいたします。

  • エクセルの表の列の最下行から指定数のデータで

    データが縦方向に入っている表があります。 新しいデータは最下行に追加していきます。 それぞれの列の最下行から1つ上のセルから任意の数で平均や最大、最小値を求めたいのです。 (つまり統計値に最新値を含まない値で最新値を評価したい) 但し、下記の条件が付きます。 1.データは17行目から始まって、それより上の行は列によってデータ数が違っています。 2.出来ればデータ数が指定(例えば30個)に名足りない場合は最新値を含むデータにしたい。 最初はデータ数が少ないのでそれも含めて統計処理したい。 (この条件でハードルが上がるようなら無視でもOK) 3.データ列には空白セルや「ー」が入っている場合が混在しているので扱うのは数値のみ。 昔ここで教えてもらいながら、試行錯誤してかなり長い式を作って使っていたのですが、最新データを含むと非常にまずいケースがあることに気付き、色々試行しているうちに全く混乱してしまったのでHELPしました。

  • 対話型で入力された情報にて処理を行うマクロ

    以下のプロシージャーを多様しています。 記述を見ていただくと分かりますが A列の値をSelect Caseの条件で編集してB列に転記します。 A列にデータがあるまで処理を繰り返します。 ですが基幹システムの吐き出しがメニューの種類によって 必ずA列に対象値があるとは限らず、 また転記したい場所もB列とは限りません。 例えば、 対象値がC列で、転記したい場所はF列とか 対象値がE列で、転記したい場所はG列とH列の間に 列挿入してそこに転記など。 場面によって記述のコメント部分の●部分を書き換えて使用しています。 もしくは吐き出したデータを列単位で下記記述に合うように列移動し マクロ終了後、元の配列に直しています。 メッセージボックスなどを利用して、対話型にして 入力した情報からマクロの記述を書き換えてそのマクロを起動させる事は可能でしょうか? 例えば 1.メッセージBOX   「対象値のある列を入力してください」   入力例:G 2.メッセージボックス   「列挿入しそこに転記しますか?」   YES/NO 選択 3.YESの場合   メッセージBOX   「挿入したい列を入力してください。例:H列とI列の間→H」   入力例:H   NOの場合   メッセージBOX   「転記する列を入力してください」   入力例:J すると以下の記述のコメント部分の●部分が入力内容にそって書き換わる。 よろしくお願いします。  Sub ハイフン挿入()  '対象列をハイフン挿入し指定列に転記   With ActiveSheet   '●空白列を作成。   '("B:B")が挿入した場所。例:DとEの間→("D:D")   '挿入しない場合は以下2行をコメントアウトする   Columns("B:B").Select   Selection.Insert Shift:=xlToRight 行 = 1 Do 'データが無ければ停止させる。その列を指定。 '●(行,1)の1はA列です。例:C列なら3にする。 If Cells(行, 1).Value = "" Then Exit Do '編集対象の値の列を指定 '●(行,1)の1はA列です。例:C列なら3にする。 n = Cells(行, 1) '値が14文字である事? If Len(n) = 14 Then Select Case True '左2字=9X & -が無 Case Left(n, 2) = "9X" And InStr(1, n, "-", 1) = 0 '3-11で編集 myStr = Left(n, 3) & "-" & Mid(n, 4) '9字目が- Case InStr(1, n, "-", 1) = 9 '3-5-5で編集(3文字目と4文字目に-を入れれば3-5-5になる) myStr = Left(n, 3) & "-" & Mid(n, 4, 11) '左1字=9 & -が無 Case Left(n, 1) = "9" And InStr(1, n, "-", 1) = 0 '5-5-2-2で編集 myStr = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) '-が無 Case InStr(1, n, "-", 1) = 0 '3-5-2-2で編集 myStr = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) 'いずれにも属さない14文字 Case Else '編集対象の値を使用する(未編集) myStr = n End Select '編集対象の値が14文字でない Else '編集対象の値を使用する(未編集) myStr = n End If '編集した値を転記する場所を指定 '●(行,2)の2はB列です。例:D列なら4にする。 Cells(行, 2) = myStr '次の行に移動 行 = 行 + 1 Loop End with End Sub

専門家に質問してみよう