Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7337 / 13644 ツリー ←次へ | 前へ→

【39586】折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 8:56 質問[未読]
【39604】Re:折りたたみをきっかけにマクロ実行 sin 06/6/27(火) 13:55 発言[未読]
【39607】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 14:18 お礼[未読]
【39625】Re:折りたたみをきっかけにマクロ実行 sin 06/6/27(火) 18:10 発言[未読]
【39605】Re:折りたたみをきっかけにマクロ実行 Jaka 06/6/27(火) 14:03 発言[未読]
【39608】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 14:29 発言[未読]
【39609】Re:折りたたみをきっかけにマクロ実行 Jaka 06/6/27(火) 14:40 発言[未読]
【39610】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 14:45 お礼[未読]
【39627】Re:折りたたみをきっかけにマクロ実行 sin 06/6/27(火) 18:50 発言[未読]
【39628】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 18:55 お礼[未読]
【39629】Re:折りたたみをきっかけにマクロ実行 ichinose 06/6/27(火) 19:07 発言[未読]
【39631】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/27(火) 23:02 お礼[未読]
【39642】Re:折りたたみをきっかけにマクロ実行 ichinose 06/6/28(水) 7:23 発言[未読]
【39646】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/28(水) 9:10 発言[未読]
【39691】Re:折りたたみをきっかけにマクロ実行 ichinose 06/6/29(木) 10:24 発言[未読]
【39694】Re:折りたたみをきっかけにマクロ実行 ひげくま 06/6/29(木) 10:43 お礼[未読]
【39699】Re:折りたたみをきっかけにマクロ実行 ichinose 06/6/29(木) 11:53 発言[未読]
【39734】Re:折りたたみをきっかけにマクロ実行 ichinose 06/6/30(金) 7:18 発言[未読]

【39586】折りたたみをきっかけにマクロ実行
質問  ひげくま  - 06/6/27(火) 8:56 -

引用なし
パスワード
   こんにちは。

複数行をグループ化した状態で、折りたたんだり展開したときに、マクロを実行したいと思っているのですが、何か良い方法はないでしょうか。

シートモジュールで、以下のようにして試してみたのですが、折りたたんでも展開しても、何も反応しませんでした。

Private Sub Worksheet_Activate()
  MsgBox "a"
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  MsgBox "b"
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  MsgBox "c"
End Sub

Private Sub Worksheet_Calculate()
  MsgBox "d"
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "e"
End Sub

Private Sub Worksheet_Deactivate()
  MsgBox "f"
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  MsgBox "g"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "h"
End Sub

よろしくお願いします。

【39604】Re:折りたたみをきっかけにマクロ実行
発言  sin  - 06/6/27(火) 13:55 -

引用なし
パスワード
   ▼ひげくま さん:
こんにちは。

>複数行をグループ化した状態で、折りたたんだり展開したときに、マクロを実行したいと思っているのですが、何か良い方法はないでしょうか。
グループ化機能を使わないと駄目ですか?
もしコマンドボタンで処理する方法で良ければ、

Private Sub CommandButton1_Click()
  With Cells.Rows("1:3").EntireRow
    If .Hidden = False Then
      .Hidden = True

      MsgBox "折りたたむ時の処理"

    Else
      .Hidden = False

      MsgBox "展開する時の処理"

    End If
  End With

End Sub

【39605】Re:折りたたみをきっかけにマクロ実行
発言  Jaka  - 06/6/27(火) 14:03 -

引用なし
パスワード
   四六時中監視するのもなんだと思って、こんな風にしてみたけれど....。
細かいことは何も考えてません。

シートモジュール

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address(0, 0) = "10:15" Then
  Application.OnTime Now(), "監視"
Else
  Flg = True
  CNT = 0
End If
End Sub

標準モジュール

Public Flg As Boolean, CNT As Long

