
いつもお世話になっております。
下記で質問した者です。
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自分の質問を「ご質問」と表現
-
ゼレンスキーの血液型はB型です...
-
電話をかけた時の第一声はどう...
-
みなさんに素朴な質問です。 常...
-
元彼が元カノと青姦したことあ...
-
「ご質問させてください」とい...
-
ベビーカーを押す人は地元以外...
-
質問に質問で返すのは失礼ですか?
-
禁止事項、ネチケット
-
LINEの最後に「ではでは」って...
-
【教えてGOO】は ネタを考える...
-
がっかりさせられる質問者
-
少し、日本語が変かもしれませ...
-
常識がない人が常識を知るには...
-
《教えてちゃん》と《教え魔》...
-
駅ホームのベンチが気持ちいい季節
-
教えてgooってムカつく回答多く...
-
高校生の女子と社会人の男性が...
-
自分の特定の質問や回答をGoogl...
-
100%回答の人
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自分の質問を「ご質問」と表現
-
ゼレンスキーの血液型はB型です...
-
質問に質問で返すのは失礼ですか?
-
元彼が元カノと青姦したことあ...
-
「ご質問があります」「ご回答...
-
みなさんに素朴な質問です。 常...
-
社内ネットワーク上にある他人...
-
男性同士で「彼女いる?」は失...
-
電話をかけた時の第一声はどう...
-
「質問させていただく」は「伺...
-
人が食事をしているそばでの歯...
-
高校生の女子と社会人の男性が...
-
「ごめんなさい」を古語で言うと?
-
「ご質問させてください」とい...
-
質問すると「なぜそんなことを...
-
LINEの最後に「ではでは」って...
-
教えてgoo と Yahoo知恵袋 どっ...
-
私は高校生ですが中学生の弟に...
-
常識って今からでも学べるもの...
-
知恵袋、教えて!goo、OKWAVE、...
おすすめ情報