• ベストアンサー

ExcelVBAにて、検索した数値を計算する方法

こんにちは。ExcelVBAを最近はじめたばかりの初心者です。 とある一列にランダムな値の数値が並んでいるとして、その数値列からの最大値(最小値)を検索し、その検索された値を用いて計算を行う、 ということは出来ないのでしょうか?書籍や検索システム等活用しましたが、なかなかこれという例がないのでこちらに質問させていただきました。 例えばこんな表があるとすると  1   2  3 . . A 14 35 25 B 67 46 37 C 32 73 85 . . この表の第1列の最大値を検索     第2列の最大値を検索     第3列の最大値を検索 した後、最大値同士の平均値を計算するというプログラムを作成したいです。 また、同じプログラムの内容を用い、たとえ表の値の並びが違ってる他のExcelデータを用いても、同様に処理できるようにしたいです。 どうかよろしくお願い致します。

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

ほんの一例です。 ・数字が入力されている行の間に空白はない ・数字が入力されている列の間に空白はない 上記2点が問題なければ、列数・行数に関係なく動作します。 算出した平均値は、仮に新しいシートを作成してA1セルに入力するようになっています。 Sub Macro1() i = 1 Do Until Cells(1, i) = "" i = i + 1 Loop ReDim varArray(i) As Integer For clm = 1 To i - 1 varArray(clm) = Cells(1, clm) n = 2 Do Until Cells(n, clm) = "" If Cells(n, clm) > varArray(clm) Then varArray(clm) = Cells(n, clm) End If n = n + 1 Loop Next For clm = 1 To i - 1 a = a + varArray(clm) Next Set NewSheet = Sheets.Add NewSheet.Cells(1, 1).Value = a / (i - 1) End Sub

mechakiyu
質問者

お礼

コードわざわざ作ってくれたのですね。 ありがとうございます。 こちら参考にさせていただきます。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ワークシート関数を使っての例 Sub CalcMaxAverage( rSrc as Range, rDest as Range )   dim rColumn as Range, n as integer, dRes as Double   n = 1   for each rColumn in rSrc.Columns     dRes = WorkSheetFunction.Max( rColumn.value )     rDest.Cells( 1, n ).value = dRes     n = n + 1   next   rDest.Cells(1,n).FormulaR1C1 = "=AVERAGE(rc[-" & n & "]rc[-1])" end Sub 呼び出し側 Sub Macro1()   CalcMaxAverage Range("A1:C20"), Rage("E1") End Sub といった具合です A1:C20に元データがって E1:G1に各列の最大値、H1にE1:G1の平均 といった具合になります

回答No.3

#1です コード例は#2の方が記述されていますので 私はワークシート関数を利用した方法を記します マクロの記録を使って記録しつつどのようなコードになるかを参考にされると良いと思います なお、ワークシート関数を使って処理を行う場合 自作のロジックよりも処理時間が短縮される事が多いです 処理件数が増えれば増えるほどその結果は見違えるほどの差になりますのでご参考に ※仮にこの最大値を表示(仮保存)させる領域を各列1行目とします 1:1行目の行選択をします 2:選択した行を追加します 3:ワークシート関数 =MAX(範囲)を必要な列の1行目に記述します (この時範囲は見出しがあるなら見出しを除いた行から65536行目までとすると行数の変化に対応できます また、A1に記述した関数をそのままB列以降にコピーする事が有効です) 4:出揃った最大値に対して好きなセル位置で関数 =AVERAGE(範囲)で平均を算出します (5:関数や式を入れることによってファイルが大きくなる、重くなるなどのケースを回避するために 全セルを選択>コピー>形式を選択して貼り付け>値にチェック>OK) 以上をマクロで記録して、VBAのソースをご覧になるとよいでしょう 理解が深まったところで変数などを使い、必要に応じてソースの加工をされると良いと思います ※1行目を追加して計算するのはデータがどの行・列数まであるか把握できないため また増減した時に対応するためです

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html
回答No.1

