プロが教える店舗&オフィスのセキュリティ対策術

Sub showMostFrequentNumber1()
Dim i As Integer
Dim count(1 To 10) As Integer
Dim maxcount As Integer
For i = 1 To 10
count(i) = Application.CountIf(Range("A1:A10"), Cells(i, 1).Value)
If i = 1 Then
maxcount = count(i)
ElseIf count(i) > maxcount Then
maxcount = count(i)
End If
Next i
For i = 1 To 10
If count(i) = maxcount Then
Range("A15").Value = Cells(i, 1).Value
End If
Next i
End Sub
--------------
Sub showMostFrequentNumber2()
Dim i As Integer
Dim count(1 To 10) As Integer
Dim maxcount As Integer
For i = 1 To 10
count(i) = Application.CountIf(Range("B1:B10"), Cells(i, 1).Value)
If i = 1 Then
maxcount = count(i)
ElseIf count(i) > maxcount Then
maxcount = count(i)
End If
Next i
For i = 1 To 10
If count(i) = maxcount Then
Range("B15").Value = Cells(i, 1).Value
End If
Next i
End Sub

コピペでA列B列の答えはオッケイですが
C列D列E列F列G列では答えが違うどうしてですか
マクロ名もセルの番号も修正したのに

A 回答 (3件)

C列D列E列F列G列のコードが無いのでわからないけれど・・


プロシージャ7つ書くのかな?
AIがはいたコードぽいけれどforを使いOffsetで範囲を変えて出力すれば1つで済むかも知れません

書き方は違うけれどこんな感じかな

Sub Sample()
Dim Rng As Range
Dim k, keyWord
Dim tmpArray()
Dim i As Integer, n As Integer
For i = 0 To 6
n = 0
Set Rng = Range("A1:A10").Offset(, i)
keyWord = WorksheetFunction.Unique(Rng)
ReDim countArray(UBound(keyWord))
For Each k In keyWord
countArray(n) = Application.CountIf(Rng, k)
n = n + 1
Next k
Dim maxCount
maxCount = WorksheetFunction.Max(countArray)
n = 0
For Each k In keyWord
If maxCount = Application.CountIf(Rng, k) Then
ReDim Preserve tmpArray(n)
tmpArray(n) = k
n = n + 1
End If
Next
Range("A15").Offset(, i) = Join(tmpArray, "と")
' Range("A15").Offset(, i) = "要素:" & Join(tmpArray, ", ") & " 出現数:" & maxCount
Next i
End Sub
    • good
    • 0

こんにちは



なさりたいことを書いてないのでわかりませんけれど・・
これ(↓)と同じことをA~G列で行いたいということと解釈しました。
https://oshiete.goo.ne.jp/qa/13441995.html

そちらに回答しておいた方法でも良ければ、記入するセル範囲をA15:G15にすればまとめて処理できます。
(最頻値が同数で複数ある場合には、ひとつだけ返されます)

Sub hoge()
 Const f = "=INDEX(A:A,MATCH(MAX(@),@,0))&"""""
 Const g = "INDEX(COUNTIF(A1:A10,A1:A10),)"
 Range("A15:G15").FormulaLocal = Replace(f, "@", g)
 Range("A15:G15").Value = Range("A15:G15").Value
End Sub


※ 同じ様な質問をするのなら、旧いものは放置ではなく、締め切っておく方が宜しいと思います。
    • good
    • 0

>コピペでA列B列の答えはオッケイですが


>C列D列E列F列G列では答えが違うどうしてですか

結局、やりたいのは以下のような、ことですか。
①A1~A10で最も出現回数の多い数字をA15へ設定する。
②B1~B10で最も出現回数の多い数字をB15へ設定する。
③C1~C10で最も出現回数の多い数字をC15へ設定する。
④D1~D10で最も出現回数の多い数字をD15へ設定する。
⑤E1~E10で最も出現回数の多い数字をE15へ設定する。
⑥F1~F10で最も出現回数の多い数字をF15へ設定する。
⑦G1~G10で最も出現回数の多い数字をG15へ設定する。
上記をマクロ1回の呼び出しで実現する。
    • good
    • 0

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