900人程の身長のデータから、2番目に大き身長をセルに表示させたいのですがどうすれば良いでしょうか?
for文を使ったプログラミングです!
どなたか教えて頂けますでしょうか?
ちなみに下は一番小さい身長のデータを表示するプログラミングです。
Sub task1()
Dim Hmin As Double
Dim i As Long
Hmin = Cells(6, 11)
For i = 1 To 912
If Cells(i + 1, 7) < Hmin Then
Hmin = Cells(i + 1, 7)
End If
Next i
Cells(5, 13) = Hmin
End Sub
No.10
- 回答日時:
すみません、、、2番目の値が発生した後に、一番目の値が発生すると、うまくいかないですね。
二階ループ回したほうがわかりやすいのかもしれませんが、、、
結局、最初の部分(’****)も入れないダメですかね?
if Cells(i + 1, 7) > Hmax Then
if hmax2<hmax then '****
hmax2=hmax '****
end if '****
Hmax=Cells(i + 1, 7)
else if Cells(i + 1, 7) > Hmax2 Then
Hmax2=Cells(i + 1, 7)
end if
なんか、プログラムとして美しくないですね。
判断件数考えなくてよいなら、ソートしてしまうのがわかりやすくてよいのかもしれません。
No.9ベストアンサー
- 回答日時:
こんばんは、
Excelなら、#7さんの関数を使用すれば、一発ですが、、ループでの考え方だとすると
この様な考え方で良いのではないでしょうか?
ご質問のコードは、一番小さいですね。
If Cells(i + 1, 7) < Hmin Then を
If Cells(i + 1, 7) > Hmin Then すると直感的に最大が抽出できるのは分かると思います。
では、一度最大の値を抽出してから、もう一度、先の最大の値を除外した最大を抽出すれば、
2番目に大きいとなるのではないでしょうか?
通常Excelの場合、この様なプログラミングはしないかと思いますが、、
ご質問のやり方しか知らなく、それを工夫して実現する場合の参考です。
従って、出来るだけご質問のコードを生かし下記の様になります。
Sub task1()
Dim Hmin As Double, tmp As Double ’2番目を抽出する為の変数
Dim i As Long
Hmin = 0 '最大なので0で良いかと
For i = 1 To 912
If Cells(i + 1, 7) > Hmin Then
Hmin = Cells(i + 1, 7)
End If
Next i
'この時 Hmin には最大値が代入されている
'Cells(5, 13) = Hmin
tmp = 0
For i = 1 To 912
'もう一度上記同様に最大値を抽出 ただし = Hminで最大値の場合除外する
If Cells(i + 1, 7) < tmp Or Cells(i + 1, 7) = Hmin Then '上と少し書き方が違うのは、検証して調べてくださいね。
Else
tmp = Cells(i + 1, 7)
End If
Next
Cells(5, 13) = tmp
End Sub
考え方を示したコードですが、同じようなやり方でも色々あります。
Excel場合、さらにやり方は沢山あります。
詳細な回答頂きありがとうございます!
今の私ができる範囲で教えて頂けたので、ベストアンサーにさせて頂きます。
ありがとうございました。
No.7
- 回答日時:
こんにちは
例示のコード中に「Cells」の表記がありますが、データはエクセルにあるってことでしょうか?
であるなら、ソートして2番目を読めば良いのでは?
元のデータ順を変えたくなければ、どこかにコピペしてからソートしても良いでしょう。
あるいは、ワークシート関数のLARGEを利用して2番目を求める方が簡単かもしれません。
(こちらなら一行で済みそうですし)
https://docs.microsoft.com/ja-jp/office/vba/api/ …
No.6
- 回答日時:
同じ値が複数行存在する可能性があるなら、降順に並び替え済みなので、比較も簡単に済みます。
Call Range(Cells(1, 7), Cells(912, 7)).Copy(Cells(1, 10))
Call Range(Cells(1, 10), Cells(912, 10)).Sort(Cells(1, 10), xlDescending)
Dim valueOfTop1 As Long
valueOfTop1 = Cells(1, 10).value
Dim i As Long
i = 2
Do While True
If valueOfTop1 <> Cells(i, 10).value Then
Exit Do
End If
i = i + 1
Loop
MsgBox Cells(i, 10).value
No.5
- 回答日時:
列全体を降順に並び替えて2行目を取ればいいのでは。
元の値が並び替えられるのが嫌なら、別シートとか別列に丸ごとコピーしてから並び替え。
Call Range(Cells(1, 7), Cells(912, 7)).Copy(Cells(1, 10))
Call Range(Cells(1, 10), Cells(912, 10)).Sort(Cells(1, 10), xlDescending)
MsgBox Cells(2, 10).Value
No.3
- 回答日時:
プログラムでなくても、紙に900個数字が書かれていて、
> 2番目に大き身長を
探そうとしたら、1番目と2番目の数字を覚えといて、数字を上からながめて行き、
・1,2番より大きいか等しい数字が出たら、覚えてる1番目は新しい数字、2番目は1番だった数字に
・2番より大きいけど1番よりは小さい数字が出たら、2番目を新しい数字に
に更新して一番下までチェックとか。
--
数を減らして、
3 4 6 1 2 5 7 3 5
って数字を左からなめるとして、
最初、
1番大きい数字=4
2番目に大きい数字=3
6って数字を持ってきて、
1番目に大きい数字以上なので、
1番大きい数字=6
2番目に大きい数字=4
1って数字を持ってきて、
1番大きい数字=6
2番目に大きい数字=4
2って数字を持ってきて、
~
みたいな感じで、最後どうなるか確認したり、数字を変更してどうなるか確認してみるとか。
> プログラミングです!
ササッと出来りゃいいですが、出来ない場合はベタな方法でも、手を動かすのが上達のヒケツです。
No.1
- 回答日時:
Hmax=cells(6,11)
Hmax2=0
for i = 1 to 912
if Cells(i + 1, 7) > Hmax Then
Hmax2=Hmax
Hmax=Cells(i + 1, 7)
end if
next i
全員同じ高さでなければ、これで行けるんじゃないかな
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBA 罫線について B列3行目から21行毎にデータがはいります。 データがはいったらデータが入った 6 2022/11/15 17:22
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
ExcelでGaussian fittingをした...
-
ハッシュテーブル(連想配列)が...
-
変数名の取得
-
rand関数の割合変更
-
power BI クエリエディター 〇...
-
変数に代入してある数値を表示...
-
PysimpleGUIでデータベースを作る
-
Request.QueryString への値の...
-
VB.NETでコンボボックスの1行目...
-
値を返さないコード パス
-
Excel VBA 複数選択したリスト...
-
RGB値をL*a*b*に変換したい
-
ユーザーフォームのテキストボ...
-
C言語では0は・・・
-
textboxとLabelを動的に変更する
-
RegisterClassExのエラー原因
-
ListBoxでオートフィルター表示
-
コンボボックスで選択した項目...
-
代入したのに値が更新されない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
ハッシュテーブル(連想配列)が...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel vba ユーザーフォームテ...
-
マクロで奇数と偶数の値を2か所...
-
DataTableに対するLINQについて
-
【C++/CLI.NET】コンボボックス...
-
[VBA]選択範囲の下から上に処理...
-
範囲が指定されている乱数について
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
-
vbscriptを使いexcelを参照して...
おすすめ情報
Ifやforを使った繰り返しのプログラミングを学んでいる最中で、これはその課題です!
今はまだ初歩の段階です。