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

以下の文の[-1899]の部分を可変型にしたいのですが。
どなたかご存知有りませんか?
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")"
====================================
マクロの説明です。
====================================
エクセルマクロでsheet1にデータを入力していって、

sheet1のD列内に同一のコードがないかをチェックするために

sheet1のコピーを作成してD列でソートしてから

D列の1行目=2行目ならK列に”いっしょだよ”という

メッセージを出すようにIF文を書きこんでいきます。

最後にこの”いっしょだよ”というメッセージが何件あったかを見たいので、

一番下の行+1行目に

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")"

という文を入れたのですがこれだと自分が居る一つ上のセルから

1899上までしか行かないのですが、毎回データを入力して行数は増えていってしまいます。

どのような、文にしたらよいのか教えてください。
お願いいたします。

A 回答 (1件)

こんにちは。



VBEのコードエディタの画面を出して、
次のコードを標準モジュールに貼り付けてください。

D列の1行目から、最後の行のひとつ上の行までを検査して、
最後の行のセルと同じデータが何件あるか数えるマクロです。
とくに、ソートをかける必要はありません。

あくまでも検査内容は「D列最後の行」にあるデータと比較して、
同じ内容のデータがD列に何個あるかです。
データ全体に、重複データがあるかどうかを検査するものではないので、
誤解しないようにしてください。

なお、「Const lngCol As Long = 4」の行が、D列で検査することを示しています。


Option Explicit

Sub test()
Const lngCol As Long = 4 'D列
Dim lngMaxRow As Long
Dim lngCount As Long
Dim i As Long
Dim strValue As String


'指定列のデータの最終行を取得
lngMaxRow = Cells(ActiveSheet.Rows.Count, lngCol).End(xlUp).Row
If lngMaxRow = 1 Then Exit Sub

'最終行の入力内容を取得
strValue = Cells(lngMaxRow, lngCol).Value

'1行目から最終-1行目まで、同じデータがあったらカウント
For i = 1 To lngMaxRow - 1
 If Cells(i, lngCol).Value = strValue Then
  lngCount = lngCount + 1
 End If
Next i

'カウント数の表示
Select Case lngCount
 Case Is = 0
  MsgBox "最終行のデータと同一データは、見つかりませんでした"
 Case Else
  MsgBox "最終行のデータと同一データは、 " & lngCount & " 件です。"
End Select

End Sub
    • good
    • 0
この回答へのお礼

こんなに早く返事がくるなんて大変助かります。
ありがとうございます。早速、やってみます。

お礼日時:2003/07/11 12:13

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