Sub 監視()
  Do
    If Rows("10:15").EntireRow.Hidden = True Then
     CNT = CNT + 1
     If CNT < 2 Then
       MsgBox "10:15非表示"
     End If
    End If
    DoEvents
  Loop Until Flg = True
End Sub

【39607】Re:折りたたみをきっかけにマクロ実行
お礼  ひげくま  - 06/6/27(火) 14:18 -

引用なし
パスワード
   ▼sin さん:
ありがとうございます。

>グループ化機能を使わないと駄目ですか?
>もしコマンドボタンで処理する方法で良ければ、

なるほど!!!
グループ化機能の折りたたみや展開を、マクロで擬似的にやっちゃうということですか。
そういう発想が全然ありませんでした。

対象となるグループの数が決まっていないので、コマンドボタンは使えない(上手く使いこなせない)のですが、Selection_Changeで対応できそうです。

ありがとうございました。

ちなみに、

>      .Hidden = True

これを使うのと、行の高さを0にするのとでは、見た目は同じになると思いますが、内部的に何か変わってくるのでしょうか?
たいして変わらないのであれば、Hiddenプロパティを使おうと思います。

【39608】Re:折りたたみをきっかけにマクロ実行
発言  ひげくま  - 06/6/27(火) 14:29 -

引用なし
パスワード
   ▼Jaka さん:
ありがとうございます。

>四六時中監視するのもなんだと思って、こんな風にしてみたけれど....。
>細かいことは何も考えてません。

勉強不足で、OnTimeの使い方がよく解っていないのですが、その前に、監視する必要性がいまいちよく解っていません。

実際には、3行ごとのグループがいくつかあって、そのグループの1行目の最左列のセルをクリックしたら、2行目と3行目の状態を見て、折りたたまれていたら展開する、展開されていたら折りたたむ、というものを求めています。
この場合でしたら、監視しなくても済むんですよね?それとも、やはり監視する必要はありますか?

【39609】Re:折りたたみをきっかけにマクロ実行
発言  Jaka  - 06/6/27(火) 14:40 -

引用なし
パスワード
   ▼ひげくま さん:
>勉強不足で、OnTimeの使い方がよく解っていないのですが、その前に、監視する必要性がいまいちよく解っていません。
イベントが用意されていないから、自分でイベントを作るか、似たようなものでイベントを代用するかしかありません。
どちらも四六時中監視するような感じになるんじゃないかと思います。

【39610】Re:折りたたみをきっかけにマクロ実行
お礼  ひげくま  - 06/6/27(火) 14:45 -

引用なし
パスワード
   ▼Jaka さん:
>イベントが用意されていないから、自分でイベントを作るか、似たようなものでイベントを代用するかしかありません。
>どちらも四六時中監視するような感じになるんじゃないかと思います。

とりあえずSelection_Changeイベントで何とかしようと思っています。
どうもありがとうございました。

【39625】Re:折りたたみをきっかけにマクロ実行
発言  sin  - 06/6/27(火) 18:10 -

引用なし
パスワード
   ▼ひげくま さん:
こんにちは。

>ちなみに、
>
>>      .Hidden = True
>
>これを使うのと、行の高さを0にするのとでは、見た目は同じになると思いますが、内部的に何か変わってくるのでしょうか?
>たいして変わらないのであれば、Hiddenプロパティを使おうと思います。
ひげくま さんの言う『グループ化』は、
「データ」メニューの「グループとアウトラインの設定」から行うものですよね?
そうであればたぶん同じだと思います。
グループと同じ範囲を
  Cells.Rows(範囲).EntireRow.Hidden = True
して、グループのボタンで展開できるので。

【39627】Re:折りたたみをきっかけにマクロ実行
発言  sin  - 06/6/27(火) 18:50 -

引用なし
パスワード
   ▼ひげくま さん:
こんにちは。

