[[20041222170123]] 『一定範囲内にあるテキストボックスの数を数えるに』(あこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一定範囲内にあるテキストボックスの数を数えるには』(あこ)

ある一定の範囲内に存在するテキストボックスの数を、できれば自動で算出したいのですが、これに該当する数式はありますか。
もしあれば使用法も合わせて教えてください。よろしくお願いします。

Windows2000、Excel2000


 マクロを使わないと無理かもしれませんね。
 その一定の範囲とはどのような範囲でしょうか。
 例えば、Sheet1の全部とか、Sheet1のA1からH30とか・・・
 (川野鮎太郎)


ありがとうございます。
算出したいのは1シート内に位置する約20の範囲で、

 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.