[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaで入力規則のリスト・・・。』(miu)
いつも大変お世話様になっております。
質問 A列で入力規則のリスト選択ができるようになってるのですが 選択して入力された文字数が6文字以下はフォントサイズを11 7文字以上はフォントサイズ8で文字を折り返して全体を表示するように VBAで設定しようと下記の様なプログラムを作ってみたのですが うまくいきません。 文字をキーボードから打ち込んで入力するとうまくいくのですが リストからの選択だとうまくいきません。 良い方法があったらおしえてください。 宜しくお願い致します。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long r = Target.Row
If Len(Cells(r, 1)) <= 6 Then Cells(r, 1).Font.Size = 11
ElseIf Len(Cells(r, 1)) >= 7 Then With Cells(r, 1) .Font.Size = 8 .WrapText = True End With End If
End Sub
どのようにうまくいかないのですか? イベントは発生していますか?
(INA)
失礼します。 試したら特に問題は無いようでしたけど、以下ではどうですか。 If Len(Cells(r, 1)) <= 6 Then With Cells(r, 1) .Font.Size = 11 .WrapText = False End With Else With Cells(r, 1) .Font.Size = 8 .WrapText = True End With End If
※7文字や8文字ぐらいのときは、フォントが小さくなるので折り返しはしないと思いますが。
(川野鮎太郎)
(miu) すみません、自分の条件を簡略化して質問させていただいたのですが この質問内容だとうまくいっちゃうんですね。。。 実は、以前ここで教えて頂きました入力規則のリスト設定
[[20041206151442]]『入力規則のリストに自動で追加したい』(miu)
がされてまして下記のようなプログラムになってます。 この場合だと選択しても何も変わらないのです。 下記にそのプログラムを書き込んでみます。 z列にリスト候補がありまして、K列(L列と結合してます。)でリスト選択して その際にフォントの変更をしたいです。 Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRow As Long Dim MyRange As Range Dim MyC As Double Dim MyCount As Long Dim r11 As Long select case target.column Case 11, 12
Select Case Target.Row
Case 5 To 34, 44 To 73, 83 To 112, 122 To 151
'入力規則のリスト追加(m列が選択欄、z列がリスト範囲欄) MyRow = Range("z1").End(xlDown).Row 'z1の最下行の行番号をMyRowに代入 Set MyRange = Range("z1").Resize(MyRow, 1) 'ba1セルをMyRow行だけ範囲を広げたものをMyRangeに代入 On Error GoTo ErrorHandler 'エラーが出たら、ErrorHandler:(エラー処理ルーチン)から処理を始める MyC = Application.Match(Target.Value, MyRange, 0) 'VBAでワークシート関数を使うために、Matchの前にApplication.を付ける。 Exit Sub 'Match関数でエラーが出ないってことは、k列に入力した値がz列にあるので処理を抜ける
ErrorHandler: '上で書いたようにMatch関数でエラーが出るってことは、k列に入力した値がz列に無いので以下の処理を行う Cells(MyRow + 1, 26).Value = Target.Value 'z列の最終行の1行下に入力した値を入れる
r11 = Target.Row
If Len(Cells(r11, 11)) <= 6 Then Cells(r11, 11).Font.Size = 11
ElseIf Len(Cells(r11, 11)) >= 7 Then With Cells(r11, 11) .Font.Size = 8 .WrapText = True End With End If End Select End Select end sub
原因が判りました。 Z列に該当文字がある場合はExit Subで処理を抜けているからです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRow As Long Dim MyRange As Range Dim MyC As Double Dim MyCount As Long Dim r11 As Long Const MyCol As Long = 11 '11列目(K列) r11 = Target.Row Select Case Target.Column Case 11, 12 Select Case Target.Row Case 5 To 34, 44 To 73, 83 To 112, 122 To 151 '入力規則のリスト追加(m列が選択欄、z列がリスト範囲欄) MyRow = Range("z1").End(xlDown).Row 'z1の最下行の行番号をMyRowに代入 Set MyRange = Range("z1").Resize(MyRow, 1) 'ba1セルをMyRow行だけ範囲を広げたものをMyRangeに代入 On Error GoTo ErrorHandler 'エラーが出たら、ErrorHandler:(エラー処理ルーチン)から処理を始める MyC = Application.Match(Target.Value, MyRange, 0) 'VBAでワークシート関数を使うために、Matchの前にApplication.を付ける。 GoTo MyFont 'Exit Sub 'Match関数でエラーが出ないってことは、k列に入力した値がz列にあるので処理を抜ける ErrorHandler: '上で書いたようにMatch関数でエラーが出るってことは、k列に入力した値がz列に無いので以下の処理を行う Cells(MyRow + 1, 26).Value = Target.Value 'z列の最終行の1行下に入力した値を入れる End Select End Select MyFont: With Target If Len(Target.Value) <= 6 Then .Font.Size = 11 .WrapText = False Else .Font.Size = 8 .WrapText = True End If End With End Sub
(川野鮎太郎)
川野さん、出来ました。ありがとうございます。 ただ、Z列、K列で文字を削除した場合 If Len(Target.Value) <= 6 Thenで実行時エラー13、型が一致しませんとでてしまいます。 どこを直せばいいでしょうか?
※すみません、この後のレスは少し遅れてしまいます。。。 (miu)
Select Caseではなく、IFで抜けるようにしました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRow As Long Dim MyRange As Range Dim MyC As Double If Application.Intersect(Target, _ Range("K5:L34,K44:L73,K83:L112,K122:L151")) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub If IsEmpty(Target.Value) And IsEmpty(Target.Offset(0, 1).Value) Then Exit Sub '入力規則のリスト追加(K列が選択欄、Z列がリスト範囲欄) MyRow = Range("z1").End(xlDown).Row 'Z1の最下行の行番号をMyRowに代入 Set MyRange = Range("Z1").Resize(MyRow, 1) 'Z1セルをMyRow行だけ範囲を広げたものをMyRangeに代入 On Error GoTo ErrorHandler 'エラーが出たら、ErrorHandler:(エラー処理ルーチン)から処理を始める MyC = Application.Match(Target.Value, MyRange, 0) 'VBAでワークシート関数を使うために、Matchの前にApplication.を付ける。 GoTo MyFont ErrorHandler: 'Match関数でエラーが出るってことは、K列に入力した値がZ列に無いので以下の処理を行う Cells(MyRow + 1, 26).Value = Target.Value 'z列の最終行の1行下に入力した値を入れる MyFont: With Target If Len(Target.Value) <= 6 Then .Font.Size = 11 .WrapText = False Else .Font.Size = 8 .WrapText = True End If End With End Sub
(川野鮎太郎)
お返事大変遅くなりまして申し訳ありませんでした。 早速試してみました所、うまく作動しました。 いつも本当に助かっております。 ありがとうございました。
ちなみに、selectからifにしたことにより、どう変わったのかいまいちわからなかったのですが またご説明いただいても宜しいでしょうか?(いつも、いつもすみません。。。) 宜しくお願いします。 (miu)
Select Case でやっても良かったんですけど、対象外の列を条件分岐するのには 今回の場合IFの方が分岐させやすかったからです。(^_^A;
(川野鮎太郎)
わかりました。ありがとうございます。m(__)m (miu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.