>実際には、3行ごとのグループがいくつかあって、そのグループの1行目の最左列のセルをクリックしたら、2行目と3行目の状態を見て、折りたたまれていたら展開する、展開されていたら折りたたむ、というものを求めています。
>この場合でしたら、監視しなくても済むんですよね?それとも、やはり監視する必要はありますか?
最初の質問とはだいぶ違うような気がしますが・・・
対象のセルがA1、A4、A7・・・、と3行ごとなら


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
    If .Column = 1 And .Row Mod 3 = 1 Then
      TRow = .Row + 1 & ":" & .Row + 2
      With Cells.Rows(TRow).EntireRow
        If .Hidden = False Then
          .Hidden = True
        Else
          .Hidden = False
        End If
      End With
    End If
  End With
End Sub

【39628】Re:折りたたみをきっかけにマクロ実行
お礼  ひげくま  - 06/6/27(火) 18:55 -

引用なし
パスワード
   ▼sin さん:
>最初の質問とはだいぶ違うような気がしますが・・・

ありがとうございます。
似たようなコードを組んでいました。

ちなみに、Rows(xxx).EntireRow.Hidden のところを、Rows(xxx).Hidden としても動作しています。

【39629】Re:折りたたみをきっかけにマクロ実行
発言  ichinose  - 06/6/27(火) 19:07 -

引用なし
パスワード
   ▼ひげくま さん:
みなさん、こんばんは。

>
>複数行をグループ化した状態で、折りたたんだり展開したときに、マクロを実行したいと思っているのですが、何か良い方法はないでしょうか。

こんな方法を見つけました。


まず、新規ブックで試してみてください。

新規ブックのSheet1というシートにグループの設定を行いましょう。

・シートの10行から、20行を選択した状態で
 「データ」---「データとアウトラインの設定」--「グループ化」と
 クリックしてください。これで10行目から、20行目がグループ化できました。

・試しに左側上の「1」をクリックで「10行から20行」が非表示になり、
 「2」を」クリックで表示されますね?

・ここから、準備です。

・名前の定義を行います。
 セルA1を選択して、「挿入」--「名前」---「定義」と
 クリックして「名前の定義」ダイアログを表示させます。

・参照範囲として「=GET.CELL(17,Sheet1!$A$10)」と指定してください
 (両端の「」は除く)

・名前は「hh」とします(両端の「」は除く)。

・上記の入力を行って「OK」をクリックしてください。
 これで名前の登録ができました。


・次に「コントロールツールボックス」のテキストボックスを配置します。
 どこでもよいですが、セルC1におさまる程度に作ってください。

・名前はTextbox1とします。
 プロパティボックスでVisibleプロパティをFalseに設定してください
 デザイン終了(三角定規のアイコンクリック)でテキストボックスが消えることを
 確認してください。
・Sheet1のモジュールには

'===============================================================
Private Sub TextBox1_Change()
  With TextBox1
    If CBool(.Text) Then
      MsgBox "hide"
    Else
      MsgBox "visible"
      End If
    End With
End Sub

というイベントプロシジャーを記述します。


・標準モジュールに
'==============================================================
Function grpopn(hh As Double) As Boolean
  grpopn = Not CBool(hh)
  ActiveSheet.OLEObjects("textbox1").Object.Text = CStr(grpopn)
End Function

というFunctionを記述します。


・最後です。セルA1を選択して、条件付書式を設定します。
 「書式」---「条件付書式」とクリックして「条件付書式の設定」ダイアログを
 表示させてください。

・条件として「数式が」を選択します。

・数式として、「=grpopn(hh)」を指定してください(両端の「」は除く)。

・書式は何も指定せずにOKをクリックしてください。

これで完了です。

これで、左上の「1」のクリックで「hide」
       「2」のクリックで「visible」と表示されます。

うまくいかないときは、名前の定義や条件付書式の数式が
正しく定義されているか確認してみてください。


上記の操作でExcel2002で確認しましたが、動作確認が出来ています。

試してみてください。

【39631】Re:折りたたみをきっかけにマクロ実行
お礼  ひげくま  - 06/6/27(火) 23:02 -

