重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【やりたい事】
A列のデータの、【カウントしない】と書かれた入力データをのぞいた
件数をカウントする為の関数を入れたいです

ただし、A列のデータは毎回、最終行が変わります。開始行A1は変わりません
最終行は、以下コードで取得できますが、コードへの反映方法が分かりません

カウントする範囲が毎回変わるという意味です

ご存じの方、アドバイスorコード教えて下さい

【関数】
=COUNTIF(A1:A8,"<>カウントしない")
⇒A8の部分が毎回変わります


【コード】
Sub 数式入力()

lastrow = Cells(Rows.Count, "a").End(xlUp).Row

MsgBox lastrow

Cells(1, 3).Formula = "=COUNTIF(A1:A8,""<>カウントしない"")"

End Sub

「【マクロ】数式を入力したい。カウントIF」の質問画像

A 回答 (2件)

1案


Cells(1, 3).Formula = "=COUNTIF(A1:A" & lastrow & ",""<>カウントしない"")"

2案
Dim wstr As String
wstr = "=COUNTIF(A1:A%LAST%,""<>カウントしない"")"
wstr = Replace(wstr, "%LAST%", lastrow)
MsgBox (wstr)
Cells(1, 3).Formula = wstr


1案は、文字列を直接連結する方法です。
2案は、置き換えたい箇所に特定の文字列を設定して起き(今回は%LAST%にしました)、その文字列をlastrowの内容で置換する方法です。
%LAST%は、なんでもよくてXXXでも構いません。その場合は
wstr = "=COUNTIF(A1:AXXX,""<>カウントしない"")"
wstr = Replace(wstr, "XXX", lastrow)

どちらか好みの方法を採用してください。
のようになります。
    • good
    • 1

こんばんは



>A8の部分が毎回変わります
ご提示のコードでは、そのために最終行を求めているのではないのですか?
設定する式中の「A1:A8」の部分を、最終行(=lastrow)に応じて変えれば良いだけです。
 "A1:A" & lastrow
などとすることで、対象範囲のセルアドレスを可変で作成することが可能です。


一方で、最終行以降は当然空白セルと考えられますので、マクロなど使わずとも、C1セルに固定で、
 =COUNTIFS(A:A,"<>カウントしない",A:A,"<>")
の関数式を設定しておけば済む話と思われます。

※「最終行までにある中間の空白セルは数えたい」という場合は、上式ではうまくいきませんけれど、その場合でも関数だけで「最終行迄の範囲で計算する」ことは可能です。(多分、そうではないと思うので省略)
    • good
    • 1

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