
いつもお世話になっております
先ほど質問した内容とおなじなのでずが、
IFを使用しないでSELECT CASE
の入れ子をためしまたが、
なにも結果が出ませんでした。
どこがまちがえているのか、
わかる方おしえてくれませんでしょうか
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim wf As Object
Dim r As Range
Dim a As Long, b As Long, c As Long
Set wf = WorksheetFunction
With Target
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "B"
Case Is <= 1000
Range("G3").Value = wf.CountIf(r, "<=1000")
Case Is <= 2000
Range("G4") = wf.CountIfs(r, ">1000", r, "<=2000")
Case Is <= 3000
Range("G5") = wf.CountIfs(r, ">2000", r, "<=3000")
End Select
Set wf = Nothing
End With
End Sub
No.3ベストアンサー
- 回答日時:
こんばんは
>IFを使用しないでSELECT CASE の入れ子をためしまたが
分岐条件を確認して整理してみましょう
Dim st As String
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
変数stはセルの値ではありませんよ
IF文で異なる条件で分岐する場合(書き方は色々ありますが)
If 条件1 Then
条件1の場合の処理
If 条件2 Then
条件1and条件2の場合の処理
End If
End If
ですよね
SELECT CASEでも同様ですね
ご質問のコードについての回答ですが #2様のご意見に賛成です
整理もし易くなると思います(stが要らないので)
"B"の視認性は コメントなどで追記すれば済みますからね
Set r = Range("B2", Cells(Rows.Count, 2).End(xlUp))
With Target
Select Case .Column '条件 列
Case 2 'B
Select Case .Value '条件 値
Case Is <= 1000
Range("G3").Value = wf.CountIf(r, "<=1000")
Case Is <= 2000
Range("G4") = wf.CountIfs(r, ">1000", r, "<=2000")
Case Is <= 3000
Range("G5") = wf.CountIfs(r, ">2000", r, "<=3000")
End Select
Case 3 'C
'C列処理
Case Else
'B列C列 以外の時の処理
End Select
No.2
- 回答日時:
>With Target
ターゲットのアドレスから列を調べるより、Columns で列番号を取得し利用した方が良いのでは?
No.1
- 回答日時:
このコードの問題は、使用する変数 "r" が設定されていないことです。
CountIfs関数で使用される範囲が定義されていないため、エラーが発生します。この問題を修正するには、次の手順を実行する必要があります。
変数 "r" を定義し、使用する範囲を設定します。
CountIf関数を使用する場合は、条件を指定する必要があります。現在のコードでは、条件が指定されていません。
また、Case "B" の場合、何も処理されていないため、必要に応じて追加のコードを記述する必要があります。
以下は、修正されたコードの例です。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim wf As Object
Dim r As Range
Dim a As Long, b As Long, c As Long
Set wf = WorksheetFunction
' 変数 "r" に使用する範囲を設定する
Set r = Range("B:B")
With Target
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "B"
' Case "B" の場合に必要な処理を記述する
' 例:Range("G1").Value = "Bが変更されました"
Case Else
' CountIfs関数で使用する条件を指定する
Dim criteria1 As String
Dim criteria2 As String
Select Case st
Case Is <= 1000
criteria1 = "<=1000"
criteria2 = ""
Case Is <= 2000
criteria1 = ">1000"
criteria2 = "<=2000"
Case Is <= 3000
criteria1 = ">2000"
criteria2 = "<=3000"
Case Else
criteria1 = ""
criteria2 = ""
End Select
' CountIfs関数を使用して値を設定する
If criteria1 <> "" And criteria2 <> "" Then
Range("G5").Value = wf.CountIfs(r, criteria1, r, criteria2)
ElseIf criteria1 <> "" Then
Range("G4").Value = wf.CountIf(r, criteria1)
End If
End Select
End With
Set wf = Nothing
End Sub
この修正後、入力範囲でB列のセルが変更されるたびに、条件に基づいてG3、G4、またはG5に値が設定されます。また、Case "B" の場合は、必要に応じて処理を追加できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) エクセル VBAについて 2 2022/05/16 16:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの変数をエクセルで表示
-
あああ..ああい..ああう とい...
-
日付け関数について
-
ある一定時間の最高値と最小値...
-
マクロにてセルに文字表示
-
VBAマクロにての絶対値
-
Excel UserForm の表示位置
-
複数のエクセルファイルとシー...
-
マクロ1があります。 A1のセル...
-
VBAマクロ実行時エラーの修正に...
-
特定の文字がある行以外を削除...
-
vba 2つの条件が一致したら...
-
VBA 別ブックからコピペしたい...
-
VBA シートをコピーする際に Co...
-
「段」と「行」の違いがよくわ...
-
Excelのフィルター後の一番上の...
-
【Excel関数】UNIQUE関数で"0"...
-
特定の色のついたセルを削除
-
エクセルで特定の文字列が入っ...
-
[Excel2003] マクロのユニコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAバーコード照合 バーコード...
-
VBAにて『元に戻すボタン』を作...
-
vbs 文字位置を中央に
-
select caseの入れ子
-
エクセルで選択したセルがディ...
-
配列を含んだ構造体への値設定...
-
エクセルを開いたらカウントし...
-
vb 配列の再検索について
-
すべての組合せをシートに出力...
-
ASPでバイナリ(ビッグエンディ...
-
「段」と「行」の違いがよくわ...
-
VBA シートをコピーする際に Co...
-
エクセルで離れた列を選択して...
-
VBAマクロ実行時エラーの修正に...
-
Excelで、あるセルの値に応じて...
-
別ブックをダイアログボックス...
-
Worksheets メソッドは失敗しま...
-
【Excel関数】UNIQUE関数で"0"...
-
マクロの「SaveAs」でエラーが...
おすすめ情報
申し訳ございません
コピペで使用しましたが、
表示されないです。