• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 最上行にMaxの値、それ以下の行には0表示)

VBAで特定の条件に基づいて列の値を操作する方法

このQ&Aのポイント
  • VBAを使って、特定の条件に基づいて列の値を操作する方法について学んでいます。
  • 質問者はVBAの初心者であり、Excel関数では難しいと感じていますが、VBAを使って解決できる方法を知りたいと考えています。
  • 具体的な操作方法として、特定の文字列が含まれる列の上の行にはMAXの値を表示し、それ以下の行にはすべて0と表示する方法を知りたいとしています。

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

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

こんにちは! 一例です。 >F列が例えば、あ、か、さ、た、な、は、ま、や、ら、わ、の時・・・ とありますので、Sheet2のA列に条件データ(あ・か・さ・・・)を入力しておきます。 元データはSheet1の2行目以降にあるとして、 Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, 6).End(xlUp).Row If WorksheetFunction.CountIf(ws.Columns(1), Cells(i, 6)) Then If WorksheetFunction.SumIf(Columns(6), Cells(i, 6), Columns(8)) > 0 And _ WorksheetFunction.CountIf(Range(Cells(2, 6), Cells(i, 6)), Cells(i, 6)) = 1 Then Cells(i, 8) = 1 Else Cells(i, 8) = 0 End If End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 一旦マクロを実行すると元に戻せませんので、別Sheetでマクロを試してみてください。 こんなんで参考になりますかね?m(_ _)m

trchan
質問者

お礼

ありがとうございます!! 簡単に出来ました。 これならもしデータの量が今後増えても問題ないですね。 条件が変わったらsheet2のデータを変えるだけでいいので、今後も助かりそうです。 内容の一部、実はぼんやりとしか理解出来ていないのですが(参考書が手元にないので) ひとつ一つ自分で理解し、今後に生かしたいと思います!! ありがとうございました。

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

その他の回答 (4)

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

回答No4です。 J2セルへの入力の式は次のように訂正してください。 =IF(F2="","",IF(AND(CODE(F2)<9250,CODE(F2)>9327),H2,IF(COUNTIF(F$2:F2,F2)=1,MAX(INDEX(H$2:H$10000,ROW(A1)):INDEX(H$2:H$10000,ROW(A1)+COUNTIF(F$2:F$10000,F2)-1)),0)))

trchan
質問者

お礼

ありがとうございます。 まず、すみません。あかさたなの条件は例なのでcodeがつかえません。。 or関数に変えて条件を入力すればつかえそうな感じですね。 今回色々な式の勉強になりました。ありがとうございました。

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

データがF,G,H列の2行目から下方に入力されているとします。 例えばJ列を作業列としてJ2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(F2="","",IF(AND(CODE(F2)>=9250,CODE(F2)<=9327,COUNTIF(F$2:F2,F2)=1),MAX(INDEX(H$2:H$10000,ROW(A1)):INDEX(H$2:H$10000,ROW(A1)+COUNTIF(F$2:F$10000,F2)-1)),0)) J列を選択して右クリックして「コピー」、その後にH1セルをアクティブセルにしてから右クリックして「形式を選択して貼り付け」から「値」にチェックをして貼り付けます。 その後にJ列を削除します。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

○あ,か,さ,た,な…の時に発動すること,それ以外はH列の値のまま ○同じ文字の2番目以降は必ずゼロになること ○同じ文字の先頭1つは,同じ文字のグループに1が1つ以上あれば1に,無ければゼロに I1に =IF(OR(F1={"あ","か","さ","た","な"}),IF(AND(SUMIF(F:F,F1,H:H)>0,MATCH(F1,F:F,0)=ROW(F1)),1,0),H1) と記入して下端までコピー,コピーして型式を選んで値のみ貼り付けて値化します。 数式作成時に誤記しないようによく注意して作成してください。 マクロで行いたいなら,数式の計算ロジックをそのままマクロに応用してください。 F列が必ず並べ替えてあればもうちょっと高速になります マクロを使い, 1.現在の姿に通し番号を振ってから 2.F列で並べ替え 3.各対象先頭行および続きの行についてそれぞれ上述の計算を行い 4.通し番号で並べ戻す といった手口も研究してみては如何でしょう。

