いつもお世話になっております。
下記で質問した者です。
https://oshiete.goo.ne.jp/qa/13095593.html
質問カテゴリーをVBAに絞るため新たに質問させていただきました。
=SUMPRODUCT(1/COUNTIF(A1:A13,A1:A13&""))-1
上記の関数をVBAの構文で表すことは可能でしょうか?
重ねて関数にお詳しい方いらっしゃいましたらご教示の程よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
>VBA構文のWorksheet_Changeイベントをこちらの構文に組み込むことは可能でしょうか?
該当するシートモジュールに登録してください。
結果はH8セルに出力されます。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim dicT As Object
Dim maxrow As Long
Dim wrow As Long
If Target.Column <> 4 Then Exit Sub
Application.EnableEvents = False
Set dicT = CreateObject("Scripting.Dictionary")
Set ws = ActiveSheet
maxrow = ws.Cells(Rows.Count, "D").End(xlUp).Row 'D列の最大行取得
For wrow = 10 To maxrow
If ws.Cells(wrow, "D").Value <> "" Then
dicT(ws.Cells(wrow, "D").Value) = True
End If
Next
ws.Cells(8, "H").Value = dicT.Count
Application.EnableEvents = True
End Sub
tatsumaru77様、VBAの構築ありがとうございます。
私の認識間違いでselection changeの反映に修正し処理が行われました。
活用させていただきます。
この度はありがとうございました。
No.4
- 回答日時:
No2です。
以下のマクロを標準モジュールに登録してください。
D10セルから下方向の末尾までの重複無の件数をD9セルに表示します。
Option Explicit
Public Sub 件数カウント()
Dim ws As Worksheet
Dim dicT As Object
Dim maxrow As Long
Dim wrow As Long
Set dicT = CreateObject("Scripting.Dictionary")
Set ws = ActiveSheet
maxrow = ws.Cells(Rows.Count, "D").End(xlUp).Row 'D列の最大行取得
For wrow = 10 To maxrow
If ws.Cells(wrow, "D").Value <> "" Then
dicT(ws.Cells(wrow, "D").Value) = True
End If
Next
ws.Cells(9, "D").Value = dicT.Count
End Sub
tatsumaru77様、VBAの構築ありがとうございます。
問題なく反映できました。
因みにD9セルではなく離れた位置のH8セルに反映させたい場合は
ws.Cells(9, "D").Value = dicT.Count
こちらを修正する形でしょうか?
また色々と調べてる中でふと思いついたことがございまして、不躾なお願いで大変申し訳ございませんが、VBA構文のWorksheet_Changeイベントをこちらの構文に組み込むことは可能でしょうか?
重ねお願い申し上げます。
No.3
- 回答日時:
No1です。
どのような使い方をなさりたいのか不明のままですが、ユーザー定義関数として作成してみました。
ご参考にでもなれば。
通常なら、1列(あるいは1行)での範囲で重複の削除を行うことが多いと思いますが、対象をセル範囲、あるいは複数セル範囲でも可能なようにしてあります。
算出方法は、No1の3番目のDictionaryを用いる方法で行っています。
(当方、365環境ではないため、UNIQUE関数が使えませんので・・)
使い方は通常の関数と同じで、
=uniqueCount(A1:B10)
=uniqueCount(A2:A10, C10:C20)
といった感じです。
事前に標準モジュールに以下をコピペしておきます。
Function uniqueCount(ParamArray r() As Variant) As Long
Dim dic, cv, c
Dim i As Long
Set dic = CreateObject("Scripting.Dictionary")
For i = LBound(r) To UBound(r)
If TypeName(r(i)) = "Range" Then
cv = r(i).Value
If Not IsArray(cv) Then cv = Array(cv)
For Each c In cv
If c <> "" Then
If Not dic.Exists(c) Then dic.add c, 1
End If
Next c
End If
Next i
uniqueCount = UBound(dic.keys) + 1
End Function
No.1
- 回答日時:
こんにちは
VBAで行うにしてもエクセルの機能を利用する方が簡単です。
365環境ならUNIQUE関数が使えるので、
WorksheetFunction.Unique(Range)
で得られた配列の数を数えれば良いでしょう。
https://excel-vba.work/2021/05/02/%E3%80%90vba%E …
Uniqueが使えないなら、作業列を利用して「重複を除く」のが簡単です
https://docs.microsoft.com/ja-jp/office/vba/api/ …
作業列などは用いずに行いたいのなら、Dictionaryを利用して順に登録し、最後にkeysの数を数えるのが一般的でしょうか。
https://docs.microsoft.com/ja-jp/office/vba/lang …
Dictionaryも使わないなら、一旦値を配列等に入れて、ループで重複の2個め以降を削除してから、残った値の数を数えるというプリミティブな方法でも可能と思います。
※ 最終形を、ユーザ定義関数になさりたいのか、プロシージャにしたいのかよくわからないので、方法論だけの回答です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 重複したデータ(空白は除く)のVBA表記について 4 2022/08/15 07:28
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Excel(エクセル) 特定の文字の合計値(空白を無視+可変に対応)を求める関数について 1 2022/08/18 10:51
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Visual Basic(VBA) VBAの繰り返し処理表記と複数の処置条件について 1 2023/01/23 20:08
- Excel(エクセル) 以下の条件に合う関数を教えてください。 1 2022/10/01 13:38
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自分の質問を「ご質問」と表現
-
マイページの出し方がわかりま...
-
「ごめんなさい」を古語で言うと?
-
元彼が元カノと青姦したことあ...
-
「質問させていただく」は「伺...
-
回答で、「分かりません」とい...
-
「ご質問があります」「ご回答...
-
みなさんに素朴な質問です。 常...
-
「上端」「下端」の読み方は?
-
勃起時のち◯こ 16センチ 周囲13...
-
教えてgoo と Yahoo知恵袋 どっ...
-
質問に質問で返すのは失礼ですか?
-
1人だけを仲間外れにする方法な...
-
自作自演の見分け方
-
質問すると「なぜそんなことを...
-
電話をかけた時の第一声はどう...
-
聞く気がないなら質問するな?...
-
知恵袋を利用停止中ですが、そ...
-
更問
-
男性に質問!同じ身長で、太り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自分の質問を「ご質問」と表現
-
マイページの出し方がわかりま...
-
勃起時のち◯こ 16センチ 周囲13...
-
質問に質問で返すのは失礼ですか?
-
「ご質問があります」「ご回答...
-
「質問させていただく」は「伺...
-
教えてgoo と Yahoo知恵袋 どっ...
-
元彼が元カノと青姦したことあ...
-
「ごめんなさい」を古語で言うと?
-
みなさんに素朴な質問です。 常...
-
質問すると「なぜそんなことを...
-
「上端」「下端」の読み方は?
-
高校生の女子と社会人の男性が...
-
自作自演の見分け方
-
成人コミックってどこで買ってる?
-
あなたにとっての「日差し」と...
-
教えてgooは質問削除できないん...
-
久々に雪かきしました。朝の5時...
-
私は高校生ですが中学生の弟に...
-
人が食事をしているそばでの歯...
おすすめ情報