VBAで数値をカウントするマクロを作りました。
Dim Co1 As Integer
Co1 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<1")
Dim Co2 As Integer
Co2 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<2")
Dim Co3 As Integer
Co3 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<3")
Dim Co4 As Integer
Co4 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<4")
Dim Co5 As Integer
Co5 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<5")
Dim Co6 As Integer
Co6 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<6")
Dim Co7 As Integer
Co7 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<7")
Dim Co8 As Integer
Co8 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<8")
Dim Co9 As Integer
Co9 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<9")
Dim Co10 As Integer
Co10 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<10")
Dim Co11 As Integer
Co11 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), ">=10")
Cells(2, 1) = Co1
Cells(3, 1) = Co2 - Co1
Cells(4, 1) = Co3 - Co2
Cells(5, 1) = Co4 - Co3
Cells(6, 1) = Co5 - Co4
Cells(7, 1) = Co6 - Co5
Cells(8, 1) = Co7 - Co6
Cells(9, 1) = Co8 - Co7
Cells(10, 1) = Co9 - Co8
Cells(11, 1) = Co10 - Co9
Cells(12, 1) = Co11
Cells(2, 1) = "0~0.999"
Cells(3, 1) = "1~1.999"
Cells(4, 1) = "2~2.999"
Cells(5, 1) = "3~3.999"
Cells(6, 1) = "4~4.999"
Cells(7, 1) = "5~5.999"
Cells(8, 1) = "6~6.999"
Cells(9, 1) = "7~7.999"
Cells(10, 1) = "8~8.999"
Cells(11, 1) = "9~9.999"
Cells(12, 1) = "10~"
これを短くする方法を教えてください。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは!
一例です。
仮にCOUNTする範囲を G1~G30 とした場合のコードです。
Sub Sample1()
Dim k As Long, myRng As Range, myArry
myArry = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Set myRng = Range(Cells(1, "G"), Cells(30, "G")) '←★ここで範囲指定
For k = 0 To UBound(myArry)
With Cells(k + 2, "A")
.Value = k & "~" & k + 0.999
.Offset(, 1) = WorksheetFunction.CountIf(myRng, "<" & myArry(k)) _
- WorksheetFunction.Sum(Range(Cells(1, "B"), Cells(k + 1, "B")))
End With
Next k
With Cells(12, "A")
.Value = "10~"
.Offset(, 1) = WorksheetFunction.CountIf(myRng, ">=" & 10)
End With
End Sub
こんな感じでは同でしょうか?m(_ _)m
No.2
- 回答日時:
> Cells(2, 1) = "0~0.999"
ここから始まる部分だけで良いかも
※せっかく求めた列に上書きしているようなので
という事は置いといて
求めたのがA列、上記がB列として
CountIf を使わないで、ベタに処理する例になれたら・・・
※ 範囲指定したセル全部判別するので、
範囲が大きければそれなりに遅くなると思います。
※ セル結合がないもので動くとは思います
Public Sub Samp1()
Dim i As Long, j As Long
With Range("A2:B12")
.ClearContents
With .Columns(2)
.Formula = "=ROW()-2&""~""&ROW()-2&"".999"""
.Value = .Value
End With
.Cells(.Count).Value = "10~"
End With
With Range(Cells(○, ○), Cells(○, ○))
For i = 1 To .Count
If (Not IsEmpty(.Cells(i).Value)) Then
On Error Resume Next
j = Int(.Cells(i).Value)
If (Err = 0) Then
If (j < 0) Then
j = 0
ElseIf (j > 10) Then
j = 10
End If
Cells(j + 2, "A").Value = Cells(j + 2, "A").Value + 1
End If
End If
Next
End With
End Sub
とか
Public Sub Samp2()
Dim rng As Range
Dim iSum As Long, i As Long
Set rng = Range(Cells(○, ○), Cells(○, ○))
With Range("A2:B12")
.ClearContents
With .Columns(2)
.Formula = "=ROW()-2&""~""&ROW()-2&"".999"""
.Value = .Value
End With
.Cells(.Count).Value = "10~"
iSum = 0
For i = 1 To 10
With .Cells(i, 1)
.Value = WorksheetFunction.CountIf(rng, "<" & i) - iSum
iSum = iSum + .Value
End With
Next
.Cells(i, 1).Value = WorksheetFunction.CountIf(rng, ">=10")
End With
Set rng = Nothing
End Sub
No.3
- 回答日時:
次のようなことをやりたいのかな。
Sub test()
Dim cnt(11) As Integer, i As Integer, rng As Range
Set rng = Range(Cells(〇, 〇), Cells(〇, 〇))
For i = 1 To 10
cnt(i) = WorksheetFunction.CountIf(rng, "<" & i)
Next
cnt(i) = WorksheetFunction.CountIf(rng, ">=10")
For i = 1 To 10
Cells(i + 1, 1) = i - 1 & "~" & i - 0.001
Cells(i + 1, 2) = cnt(i) - cnt(i - 1)
Next
Cells(i, 1) = i - 1 & "~"
Cells(i, 2) = cnt(i)
End Sub
なお、同じ結果を得るなら、「分析ツール」―「ヒストグラム」でもできるし、これをVBAで使えば短くなる。
Sub test2
Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range("〇:〇"), _
ActiveSheet.Range("□"), ActiveSheet.Range("△:△"), False, False _
, False, False
End Sub
これだけ。
"〇:〇" データ範囲
"□" 出力先
"△:△" データ区間のセル範囲
No.4
- 回答日時:
一案ですが
ご希望の集計ができる基本シートを準備して
関数を配置しておく。
VBAのボタンをおすと
別のシート(或いは 新規のシート)へ
値の貼り付けで固定してしまう。
VBAのコードはわずかになりますし
将来、シートの変更が発生した場合も
コードを修正することなく、基本シートを変更すれば
いくらでも見栄えの良いシートになり便利かと思います。
No.5
- 回答日時:
Option Explicit
Sub Goose()
Dim Co(0 To 10)
Dim Poo As Integer
Dim Boo As Integer
'データ範囲(例えばE列)
Poo = 5
Co(0) = 0
For Boo = 0 To 9
Co(Boo + 1) = WorksheetFunction.CountIf(Columns(Poo), "<" & (Boo + 1))
Cells(Boo + 2, "B").Value = Co(Boo + 1) - Co(Boo)
Cells(Boo + 2, "A").Value = Boo & "~" & Boo & ".999"
Next
Cells(12, "B").Value = WorksheetFunction.CountIf(Columns(Poo), ">=10")
Cells(12, "A").Value = "10~"
MsgBox ("Gattyonn!!")
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
VBA 別ブックからの転記の高速...
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBAで変数の数/変数名を動的に...
-
ExcelVBAでDo Until loopのネス...
-
Changeイベントで複数セルへの...
-
VBA別シートの最終行の次行へ転...
-
VBA 実行時エラー1004 rangeメ...
-
VBA 重複チェック後に値をワー...
-
テキストボックスから、複数の...
-
vba 住所で判断して担当支店に...
-
GASでチェックボックスを一括of...
-
楽天RSSからエクセルVBAを使用...
-
ExcelのVBマクロを、バックグラ...
-
複数シートの複数列に入力され...
-
前回質問の続きになりますが、...
-
VBA Userformで一部別シートに...
-
VBAコードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBA 別ブックからの転記の高速...
-
VBA別シートの最終行の次行へ転...
-
【VBA】特定の条件でセルをコピー
-
Count Ifのセルの範囲指定に変...
-
100万件越えCSVから条件を満た...
-
楽天RSSからエクセルVBAを使用...
-
VBAコードについて
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
Excel2013で切り取り禁止
-
グラフマクロで系列を変数にす...
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
Unionでの他のシートの参照につ...
-
Excel VBA オートフィルターで...
-
アクセスからエクセルへ出力時...
おすすめ情報