例を探すよりもご自分で模索した方が身に付くと思いますが・・・ まずご質問の要件が完全ではないので具体的な回答は控えますが ・列ごとにデータの行数が異なるか否か ・データの途中に空白があるか否か ・仮保存にセルを使うか変数を使うか ・データ処理にエクセル関数を使うか自分でロジックを作成するか ・VBAと言ってもマクロを記録>保存>実行なのかソースから作成するのか否か などの条件によって回答が異なります ですが、ご自身で書かれた >この表の第1列の最大値を検索     第2列の最大値を検索     第3列の最大値を検索 した後、最大値同士の平均値を計算するというプログラムを作成したいです をそのままプログラムにするだけです 1:第一列の先頭から順に終端まで走査する 2:前回または仮保存したデータより大きな値があればその値に書き換える 3:1・2を行いたい列数分繰り返す 4:揃った仮保存データから平均を計算する これを自作ロジックなりワークシート関数なりで処理していくだけです 頑張ってください

mechakiyu
質問者

お礼

まずはご回答ありがとうございます。 楽な道で実践しようとしているようで恐縮ですが、 急を要する作業なので、模索している時間なく、わかりやすい例だけ求めざるを得なくなっている状況です。 あと、例を複雑にしすぎたことをお詫びいたします(ほぼワンコマンドでできる方法があると思っていました) 私が一番知りたい事は、 ランダムに数値が並んでいる表のある列の中から、最大値(最小値)を検索し、検索された数値のセルを選択している状態にする と言う事です。 今まで調べた分かっている事を述べると、 ・検索を行うといってもCELL関数を用いてのaddressやcontentsなどは任意のセルに検索された値を返してくれるだけで選択してくれない。 ・条件付書式でも、検索したいセルを書式などで目立つようにしてくれるが、その検索したい(し終えた)セルを選択してくれない。 ・Ctrl+Fの検索は検索し終えたセルを選択してくれるが、最大値を探すなどの器用な検索は出来ない。 程度の事ですが、他に何か良い方法があれば知りたいと思っています。 それとも何か難解なプログラミングを必要としてしまうでしょうか。 なにかヒント程度でも教えていただければ幸いです。