引用なし
パスワード
   ▼ichinose さん:
私の説明が抽象的で、やりたいことが伝わっていないようです。

・1グループは3行
・そのグループがいくつかあり、グループ毎に独立して、折り畳みや展開をしたい。
・グループを挿入したり削除したりするマクロを用意している。⇒何グループまで増えるかは、使用者による。

一応、私の中では既に、Selection_Changeを使うということで解決していて、それで勧めています。

何か、他のことに流用できるかもしれないので、そのときは参考にさせていただきます。
どうもありがとうございました。

【39642】Re:折りたたみをきっかけにマクロ実行
発言  ichinose  - 06/6/28(水) 7:23 -

引用なし
パスワード
   ▼ひげくま さん:
おはようございます。

>私の説明が抽象的で、やりたいことが伝わっていないようです。
ん?なさりたいことは・・・・、[39586] で記述された

>複数行をグループ化した状態で、折りたたんだり展開したときに、マクロを実行したい

ではなかったのですか?
私の投稿は、このグループ化した行の折りたたみと展開でマクロを実行させる手順を
記述したものです。


>・1グループは3行
>・そのグループがいくつかあり、グループ毎に独立して、折り畳みや展開をしたい。
>・グループを挿入したり削除したりするマクロを用意している。⇒何グループまで増えるかは、使用者による。

であるならば、「・グループを挿入したり削除したりするマクロを用意している」
というコードの中で私が記述した内容をコード化することで上記も実現可能かと
思いますよ!!

>
>一応、私の中では既に、Selection_Changeを使うということで解決していて、それで勧めています。

でも、方針が固まったのであればその方向で頑張ってください。

>
>何か、他のことに流用できるかもしれないので、そのときは参考にさせていただきます。

私もこのご質問のおかげで新しい発見がありました。

【39646】Re:折りたたみをきっかけにマクロ実行
発言  ひげくま  - 06/6/28(水) 9:10 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。

>>・そのグループがいくつかあり、グループ毎に独立して、折り畳みや展開をしたい。
>>・グループを挿入したり削除したりするマクロを用意している。⇒何グループまで増えるかは、使用者による。
>
>であるならば、「・グループを挿入したり削除したりするマクロを用意している」
>というコードの中で私が記述した内容をコード化することで上記も実現可能かと
>思いますよ!!

シート(セル)に対しての処理については、グループ挿入orグループ削除のマクロに組み込むことは出来ると思います。
ですが、マクロで、新たなマクロを書くことって出来るのでしょうか?
シートモジュールの Private Sub TextBox1_Change() は、グループごとに必要だと思っています。

あと、あつかましいようですが、
>・参照範囲として「=GET.CELL(17,Sheet1!$A$10)」と指定してください
この GET が何者なのか解っていないので、教えていただけると嬉しいです。

【39691】Re:折りたたみをきっかけにマクロ実行
発言  ichinose  - 06/6/29(木) 10:24 -

引用なし
パスワード
   ▼ひげくま さん:
おはようございます。
>
>>>・そのグループがいくつかあり、グループ毎に独立して、折り畳みや展開をしたい。
>>>・グループを挿入したり削除したりするマクロを用意している。⇒何グループまで増えるかは、使用者による。
>>
>>であるならば、「・グループを挿入したり削除したりするマクロを用意している」
>>というコードの中で私が記述した内容をコード化することで上記も実現可能かと
>>思いますよ!!

と思っていましたが、うまく作動してくれません。

大きな理由は、
前回の条件付書式の設定で「折り畳みや展開」でイベントのように反応してくれるのは、条件付書式を設定したセルが画面上に表示されている場合に限られてしまうことです。

前回の投稿でセルA1に設定した条件付書式ですが、セルA1が隠れるようにスクロールして後に同じように「折り畳みや展開」を行ってもイベントのように反応してくれません。


