VBAで最大値と最大値までのデータ数を教えてください
- VBAを使って、A列の最大値と最大値までのデータ数を求める方法がわかりません。
- A列にはデータが並んでおり、A列の最大値をC列に入力することはできました。
- しかし、最大値がどの行に位置するかを求める方法が分かりません。E列にその行の番号を表示したいです。
- ベストアンサー
VBAにて最大値と最大値までのデータの数を教えて
はじめまして。VBA初心者です。 誰か教えてください。 下記のようにA列にデータが並んでおります。 A列はどこまでデータがあるかは、分かりません。 その中で、 何とか独自でC列の1行目に、A列の最大値を記入する事まではできました。 しかし、A列の最大値が数字が入力されているA列の1行目から何番目にその 最大値がくるのかの計算が分かりません。 E列の1行目にその何番目にくるかをしめしたいのですが、 C列の1行目で示すように最大値の値をA列で何番目になるのかの方法を教えてください。 Rangeを使用して、Range("A1:最大値")を選択して、countするとよいのではと思い、 挑戦していましたが、"最大値"の部分をどのように表記していいかわかりません。 どなかた分かる方がいらっしゃいましたらよろしくお願いします。 A列 B列 C列 D列 E列 1行 3 最大値 10 個数 4 2行 5 3行 7 4行 10 5行 9 6行 2 … … … …
- chi-pan-kun
- お礼率80% (16/20)
- 数学・算数
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
何も難しく考えずに Max関数とMatch関数を使えばいいのでは? Sub aaa() Dim Rng As Range, Wsf As Object Set Wsf = Application.WorksheetFunction Set Rng = Range(Cells(1, 1), Cells(1, 1).End(xlDown)) Cells(1, 3).Value = Wsf.Max(Rng) Cells(1, 5).Value = Wsf.Match(Wsf.Max(Rng), Rng, 0) Set Rng = Nothing Set Wsf = Nothing End Sub
その他の回答 (1)
- soixante
- ベストアンサー率32% (401/1246)
#1です。 オブジェクト型変数を使い終わったら開放しておくのが、メモリ上も効率が良いと 何かの本で習いました。 以下ご参照ください。 http://www.moug.net/tech/exvba/0150027.html
お礼
ご丁寧にありがとうございました。大変参考になりました。 特に長いVBAプログラムを作成するさいなどは、適宜Nothingを使用する必要性がありそうですね。 また、変数と宣言Setステートメントついても、うまく理解できていない部分がありましたので、ありがとうございます。 ご参照くださいました変数やSetを使用して、上述の質問内容の最大値とその最大値の個数の部分を、 以前は、C列とE列に代入していましたが 違うフォルダの違うExcelシートの特定部分に代入したいのですが… A列 B列 C列 D列 E列 1行 3 最大値 10 個数 4 2行 5 3行 7 4行 10 5行 9 6行 2 … … … … ご示し頂きました内容を抜粋すると、たぶん※印の部分の代入場所を変更するとよいと思うのですが、その前後も変更すべき点があると思いまして… Sub aaa() Dim Rng As Range, Wsf As Object Set Wsf = Application.WorksheetFunction Set Rng = Range(Cells(1, 1), Cells(1, 1).End(xlDown)) ※Cells(1, 3).Value = Wsf.Max(Rng) ※Cells(1, 5).Value = Wsf.Match(Wsf.Max(Rng), Rng, 0) Set Rng = Nothing Set Wsf = Nothing End Sub 度々で申し訳ありません。よろしくお願い致します。
関連するQ&A
- 条件にあてはまるデータの数をカウントするエクセルVBA
下記のようにA列に1~3のコードがありB~E列には測定値があります。 B列以降の測定値のカウント(+3の個数、+2の個数…)を列ごとにVBAでカウントしてます。 A列に関係なくカウントするコードは記述して実行できましたが A列の条件が1の時だけカウントするVBAが良くわかりません。 シート A B C ・・・E 1 -1 +1 ・・・ 1 +2 0 2 0 0 3 -3 0 1 -1 +3 101行目以降 +3 カウント数 … +2 〃 +1 〃 0 〃 -1 〃 -2 〃 -3 〃 A列に関係なくカウントするコード sub カウント() Dim 行 As Long Dim 列 As Long For 列 = 2 To 5 For 行 = 101 To 107 Cells(行, 列).Value = Application.WorksheetFunction.CountIf(Range(Cells(2, 列), Cells(100, 列)), Cells(行, 1)) Next 行 Next 列 End Sub
- ベストアンサー
- Visual Basic
- VBAについて
はじめまして、以下のVBAについて質問させてください。 A列にデータの個数だけ連番を振りたくて、以下のVBAを入力しました。 連番を振るシートは複数あり、そのシートによってデータの個数は異なります。 しかし、以下のVBAだと最初のシートの個数に応じて、後のシートの連番も振られてしまいます。データの個数に応じてシートごとに連番を振るには、どうすればよいのでしょうか…?!どうか迷える子羊をお助け下さい(T_T) '一番はじめのシートを選択 Sheet "一番".Select 'A列に連番を振る Dim sh As Variant For sh = 3 To Worksheets.Count Dim number As Integer Dim 行2 As Long number = 1 '2行目~最終行までループ For 行2 = 3 To Cells(Rows.Count, 2).End(xlUp).Row Worksheets(sh).Cells(行2, 1) = number number = number + 1 Next 行2 Next sh
- ベストアンサー
- Excel(エクセル)
- エクセルVBAで月別最大値を取得したい
いつもお世話になっております。 要件がエクセルVBAで・・という事で困っています。エクセルの2010を使用しています。 今、添付画像のように、A列に日付、B列に金額が入っており、D列に月表示、E列に各月の金額MAXを入れたいのですが、どのように記述したら良いかわかりません。 調べてみたところ、月の切り替わりに空白が挿入されていれば、下記ソースで月毎のMAXが 抜けることが分かりました(D、E列への転記はわかりませんでしたが・・)。 Sub test1() Dim Rng As Range Dim c As Range Set Rng = Range(Range("B1"), Cells(Rows.Count, Range("B1").Column).End(xlUp))_ .SpecialCells(xlCellTypeConstants) For Each c In Rng.Areas c(c.Count).Offset(1).Value = WorksheetFunction.Max(c) Next End Sub データを抜きたいファイルおよび、シートが大量にあり、とりあえずsheet(1)だけでも 何とかしたいのですが、方法がわかりません。Accessならば集計クエリでグループ化、 最大値を抽出してやればいいのですが。 ご教示いただけますでしょうか。 宜しくお願い致します。
- 締切済み
- Excel(エクセル)
- Excel VBAの繰り返し構文について
A列に日付、B列に曜日、C列に休、D列に1直、E列に2直、という形の年間シフトを作成しています。 初期値としてA2セルに数字を入力→C列が空白の時だけD列に記入するマクロを作成したと思っています。 現在仮として、 Sub C列のセルが空白の行のD列に数値を入力() 下端行 = Range("A" & Rows.Count).End(xlUp).Row '下端検出 For 行 = 3 To 下端行 '1行目から下端行まで1行ずつ繰り返す If Range("C" & 行).Value = "" Then 'その行のC列のセルの値が空白の時 Range("A2").Copy 'A2をコピーする Range("D" & 行).PasteSpecial Paste:=xlPasteFormulas 'その行のA列のセルを起点に 'して数式を貼り付ける End If Next End Sub というマクロを置いていますが、「Range("A2").Copy」の部分を 「A2を初期値として、最初にC列が空白でなくなる時まで初期値を繰り返し、次にC列が空白になった場合は初期値+1の数をD列に入力する。 ただし初期値+1の最大数は6までとする(要するに1~6の繰り返しです)」 という感じに変更したいのですが、どうすればいいのかさっぱりです…。 VBAレベルはこの質問をする程度なのでかなり初級です。
- ベストアンサー
- その他MS Office製品
- VBAについて
こんばんは、下記のVBAについて質問をさせてください…! シートの名前と特定の列の名前が一致したらデータを引っ張ってくるというVBAなのですが、下記のVBAではもってくるデータはE列でおわりですが、もっと沢山列がある場合で、例えばDA列とかまである場合はどうすればよいのでしょうか…?! まさか「.Range("A" & cellCnt).~」というのを一つ一つ入力するわけではないと思うのですが、記述の方法が分からず困っています。 どなたかご教示いただけると大変助かります…! ' データをとってくるシートの行 Dim dataCnt As Integer ' 貼り付け先のシートの行 Dim cellCnt As Integer cellCnt = 1 For dataCnt = 1 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row If Sheets("Sheet1").Range("L" & dataCnt).Value = Sheets(sheetIdx).Name Then With Worksheets(sheetIdx) .Range("A" & cellCnt).Value = Worksheets("Sheet1").Range("A" & dataCnt).Value .Range("B" & cellCnt).Value = Worksheets("Sheet1").Range("B" & dataCnt).Value .Range("C" & cellCnt).Value = Worksheets("Sheet1").Range("C" & dataCnt).Value .Range("D" & cellCnt).Value = Worksheets("Sheet1").Range("D" & dataCnt).Value .Range("E" & cellCnt).Value = Worksheets("Sheet1").Range("E" & dataCnt).Value End With cellCnt = cellCnt + 1 End If Next
- 締切済み
- Excel(エクセル)
- エクセルVBAのヒントをください
エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す ・行挿入 ・最初のカンマの位置を調べる ・先頭からカンマまでを切り取る ・上記の値をセルに入力 ・行挿入 ・2番目のカンマの位置を調べる ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。
- ベストアンサー
- Visual Basic
- 重複データのカウント
VBAで進められなくて困っております。お知恵をお借りしたくよろしくお願い致します。 Excel2003使用 C列に入っている数字がどれくらいC列にあるか数えて、結果をD列に反映したいのですがうまくいかず困っております。 結果前 A列 B列 C列 11 105 11105 11 108 11108 11 108 11108 12 153 12153 12 161 12161 結果イメージ A列 B列 C列 D列 11 105 11105 1 11 108 11108 2 11 108 11108 2 12 153 12153 1 12 161 12161 1 ※作業を行っているシートは都合によりSheet2になっております。 1行目は項目が入っている為、データは2行目からです。 With Sheets("Sheet2") .Range("C2",.Range("C"&.Rows.Count).End(xlUp)).Offset(,2).Formula=_ "=IF(OR(D2="""",COUNTIF(Sheet2!C:C,D2)=0,""""))" End With データの数量は5000件以上、場合によっては1万以上になります。 以上、宜しくお願いたします。
- ベストアンサー
- Visual Basic
- VBAの修正を助けてください
下記のコードはC列の日付別、Z列数字の1、をA列のデータ別でBW列カウントするものなのですが、 一つ条件を追加してF列が数字の1~6の場合のA列のデータ別でカウントしたいのです。 F列が数字の1の場合は1のカウントを表示、2の場合は2のカウント表示、それぞれの数字に応じてのカウント回数を出力したいのですが、お詳しい方法を教えてください。よろしくお願いします。 Sub カウント() Dim dic As Object Dim lastRow As Long Dim r As Long Dim key As String Set dic = CreateObject("Scripting.Dictionary") 'Dictionaryオブジェクト lastRow = Range("A" & Rows.Count).End(xlUp).Row 'A列最終行 'データ収集 For r = 2 To lastRow '2行目から最終行まで If (DateValue(Cells(r, "C").Value) >= DateValue("2010/6/01")) And (DateValue(Cells(r, "C").Value) <= DateValue("2010/4/01")) Then key = Range("A" & r).Value & Chr(0) & Range("Z" & r).Value 'キー値はA列注目行の値+Z列注目行の値(間にchr(0)) If Not dic.exists(key) Then 'キー値が無ければ dic.Add key, 1 'キーを追加して、値(個数)を1に Else '既にキー値があれば dic(key) = dic(key) + 1 'そのキーの値(個数)+1 End If End If Next For r = 2 To lastRow '2行目から最終行まで key = Range("A" & r).Value & Chr(0) & "1" '探す値はA列注目行の値+"1"(間にchr(0)) Range("BW" & r).Value = dic(key) 'BW列にその値(個数)を表示 Next End Sub
- 締切済み
- Visual Basic
- エクセルVBAについて教えてください。
DSUMを使ってVBAで自動計算をさせたいのですがうまくいきません。 ・Sheetsデータにデータを置いていて、A1からU1610までデータが入ってます。 ・Sheets集計用は計算させるための(条件を入れる)シートで、A1からE列まで(選択する項目によって何行目になるかわかりません。) ・mycountでE列のデータが入ってる行を出してます。 ・部屋タイプで1K~1LDKを選ぶとDSUMの式のタイプに1を入れたいのです。(1K~1LDKの場合はCells(1,3) 下記のように書いてみましたが上手くいきません。 どなたかご教授いただけると助かります。 mycount = "=COUNT(集計用!E2:E300)" Sheets("集計用").Cells(5, 7).Value = Range("g10") = " =DSUM(cells(データ!,1),1610,21),cells(データ!1,タイプ),cells(集計用!),cells(mycount,5))" '部屋タイプの選択 If Sheets("フォーム").Range("c30") = "1K~1LDK" then タイプ = 3 ElseIf Sheets("フォーム").Range("c30") = "2K~2LDK" Then タイプ = 6 ElseIf Sheets("フォーム").Range("c30") = "3K~3LDK" Then タイプ = 9 ElseIf Sheets("フォーム").Range("c30") = "4K~4LDK" Then タイプ = 12 Else Sheets("フォーム").Range("c30") = "その他" Then タイプ = 15 End If
- ベストアンサー
- Visual Basic
- ExcelVBAのデータの連続する個数の検索
A~Fの各列ごとに、121以上の数字が連続する個数を出力し、出力したデータの最大値を求めたいのですが、どうやって式を組んだらいいか、わかりません。 アドバイスいただけましたら幸いです。 A / B / C / D / E / F 118.19 / 118.11 / 118.22 / 118.20 / 118.20 / 118.74 120.93 / 120.86 / 120.96 / 120.92 / 120.92 / 121.44 123.45 / 123.35 / 123.45 / 123.43 / 123.43 / 123.88 120.97 / 121.04 / 120.94 / 121.00 / 120.97 / 120.93 118.57 / 119.48 / 118.69 / 121.52 / 118.48 / 119.69 123.48 / 123.35 / 123.44 / 123.43 / 123.41 / 123.61 123.59 / 120.47 / 123.58 / 123.57 / 123.57 / 123.74 連続する個数 1コ / 2コ / 1コ / 5コ / 1コ / 2コ 2コ / 1コ / 2コ / - / 2コ / 2コ 最大値 2コ /2コ /2コ /5コ /2コ /2コ
- ベストアンサー
- Visual Basic
お礼
ご返答ありがとうございます。早速やってみましたが、すぐにできました。 初心者なもので2~3時間悩んでおりましたが、一瞬にして解決しました。ありがとうございます。 関数をうまく使用するとよいですね。 いろいろな参考書なども参考にしていますがifの条件分岐を使用して最大値を算出しており、これらを参考にしましたが、教えて頂いた内容が大変シンプルで分かりやすかったです。 記載して頂いた内容の最後の分の Set Rng = Nothing Set Wsf = Nothing はどのような意味があるのですか?? 初心者な質問ですみません。