[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一定範囲内にあるテキストボックスの数を数えるには』(あこ)
ある一定の範囲内に存在するテキストボックスの数を、できれば自動で算出したいのですが、これに該当する数式はありますか。
もしあれば使用法も合わせて教えてください。よろしくお願いします。
Windows2000、Excel2000
マクロを使わないと無理かもしれませんね。 その一定の範囲とはどのような範囲でしょうか。 例えば、Sheet1の全部とか、Sheet1のA1からH30とか・・・ (川野鮎太郎)
A1からZ10、AA1からAZ10、BA1からBZ10、・・・
A11からZ20、AA11からAZ20、BA11からBZ20、・・・
といった感じです。
もっと簡単な方法があるのかも知れませんが、σ(^_^;)にはこれが限界です_/ ̄|○ il||li ユーザー定義関数だとこんな感じになりました。
使い方は、下記のコードを標準モジュールに貼り付けて、 普通の関数のように使ってください。 =MyTCOUNT(A1:Z10) ←このように。 ※ただし、範囲内にテキストボックスの左上角が入っているかどうかでカウントされます。
Public Function MyTCOUNT(Target As Range) As Long Dim MyCount As Long MyRC = Target.Rows.Count MyCC = Target.Columns.Count MyTop = Target.Top MyLeft = Target.Left MyBottom = Cells(Target.Row + MyRC - 1, Target.Column).Top + Cells(Target.Row + MyRC - 1, Target.Column).Height MyRight = Cells(Target.Row, Target.Column + MyCC - 1).Left + Cells(Target.Row, Target.Column + MyCC - 1).Width
For Each MyT In ActiveSheet.Shapes If Left(MyT.Name, 4) = "Text" Then If MyT.Left > MyLeft And MyT.Left < MyRight And MyT.Top > MyTop And MyT.Top < MyBottom Then MyCount = MyCount + 1 End If End If Next MyT MyTCOUNT = MyCount End Function
これから下は、セル範囲を選択してマクロを実行した場合です。 メッセージボックスにカウント数が表示されます。 同じく標準モジュールに貼り付けてください。 Sub Test() Dim Target As Range Dim MyCount As Long Set Target = Selection MyRC = Target.Rows.Count MyCC = Target.Columns.Count MyTop = Target.Top MyLeft = Target.Left MyBottom = Cells(Target.Row + MyRC - 1, Target.Column).Top + Cells(Target.Row + MyRC - 1, Target.Column).Height MyRight = Cells(Target.Row, Target.Column + MyCC - 1).Left + Cells(Target.Row, Target.Column + MyCC - 1).Width For Each MyT In ActiveSheet.Shapes If Left(MyT.Name, 4) = "Text" Then If MyT.Left > MyLeft And MyT.Left < MyRight And MyT.Top > MyTop And MyT.Top < MyBottom Then MyCount = MyCount + 1 End If End If Next MyT MsgBox "TextBoxのカウントは" & MyCount & "です。" End Sub
(川野鮎太郎)
久しぶりにユーザー定義関数に挑戦してみましたが、 うまくできてるかなぁ。 Function TEXTBOXCOUNT(ByVal Target As Range) As Long Dim i As Long Dim Obj As Shape Dim MyRng As Range Application.Volatile For Each Obj In Target.Parent.Shapes Set MyRng = Application.Intersect(Target, Range(Obj.TopLeftCell, Obj.BottomRightCell)) If Not MyRng Is Nothing And Obj.Type = msoTextBox Then i = i + 1 End If Next Obj
TEXTBOXCOUNT = i End Function 標準モジュールへ上記コードを張り付け。 セルへなどと入力して使用。 (みやほりん)
(・0・*)ホ,(゜0゜*)ホ--ッッ!!! さすが!!! msoTextBox ←は、何かプロパティで判断できるとは思ったけど、面倒くさかったでしゅ(^_^A; 関心したのは、私と逆の発想でテキストボックスの位置がセル範囲に入っているかで判断してある部分でし(^_^A; 勉強になりましたペコリ(o_ _)o)) (川野鮎太郎)
みやほりん様からいただいたコードを訳もわからないまま張り付けたのですが、大成功です。
ありがとうございます。
さらに質問なのですが、テキストボックスを動かした場合、セル「=textboxcount(A1:Z10)」の数字がかわる方法はありますか?
ボタンは何のボタンでしょうか。 以下のように変えたらどうなりますか。 ↓ テキストボックスの場合 If Not MyRng Is Nothing And Obj.Type = msoTextBox Then
↓コントロールツールボックスのコマンドボタンの場合 If Not MyRng Is Nothing And Obj.Type = msoOLEControlObject Then
↓フォームのボタンの場合 If Not MyRng Is Nothing And Obj.Type = msoFormControl Then
※移動したりしたときの再計算は F9(ファンクションキー)を押したら計算されます。
(川野鮎太郎)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.