ここから本文です

マクロ超初心者です。ひとつのセルに文字数制限をかけて、●行×▲列を超えると自動的...

fil********さん

2009/4/2715:34:18

マクロ超初心者です。ひとつのセルに文字数制限をかけて、●行×▲列を超えると自動的にセルの色が変わるというのを見たことがあります。

●行を超えたときはセルが黄色反転、▲列を超えたときは赤字に反転されるというものでした。これを再現したいのですが、どなたかマクロド素人に1から親切に教えてください。面倒くさいと思うので、500枚お礼を差し上げます。

補足chaliot_siva様、コメントありがとうございます。ひとつのセル内での表記を3行×2列、というように設定をする文字数制限です。入力規則からではセル内の文字の合計しか設定できないような気がします。

閲覧数:
2,076
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

cha********さん

編集あり2009/4/2815:17:10

補足ありがとうございました。少し勘違いしてましたね、すみません。

試しに書いてみました。
・ひとつのセル内で改行が3以上あった時、セルのフォントを赤にする。
・一行の文字が2文字以上の時、セルを黄色にする。(←ここの理解が違ってたらすみません)
・セルの内容を消したら書式設定もクリアする。

この書式を設定したブックを開いて、VBエディタの、『Microsoft Excel Objects』→『This WorkBook』ダブルクリック、
出てくるウィンドウに下記をコピペしてみてください。
(画像をUPできるとわかりやすいんですが)


'--ここから---

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim cchar As Integer '文字数
Dim cline As Integer '行数
On Error Resume Next

'改行が3つ以上の時、文字を赤にする
cline = 0

For i = 1 To Len(Target.Value)
If Mid(Target.Value, i, 1) = Chr(10) Then 'Chr(10)がセル内改行を表す。セル内の文字列から一字ずつ取り出して、改行ではないか比較
cline = cline + 1 '改行があったら数えてる変数に+1
End If
Next

'改行の数に合わせてフォント色を指定
Select Case cline
Case Is <= 3 '改行が3以下の時
Target.Font.ColorIndex = 0
Case Is > 3 '改行が3より多い時
Target.Font.ColorIndex = 3
End Select

'一行の文字数が2以上の時、セルを黄色にする

For j = 1 To Len(Target.Value)
If Mid(Target.Value, j, 1) = Chr(10) Or j = Len(Target.Value) Then '一字ずつ抜きだして改行又は最後の文字か確認
'文字列の終わりだったらセルの色を指定
Select Case cchar
Case Is <= 2
Target.Interior.ColorIndex = xlNone
Case Is > 2
Target.Interior.ColorIndex = 6
Exit For
End Select
cchar = 0
End If
cchar = cchar + 1
Next

'セル内が空に変更されたらすべての書式をクリア
If Target.Value = "" Then
Target.Interior.ColorIndex = xlNone
Target.Font.ColorIndex = 0
End If

End Sub

'--ここまで--
※注意※
WorkBook内のシート(セル)に変更があった時に実行されるマクロです。
その為、すべてを選択してDelete等をすると全セルをチェックするので、しばらく動かなくなってしまいます。

マクロ内のコメント(VBエディタでみると緑になる部分)は多めにしましたが、どれが何をやってるかとか質問あればきいてください。
ただし、私のマクロは独学なので、最善の方法は他にあるかもしれません…。
どうぞ参考までに。




>ひとつのセルに文字数制限するのは、マクロを使わなくても『データの入力規則』でできます。

>色を変えるのも条件付き書式でできそうな気がしますが、
>やりたい事がいまいちわからないので補足していたけると助かります。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

yas********さん

編集あり2009/4/2915:29:46

[VBA]~イベント+Split関数で行数をカウント~

<概要>
>▲列を超えたとき~
列は1行の文字列数と解釈する。

「特定のセル」が3行を超えた場合セルの背景色を黄色
「特定のセル」の1行の文字列が2文字を超えたら赤文字
※特定のセルはA1~A10とC列のセルとする。

<コード>~シートモジュールへ
''''
''''
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range, rng2 As Range
Dim Myrng As Range
Dim var1 As Variant
Dim i As Integer
Const rowset = 3
Const columnset = 2

Set rng1 = Union(Range("A1:A10"), Range("C:C"))
Set rng2 = Intersect(Target, rng1)
If rng2 Is Nothing Then Exit Sub

For Each Myrng In rng2
var1 = Split(Myrng.Value, Chr(10))
If UBound(var1) > rowset - 1 Then
Myrng.Interior.ColorIndex = 6
Else
Myrng.Interior.ColorIndex = xlNone
End If
For i = 0 To UBound(var1)
If Len(var1(i)) > columnset Then
Myrng.Font.ColorIndex = 3
Exit For
Else
Myrng.Font.ColorIndex = xlAutomatic
End If
Next
Next

End Sub
''''
''''


素人提案なので、ご参照程度にEXCEL2007


<作成中に感じた疑問点>
>(ひとつのセル内で)●行×▲列を超えると
>自動的にセルの色が変わるというのを見たことがある

質問文を読むと文字を入力した瞬間にイベントがトラップ
しているように見受けられます。
しかし調べる限りWorksheetオブジェクトには
Key関連のイベントが存在しません。

前途の疑問点から考えられることとしては、
ActiveXコントロールのテキストボックスとセルを
質問者が見間違えた可能性が考えられます。


<蛇足>
>どなたかマクロド素人に1から親切に教えてください。
chaliot_sivaさんの案も一読しましたが、本を買った方が
理解は早いかもなと思いました。

理由:
今回の質問をクリア(理解)するには、イベントの前に"変数"や
"変数の型"の理解が必要になると思われます。
※私の案の場合は、"配列"の理解も必要。
上を理解するには、ピンポイントの学習よりも
ステップアップ(基礎から構築)していく学習になるので、以下のようなサイトから
学習するのは、ややこしいだろうという判断。

<参考資料>

ステートメント>>
Dim ステートメント:
http://www.officetanaka.net/excel/vba/statement/Dim.htm

Const ステートメント:
http://www.officetanaka.net/excel/vba/statement/Const.htm

Set ステートメント:
http://www.officetanaka.net/excel/vba/statement/Set.htm

If...Then...Else ステートメント:
http://www.officetanaka.net/excel/vba/statement/IfThenElse.htm

繰り返し処理一式>
http://home.att.ne.jp/zeta/gen/excel/c04p21.htm
http://www.bekkoame.ne.jp/~poetlabo/COMP/Excel/VBALEC/loop.htm

>>>For Each...Next ステートメント:
http://www.officetanaka.net/excel/vba/statement/ForEachNext.htm

>>>For...Next ステートメント:
http://www.officetanaka.net/excel/vba/statement/ForNext.htm

メソッド>>
Unionメソッド:
http://www.moug.net/tech/exvba/0050093.htm

Intersectメソッド:
http://www.moug.net/tech/exvba/0050074.htm
http://officetanaka.net/excel/vba/tips/tips118.htm

プロパティ>>
Interior.ColorIndex プロパティ:
Font.ColorIndex プロパティ:


関数>>
Split関数:
http://www.officetanaka.net/excel/vba/function/Split.htm
http://www.officetanaka.net/excel/vba/tips/tips62.htm

UBound関数:
http://www.officetanaka.net/excel/vba/function/UBound.htm

キーワード>>
Nothingキーワード?:

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる