- ベストアンサー
マクロでCOUNTIFを使いたい
- マクロでCOUNTIFを使いたく、下記のマクロを作成しましたが、一部のセルに正しく値が表示されません。
- 具体的には、C列に正しい数値が表示されない現象が起きます。
- 原因を知りたいので、解決方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- マクロでCOUNTIFを使いたい(続)
マクロでCOUNTIFを使いたい(続) Excel2003を使用しています。 【転記元】B列の値が【転記先】A列には何回出てくるのか?を転記先C列に書き出す作業を しております。 【転記元】H列は空白・数値が入力されています。 【転記先】C列には【転記元】のH列が「0以上で"計"を含まない」件数をカウントさせたい のですが、現状のコードだと正確な数値が入りません。(2のところが5だったりとか) お解りの方がいらっしゃればどうぞご指摘ください。 宜しくお願いします。 ------------------------------------------------------------ 【転記元】 B列 … H列 あ 50 あ 20 計 70 ------------------------ い ※空白 い 0 計 0 ------------------------ う 0 計 0 ------------------------ え 20 え ※空白 計 20 ------------------------ お 10 お 20 計 30 ------------------------ 【転記先】 A列 B列 C列 ←★このC列に結果を表示させたい あ 2 え 1 お 2 ------------------------------------------------------------ Sub テスト() Dim ent As Worksheet, mst As Worksheet Dim i As Integer, j As Integer, mstsh As Integer Dim lstcel As String Dim mstRge As Range Dim sach As Variant Set ent = Workbooks("転記先").ActiveSheet Set mst = Workbooks("転記元").ActiveSheet Set mstRge = mst.Range("B5:H2000") ent.Activate ent.Range("C2:C1000").ClearContents lstcel = mst.Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To lstcel sach = ent.Cells(i + 1, "A") If mst.Cells(i + 5, "H") > 0 And mst.Cells(i + 5, "H") <> "計" Then ent.Cells(i + 1, "C").Value = Application.WorksheetFunction.CountIf(mstRge, sach) End If Next i End Sub
- 締切済み
- その他MS Office製品
- ブックの転記で計算式も転記したい
ブックの転記で計算式も転記したい データを転記するマクロを作成しました。 【知りたいこと】 その1: 転記元となるブックを毎回「master」という名前に変更してから作業をしています。 この一手間を省きたいと考えているのですが、開いているもう一つのブックを自動で 転記元の〔mst〕と認識させて作業を進めるにはどうしたら良いでしょうか? その2: 転記先のD列に、転記元(master)E列の数式を転記させるにはどうしたら良いでしょうか? このE列には、数値の値だったり、足し算・引き算・割り算などの計算式が混在しています。 また、転記先の書式は保ち、値もしくは計算式だけを転記したい。 宜しくお願い致します。 ---------------------------------------------------------- Sub 値の転記() Dim ent As Worksheet, mst As Worksheet Dim i As Integer, j As Integer Dim lstCel As Integer Set ent = Workbooks("転記先").ActiveSheet Set mst = Workbooks("master").ActiveSheet '←★その1:このブック名の指定 lstCel = mst.Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To lstCel ent.Cells(j + 2, "A") = mst.Cells(i + 2, "A") ent.Cells(j + 2, "B") = mst.Cells(i + 2, "B") ent.Cells(j + 2, "C") = mst.Cells(i + 2, "D") ent.Cells(j + 2, "D") = mst.Cells(i + 2, "E")'←★その2:ここだけ数式を転記 j = j + 1 Next i End Sub ----------------------------------------------------------
- ベストアンサー
- その他MS Office製品
- VBAのcountif
ここで質問させていただき、配列に必要なデータを入力する所までは出来ました。 次に各行ごとの"OK"の数をカウントしたいのですが、どのように記述すればよいのでしょうか? Sub count0(a, b, c, d, e) Dim i1 As Long Dim i2 As Long Dim A1 As String Dim bb As Variant Dim cc As Variant Dim dd As Variant Dim ee As Variant Dim myLastRow As Long Sheets(a).Select myLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 bb = Range(b).Resize(myLastRow, 6) cc = Range(c).Resize(myLastRow, 6) dd = Range(d).Resize(myLastRow, 6) ee = Range(e).Resize(myLastRow) For i1 = 1 To myLastRow For i2 = 1 To 6 If bb(i1, i2) = "" Then A1 = "NG" ElseIf bb(i1, i2) = "A1" Or cc(i1, i2) = "A1" Then A1 = "-" ElseIf bb(i1, i2) = cc(i1, i2) Then A1 = "OK" Else A1 = "NG" End If dd(i1, i2) = A1 Next i2 '配列をカウントするこの行以降の記述が良く分かりません。 ee(i1) = Application.WorksheetFunction.CountIf(dd(), "OK") Next i1 Range(e).Resize(myLastRow) = ee End Sub
- ベストアンサー
- その他MS Office製品
- VBAで文字列のカウントがうまくいかない・・・です
Dim cnt As Long Dim i As Long Dim lastRow As Long For i = 1 to 20 step 2 lastRow = Cells(65536, i).End(xlUP).Row cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(10, i),Cells(lastRow, i), "お世話になっております")cnt = cnt + cnt Next Excelのセルを1列ずつ飛ばして列に「お世話になっております」が含まれたら件数をカウントしています。 そのカウント数が何故かリセットされてしまいます。 カウント数を足していきたいのですが・・・考え方自体が違うのでしょうか?
- ベストアンサー
- Visual Basic
- VBAの簡略化について
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~" これを短くする方法を教えてください。
- 締切済み
- Visual Basic
- EXCELVBAの Countifについて
A列のA2から値が入力されている最終セルまでを一気に範囲選択して、データの個数を数えたいのですが、 上手くいきません。 ご指導をよろしくお願いします。 Range("D1") = WorksheetFunction.countif(Sheets("1").Range(Cells(2, 1), Cells(2, 1).End(xlUp)), "001")
- ベストアンサー
- Excel(エクセル)
- Vlookupマクロにつきまして
初心者で、 エクセルのマクロにて、下記の処理を行おうとしているのですが、 上手く行きません。 どなたかお助けください! B3=Vlookup(A3,Sheet2!A:F,3,False) B4 A4 B5 A5 とA列に値がある限りカウントアップしていきます。 以下の通り考えてみたのですが、動きません。 Sub vlookup() Dim i As Long For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row Cells(i, "B") = Application.WorksheetFunction.VLookup(Range(Cells(i, "A")), Worksheets("Sheet2").Range("A:F"), 3, False) Next End Sub すみません、宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- 条件にあてはまるデータの数をカウントするエクセル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
- マクロ実行時のフリーズについて
下記のような処理を実行すると応答なしとフリーズになってしまいます。 解決方法について教えてください やりたいこと :8列目にコードが並んでいて、重複コード(2回目以降)のものは赤色にする 困っていること:実行すると応答なしでフリーズしてしまう →変数の上限が20000ではなく5000だと問題なく動く Sub (1)() Dim i As Long For i = 3 To 20000 If Application.WorksheetFunction.CountIf(Range(Cells(3, 8), Cells(i, 8)), Cells(i, 8)) > 1 Then Cells(i, 8).Font.ColorIndex = 3 End If Next i End Sub
- 締切済み
- Visual Basic
- ExcelのVBAで質問です。
以下のようなシートがあります。 A列 B列 C列 D列 E列 F列 G列 H列 NO 名前 確認 日付1 日付2 確認 日付1 日付2 6行目からデータを入れる予定です。 C列には○印を入力します。 C列~E列までデータが入った行は、 F列~H列まで同じ処理をします。 (セルの背景色を変えます。) 以後同じことを列方向で繰り返します。 以下のようなVBAを組みましたが、 ○の個数を数える部分でエラーがでます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim staff As String Dim kakunin As String Dim date1 As Date Dim date2 As Date Dim i As Long Dim j As Long Dim cnt As Long '100件分ループ For i = 6 To 105 '○の数をカウント cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(i, 2), Cells(i, 256)), "○") 'jとは確認の列番号のこと j = 3 * cnt staff = Cells(i, 2) kakunin = Cells(i, j) date1 = Cells(i, j + 1) date2 = Cells(i, j + 2) 'スタッフ名が入力されたら If staff = "" Then Range(Cells(i, j), Cells(i, j + 50)).Interior.ColorIndex = 15 Else Cells(i, j).Interior.ColorIndex = xlNone '○が入力されたら If kakunin = "○" Then Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = xlNone Else Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = 15 End If If Cells(i, j + 1) <> "" And Cells(i, j + 2) <> "" Then Cells(i, j + 3).Interior.ColorIndex = xlNone End If End If Next i End Sub ご教授いただけたら、幸いです。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
お礼
>ステップ実行でデバッグして見ましたか? お恥ずかしい話ですが、何度もしました。そして、検索値が増えないのはなぜなのか? 全く解らずに困っていました。これじゃデバックしても意味が無いですね。 >セルの.Formula ワークシート関数を使っているのでそうしたのですが、これも間違いでしたね(恥) ご指摘を受けて間違いに気づくことが出来ました。この度は本当にありがとうございました。