関連するQ&A

  • 【MATLAB】配列内の数値のキャンセル方法

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 しかし、中にはマイナスの値や100を超える値も時々入ってしまっています。 できれば0~40の間の値の中で平均値や最大・最小値を算出したいと考えています。 この外れ値を計算せず(もしマイナスや40以上ならその値は無かったことにして)平均値等を出すことは可能でしょうか? if文なども考えたのですが、いまいち書き方が分からず困っています。 どうかご回答よろしくお願いいたします。

  • 列の数値群の数値の抽出方法(VBA)

    エクセルVBAでお願いします。 今、B列にRange(Cells(3,2),Cells(I.2))の範囲にランダムな実数値が 格納されているとします。(Iは変数) この数値群から、正の実数で最小値、または負の実数で最大値を抽出したいのですが、どのようなコードを組めばよいでしょうか。 数値群は大小順ではなくランダムに並んでいるとします。お願いいたします。数値群の数は約20000個あります。

  • 表中から最大値と最小値の見出しを求める方法を教えて

    エクセルで作成した表があります。 表中から行の最大値と最小値の列見出しを求める方法を教えてください。 表は、行に1から1000、列に(1)~(10)とそれぞれ見出しをつけ、表の中には1.000から1.500のランダムな数字があります。 行の番号をB2セルに入れると最大値と最小値の列の見出し{例えば“(5)”というように…)を求めたいのです。行の数字は複数同じ値がある場合もあります。 良い方法がありましたら、教えてください。 よろしくお願いします。

  • Excel_文字を数値に置き換えて計算する方法

    Excel2010使用です。 文字を数値に置き換えて計算したい場合、どのような関数を使えばよいかわからず困っています。 例えば、鈴木=10000、田中=15000、佐藤=30000  ・・・といった具合に数値を設定しておき、 表に人名を入力したら、それを特定の数値に置き換えてひと月分の合計を数値で出したいのです。 人名はB2~B32まで入る予定です。 合計はB33に出したいと思っています。 なるべくこれ以上表や列の挿入はせず、B33のみに計算式を入れて解決できれば理想だと思っております。 説明が下手で申し訳ありませんが、 Excelに詳しい方、お知恵をお貸しいただければと思います<(_ _)>

  • エクセルで行から数値を検索し、検索した数値のある列

    エクセルで行から数値を検索し、検索した数値のある列から左側の全ての合計を求めたいです。   A B C D E F 1  3 4 8 9 11 22 ←数字は隙間なくあるが、値がバラバラ(ただし昇順) 2 3  2~6行には色々な数字がまばらにある 4 5 6 1行目から検索したい数→10(別のセルで数式結果として出た数) ズレてるかもしれませんが・・・ E1セルに書かれている「11」の数字より前のD列、 A~D列の2行目~6行目の合計を各行ごとに別々に出していきたいです、どうしたらいいでしょうか また、表は行も列もデータを追加していく予定です

  • 検索方法教えてください。

    Excel2010使っています。 A列   B列 84149 18500 84149 19700 84150 20500 84151 22900 84151 23400 84151 20500 固有番号(A列)と価格(B列)がずらっと並んでいます。 A列の固有番号は、同じ数字が1個だけだったり5個同じものがあったりとバラバラです。 教えていただきたいのは、A列に固有番号に対応する最小値のB列の数値を検索する方法です。 重複するものがあるので、単純なvlookupとかだとうまくいきません。 初心者なので、なるべく簡単な数式で教えてください。 よろしくお願いいたします。

  • EXCEL―Large関数で取得した数値を%表示へ

    現在次のような式で、 =INDEX(・・・文字列・・・)&":"&LARGE(・・・表中、数値型の%表示・・・) 取得される値は、 "文字列":0.23456 という様になります。表抽の数値は%で表示していますが、取得後は小数点表示に変わってしまします。 これを、 "文字列":23.5% というように、%表記を維持したまま値を返すにはどうしたらよいでしょうか。 表中のランダムな数値を大きい順に並べるため、元の表は数値型を保持する必要があると思ってます。

  • VLOOKUPの表の数値を変更したら使えなくなった

    エクセルで、もともと使えていたVLOOKUPの表の数値を7ケタから4ケタに変更したのですが、 品名がかえされなくなって何も表示されなくなりました。 元表の一列目の表示形式を、文字列にしたり、数値にしてみたりしましたがだめでした。 元表の一列目は品番、二列目は品名です。

  • 入力した数値になるよう組み合わせを計算したい

    A.5~500までの数値を入力 B.1~100までの数値のうち、5つの数値を組み合わせ、Aで入力した値と同様の値となるようにする という計算を行うプログラムを組もうとしているのですが、どういった計算を行えばよいのか分かりません。 ご存知の方いらっしゃいましたらアドバイスお願いします。 ちなみにこれは学校の課題ではありません。個人的な興味です。

  • Excelセル内の条件付最大値抽出方法で困っています

    Excel2003を使用しています。 800件ほどのデータで、縦一列に、カテゴリをあらわす2桁もしくは3桁のアルファベットと数字の組み合わせのデータが入っています。 例) kim2 kim3 kim4 kim343 hon209 hon210 coi4 coi5 sys92 coi9 coi59 ur2004 ur2005 これについて、カテゴリ(kim、honなど)ごとの最大値を求めようと思っています。 カテゴリごとにセルを一列足して、左の文字を抜いた値をセルに入れ、その列ごとの最大値を求めるという方法はわかるのですが、今後カテゴリが増えていくときのために列を増やさなくても計算できる方法を探しています。 表と離れたところに、カテゴリの値を入れたセルを置き、横のセルに最大値が入るイメージで作成しています。 ご教示いただけると助かります。

専門家に質問してみよう