trchan
質問者

お礼

ありがとうございます!! 関数でも出来るんですね。 条件が実は40項目くらい(文字数も5~8文字程度)あるので、ものすごく長い式になってしまいましたが…。 関数の組み合わせが思いつかず行き詰っていましたが大変勉強になりました。 ありがとうございました。

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

「さ」は1つだけ1になっていますが、これおかしくないですか? 全部、書き換えてしまっていいのですか? 入力した値と変換値が参照できるようにJ、Lに表示させたほうがいいのではないですか? または、別のシートに表示させたほうがいいのではないですか?

trchan
質問者

補足

LHS07さん、ありがとうございます。 全部書き換えたいのです。現在、目視で判断して手入力で書き換えています。 ほかの列に表示でも大丈夫です。(後でH列を削除すればいいだけですので) 「さ」のH列に1が1つ入っていようと、100入っていようと、「さ」の最上行には1で、それ以下の行は0にしたいのです。 例が分かりにくくてすみません。。 よろしくお願いします。

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

関連するQ&A

  • 以下の内容でk行目の内容だけ表示させる方法

    以下の内容でk行目の内容だけ表示させる方法 ・k行1列目の値とm行1列目は必ず一緒になりますがS1111とは限りません、そして行としてはランダムに配置される可能性があります ・k行2列目の値とn行2列目は必ず一緒になります、これは必ずH11-Yという名称です、そして行としてはランダムに配置される可能性があります 実際はこの内容がシート1に貼られており、このシート1上でk行目だけ表示させる内容を知りたいです、VBA初心者のため分かりやすく教えていただけるとありがたいです   1列  2列  ~ k行 S1111  H11-Y   ~ m行 S1111 H22-R ~ n行 S2222 H11-Y

  • Excel2003VBA 行の非表示

    お世話になります。 掲題の件で ご相談が御座います。 ある特定の列(連続した4列F、G、H、Iです)が全部「0」だった場合 その行 全体を非表示にするというマクロを組みたいのですが 未熟者の為 どのようなコードを記述したら良いのか分からず困っております。 どなたかご教示いただけませんでしょうか。 F、I列は数式により「0」と表示されています。 G、H列は値で「0」になっております。 表全体は600行ぐらいまでですが、今後増える可能性があります。 (増えても800行までは行かないと思います) 説明不足等が御座いましたら ご指摘ください。 宜しくお願い致します。

  • 以下の内容でA行目の内容だけ表示させる方法

    ・A行A列目の値とB行A列目は必ず一緒になりますがS1111とは限りません、そしてA行目からZ行目にランダムに配置される可能性があります ・A行B列目の値とC行B列目は必ず一緒になります、これは必ずH11-Yという名称です、そしてA行目からZ行目にランダムに配置される可能性があります 実際はこの内容をVBAに取り込むつもりです、VBA初心者のため分かりやすく教えていただけるとありがたいです   A列  B列  A行 S1111  H11-Y   B行 S1111 H22-R C行 S2222 H11-Y

  • 選択した行の値だけを合計

    選択した行の値だけを、その行のどのセルをダブルクリックしても合計する方法を教えてください。 A列は、ID,B・C列は値があらかじめ入力されています。 D列に、合計を表示させたいです。 関数・VBAでは、一括して合計はでましたが、VBAで必要な行だけの合計の出し方がわかりません。 VBAの勉強のために活かしたいく、よろしくお願いします。

  • VBAにて複数文の値を入力しループするには

    VBAにて、 4行目から行毎 B列~H列に入力した文字列を組み合わせて並べ替えた物を その行のG列4行目に値を入力する 入力したら 5行目にうつり その値をG列5行目に入力する  という物を 50行目までループするマクロを組みたいのですが、 まず 4行目から行毎に入力した文字列を組み合わせて並べ替えた物を作成するところまではいったのですが 複数文からなる物をループする所で躓いております。。 具体的にはB列~H列には それぞれ異なる文字列 それをtagにて <tr>や<br>等HTMLタグを組み合わせ クリップボードに貼り付ける 所までは完成しております。 4行目から始まり 始まった列のG列にタグを貼り付け 5行目にうつり、 それを50行目まで、とするにはどうしたらよいのでしょうか? よろしければ簡単な事例を記載頂けますと幸いです。 かなり困っております。。 よろしくお願いいたします。

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

  • 2列共に値が一致したら、別シートのその行の列の値

    シート1の$G列の値と"all"シートの$I列の値が同じであり、かつシート1の$H列の値と"all"シートの$J列の値も同じである場合、 対応する行の"all"シートの$G列の値をシート1のセルに代入する為、 下記の関数式を使ってみたのですが、全ての行で『#VALUE』のエラーが出ました。 =INDEX(all!$G:$G, MATCH($G2&$H2, all!$I$2:$I$540&all!$J$2:$J$540, 0)) シート1は2行以降に値が入っています。allのシートの最終行は540行です。行は今後増える可能性があります。 allシートの$I列と$J列の値は同じ値が入っている行がありますが、最初にヒットした行のall"シートの$G列の値をシート1のセルに代入したいです。 こんな条件でも関数式で抽出は可能でしょうか? お分かりの方がいらっしゃいましたら、ご教示頂けましたら大変助かります。

  • Excel(2000)で行毎にセルをみて、値を返す

    例えば、以下のようなデータがあったとして、各行毎に左から見た結果、最初にデータがあったセルの列の1行のセルの値を各行のG列に返したい。 ______A__B__C__D__E__F__G__ 1行_ア__イ__ウ__エ__オ__カ____ 2行_1__3__5__2__4__1__ア__ 3行_____2__5__1__5__4__イ__ 4行_____________2__8__2__エ__ 5行_____2______2__1__4__イ__ 6行_________5______2______ウ__ G列に結果。 例えば、G3のセルに何らかの関数を入れて、A3~F3を左から見た結果、B3に2というデータがあるので、その列の1行であるB1の値、イをG3に返すといったないようです。 _ は、スペースをとるためのものです。 実際のデータは500行あり、各行の検索する列数は23列あります。 よろしくお願い致します。

  • 行と列を指示して表中の値を表示する方法を教えて下さい。

    ある行と列を指示して下表の様な値を表示する方法を教えて下さい。 例)A1セルに2行と入力、A2セルに4列と入力をしたら、A3セルに答えの"8"が出るようにしたい。 1列 2列 3列 4列 5列 1行 A B C D E 2行 1 5 6 8 9 3行 F G H J K 4行 3 4 1 5 8 5行 T R W A S

  • エクセルで値をクリア後に次の行から計算

    マクロを使わずに図のような計算式が作れないでしょうか。 IF関数やサブトータル関数など色々しましたが行き詰まってます。 列に「G]の文字が入力されれば(列は別にかえても可)それまでの合計がクリアされ その下の行の数値から又計算して合計欄に値が表示されるという 計算表を作りたいのです。 あまり関数は得意でないのでよろしくおねがいします。

このQ&Aのポイント
  • キャンバスワークスペースのアプリをPCにインストールし、会員登録の最後のメールが受信されない問題について相談です。アドレスに間違いはないので、どうすればよいのでしょうか?
  • 最後のメールが受信されないため、キャンバスワークスペースの会員登録が完了できません。アプリはPCにインストール済みで、アドレスも正しいです。解決策を教えてください。
  • 会員登録の最後のメールが受信されず、キャンバスワークスペースにアクセスできません。PCにアプリをインストールし、正しいアドレスを入力しているのに問題が発生しています。対処法を教えてください。
回答を見る

専門家に質問してみよう