アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの問題がわからないのでどなたか教えてくださると助かります。

データのカウント結果が

1の数 8個
2の数 4個
3の数 1個

↑のやうにそれぞれExcelのシート上にある時に、最大というコマンドボタンを押すと最大値である1の数という文字をExcelシート上に表示するようなプログラムをつくりたいのですがどうすればできるのかわかりません。

よろしくお願いします。

A 回答 (3件)

ANo2です。



書き忘れたので、以下を追加です。

例示の内容は、いずれも最大値が複数ある場合の対処については考慮してありません。
(実際には、最大値を持つセルが複数存在する可能性があり、その場合にどう処理するのかはいろいろ考え方があることとと思います。)
    • good
    • 0

こんにちは



問題とのことですので、出題者には期待する回答があると想像します。(教えた内容に沿った回答など)
基本的には、ご質問文通りに処理を行えば回答にたどり着くと思いますが、エクセルということなので、シートの関数を利用する方法なども考えられます。

セル位置が不明ですが、例えば文字がA1:A3に、個数がB1:B3にあるものとして、B列の値は8、4、1の数値で「個」は書式などで設定されているものと仮定します。

以下はセルD1~D3に、それぞれ異なる考え方で値を設定します。

◇1 対象範囲を走査して探す方法
(B列の数値は必ず0以上であると仮定しています。)
maxVal = -1
targetStr = ""

For rw = 1 To 3
 If Cells(rw, 2).Value > maxVal Then
  maxVal = Cells(rw, 2).Value
  targetStr = Cells(rw, 1).Value
 End If
Next rw

Range("D1").Value = targetStr


◇2 ワークシート関数を利用する方法
maxVal = WorksheetFunction.Max(Range("B1:B3"))
idx = WorksheetFunction.Match(maxVal, Range("B1:B3"), 0)
Range("D2").Value = WorksheetFunction.index(Range("A1:A3"), idx)


◇3 セルに関数式を設定する方法
内容的には2と同じですが、VBAで計算(処理)せずに結果を得たいセルに2と同じ内容の関数式を設定して、実際の計算はエクセルに行ってもらう方法です。
Range("D3").Formula = "=INDEX(A1:A3,MATCH(MAX(B1:B3),B1:B3,0))"


※ 問題らしいので、各内容の細かな説明は省略しました。
    • good
    • 0

「nの数」と「m個」は別のセルであるという前提で。


「m個」の「個」は書式を設定して、セルの実際の値は「m」としたほうが楽かと思います。
「nの数」列がA列、「m個」列がB列、マクロの出力セルをC1セルとした場合

with activesheet
.Range("C1") = worksheetfunction.Max(.Range("B:B"))
end with

でどうでしょうか、正直VBAよりもワークシート関数のが良さそうな内容ですが、問題とのことなのでそれは関係ないですね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!