No.2ベストアンサー
- 回答日時:
「If r.Offset(0, -1).Value = 0 Then」の意味は、goda_nobitaさんの理解で正しいです。
でも、BY列はJ列から67番目ですよ!!
しかし、「B列の1列前」なら分かりやすいので問題ないですが、「J列の67列後」では、何列か数えるのが面倒くさいです。そこで、次のようにすることをお勧めします。
If Cells(r.Row, "BY").Value = 0 Then
それから、「Range("B:B")」が2ヶ所あると思いますが、ここも直してますよね?
さらに、後出しで申し訳ないのですが、もうちょっと改善すべきところがあったので、コードを再提示しました。興味があったら改良点を確認して、何故、こうしたか考えてみて下さい。前回のコードを使っていれば、いづれ気づくことになると思いますが、その時に後悔しても遅いので…。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
If Intersect(Target, Range("J:J"), Me.UsedRange) Is Nothing Then Exit Sub
On Error Resume Next
For Each r In Intersect(Target, Range("J:J"), Me.UsedRange)
If Cells(r.Row, "BY").Value = 0 Then
r.Validation.InCellDropdown = True
r.Validation.ShowError = True
Else
r.Validation.InCellDropdown = False
r.Validation.ShowError = False
End If
Next r
End Sub
ママチャリ様
ありがとうございます。
ありがとうございました。
上手く作動しました。
「Range("B:B")」が2ヶ所あると思いますが、ここも直してますよね?
→ 直してました。
でも、BY列はJ列から67番目ですよ!!
→ vlookup を使う時のカウント(当該列も含める)と混同してました。
新しいコードについては、後程、考えてみます。
本当に助かりました。
ありがとうございます。
少し早いですが、よいお年を!!!
No.1
- 回答日時:
ご要望の要件を満たすには、動的に入力規則を変更する必要があると思います(わたしの知識の範囲では…)。
よって、マクロになってしまいます。次のマクロを該当シートのシートモジュールに張り付けて下さい。
ちなみに、このマクロは設定済みの入力規則を動的に変更するだけです。よって、該当セルには通常通り、入力規則が設定されていなければなりません。
それから、1点、気になることがあります。
A列が1で、B列に任意の値が入力された後に、A列を0に変更した場合、B列は任意の値が入力されたままで特にエラーにはなりません。エラーはB列を変更しようとしたときに検知されることになります。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
Dim r As Range
On Error Resume Next
For Each r In Intersect(Target, Range("B:B"))
If r.Offset(0, -1).Value = 0 Then
r.Validation.InCellDropdown = True
r.Validation.ShowError = True
Else
r.Validation.InCellDropdown = False
r.Validation.ShowError = False
End If
Next r
End Sub
ママチャリ様
早速のご回答ありがとうございます。
補足にて教えて頂きたい点があるのですが・・・
If r.Offset(0, -1).Value = 0 Then
→ どのような意味合いでしょうか?
実際には、J列にて選択もしくは入力を行いたく
また、その為の判断は、A列でなくBY列に文字としてあります。
教えて頂いたマクロの上記部分の
0=B列
-1=A列
と推測し、
If r.Offset(0, 68).Value = "○○" Then
68は、BY列がJ列から68番目
としてみましたが、うまく作動致しません。
マクロの知識がありませんので見当違いの事を行っているかと
思いますが、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) データ入力規則リスト 空白を無視 3 2022/07/13 15:11
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) コンボボックス及びリストボックスを5段階連動させる方法をご存知の方ご教授頂きたいです。 Excelで 3 2022/04/03 21:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
すべてのシートを選択してエク...
-
エクセル。ブック内検索で重複...
-
Excel VBA 答えが0になってし...
-
Excelのデータが重いのはなぜで...
-
1点の辻の字に変換したいがエク...
-
「未使用」と「不使用」ってど...
-
ローマ字入力で「トゥ」を入力...
-
Excelでエラー(#N/Aなど)値を...
-
バッチファイルでキー操作を行う。
-
ExcelでVBAを使用した際に、『...
-
Word文書に、チェックマーク(...
-
Eエクセルの計算方法で空欄を0...
-
SUM関数の範囲に#N/Aが...
-
自動改札のエラーって…
-
エクセルからアクセスにインポ...
-
もしセルが"#N/A"なら~をする...
-
VBAで「致命的なエラー」が出ま...
-
PPTのスライド表示の画面の位置...
-
excelで小数点0を表示させる方法
-
ACCESS VBA でのエラー解決の根...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
すべてのシートを選択してエク...
-
エクセルで時刻を自動入力する方法
-
Excelのデータが重いのはなぜで...
-
エクセル。ブック内検索で重複...
-
Excel VBA 答えが0になってし...
-
EXCEL VBA 区切り位置のプログ...
-
合計が0の行を削除
-
エクセルで、「袋詰め問題」を...
-
excelで下一桁を選択する方法
-
複数のスプレットシートで入力...
-
エクセルで30日以内に同内容の...
-
A列を検索し一致した行を表示。...
-
エクセルマクロについて データ...
-
スプレッドシートで、指定した...
-
エクセルの中の漢字を一度にカ...
-
Excelの関数についてしつもんで...
-
エクセルで隣のセルと同じ数字...
-
VBAに関する質問です。
-
エクセルの入力 エンターキーで...
-
エクセルで人名を50音順に表...
おすすめ情報
該当シートには、下記マクロが設定済みです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, rng As Range
Set rng = Intersect(Target, Columns(1))
If Not rng Is Nothing Then
If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect
End If
For Each r In rng
If r.Value = "確定" Or r.Value = "キャンセル" Then
(省略)
これが上手く作動しない理由でしょうか?
「R」の2重定義?
以上、わかりにくく申し訳ございませんがよろしくお願い致します。