>シート(セル)に対しての処理については、グループ挿入orグループ削除のマクロに組み込むことは出来ると思います。
>ですが、マクロで、新たなマクロを書くことって出来るのでしょうか?
>シートモジュールの Private Sub TextBox1_Change() は、グループごとに必要だと思っています。
これについては、コードでコードを記述するという方法は考えていませんでした。
大前提がくつがえされていますから、ここに関しては省略します。

>
>あと、あつかましいようですが、
>>・参照範囲として「=GET.CELL(17,Sheet1!$A$10)」と指定してください
>この GET が何者なのか解っていないので、教えていただけると嬉しいです。
Excel4Macroといって、VBA以前のExcelの主流マクロだった見たいです。
(これの歴史的な背景はしりません)
Excel2003までは、サポートされているみたいです。
「Get.Cell(17,セル範囲)」という書式で指定セルのHeightを返します。


もう少し調べてみますが、あまりよい結果は得られそうもありません。

当初の方針(グループ化を自作する)のほうがよいかなあ??
これは、これで厄介でしょうけど・・・。

【39694】Re:折りたたみをきっかけにマクロ実行
お礼  ひげくま  - 06/6/29(木) 10:43 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。

>前回の投稿でセルA1に設定した条件付書式ですが、セルA1が隠れるようにスクロールして後に同じように「折り畳みや展開」を行ってもイベントのように反応してくれません。

あ、そうなんですか。

今回は、1グループが3行で、折りたたむと下の2行目と3行目が隠れて、1行目はそのままにしたかったので、ichinoseさんのサンプルでA1だったセルの役目を、各グループの1行目の最左端のセルにさせよう、というところまでは考えていたのですが、

>>ですが、マクロで、新たなマクロを書くことって出来るのでしょうか?
>これについては、コードでコードを記述するという方法は考えていませんでした。

どうしてもここで詰まってしまいました。

ちなみに、セルに「=hh」と書くと、行の高さが表示されましたが、折りたたんで行の高さを変えても、自動再計算はしてないのですね。

>>この GET が何者なのか解っていないので、教えていただけると嬉しいです。
>Excel2003までは、サポートされているみたいです。
>「Get.Cell(17,セル範囲)」という書式で指定セルのHeightを返します。

ありがとうございます。
17:Heightということは何とか解ったのですが、他の数字が何に対応しているのかの一覧表を見てみたいです。
もし在りかをご存知でしたら教えてもらえませんか。

>当初の方針(グループ化を自作する)のほうがよいかなあ??
>これは、これで厄介でしょうけど・・・。

一応、その方針でもう作っちゃいました。

【39699】Re:折りたたみをきっかけにマクロ実行
発言  ichinose  - 06/6/29(木) 11:53 -

引用なし
パスワード
   ▼ひげくま さん:
>ありがとうございます。
>17:Heightということは何とか解ったのですが、他の数字が何に対応しているのかの一覧表を見てみたいです。
>もし在りかをご存知でしたら教えてもらえませんか。
そうだよねえ・・・、

英語版のHELPのDW先をこの掲示板(だったと思います)でリンクされていたと
思いましたが、検索してみたけど見つかりませんでした。

もう少し、待ってみてください。
知っている方の投稿があるかもしれません。

【39734】Re:折りたたみをきっかけにマクロ実行
発言  ichinose  - 06/6/30(金) 7:18 -

引用なし
パスワード
   ▼ひげくま さん:
おはようございます。

>>17:Heightということは何とか解ったのですが、他の数字が何に対応しているのかの一覧表を見てみたいです。
>>もし在りかをご存知でしたら教えてもらえませんか。

ひとつだけ見つけました。
http://www.microsoft.com/downloads/details.aspx?FamilyID=c09bf7f7-d30e-4ce9-8930-5d03748ca5cd&DisplayLang=en

但し、Excel2000専用ですが・・・。

また気が付いたら掲載します。

7337 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free