自分独自の健康法はある?

いつもお世話になっております。

【エクセル VBA】について、教えてください。

上司から指定の形式で表を作成するように指示されました。
その中で、空欄の行をフォームコントロールボタンを使用し、
表示のON、OFFができるように考えてほしいと言われ、困っています。

      A列     B列    C列
1行    顧客名    ○○○   ▼▼▼
2行    空欄               ←ここだけ非表示
3行    顧客名    △△△   ●●●
・    ・
・    ・
・    ・

2行目の次は4行目を非表示にします。
このように記入行・空欄行が交互に何百と続く表になっています。
2行目の空欄は記入されることもあるので、削除することはできません。

次のように考えてみたのですが、これではデータが何百となった場合、
その数に合わせて式を組むことになってしまうため、現実的ではありませんでした…。
Sub co_()
With Rows("2")
.Hidden = Not .Hidden
End With
End Sub

初心者の為、このようにroopするVBAが組めるのかも判断できません。
作成できるものなのかも含めて、教えていただければ幸いです。

質問者からの補足コメント

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

    私の説明が悪く、うまく伝わらなかったのですが、
    例えば1行目にフォームボタンを設置した場合、それをクリックすると2行目が非表示
    3行目にフォームボタンを設置し、クリックした場合、4行目が非表示としたいとのことでした…。

    せっかくご回答いただいたのに申し訳ありません。
    以上のように式を組むことはできないでしょうか…?

      補足日時:2017/08/22 09:28

A 回答 (5件)

ボタンを大量にコピーする事になるのでおすすめはしませんが一応・・・


全てのボタンに↓のプロシージャを実装してください

ActiveSheet.Rows(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row + 1).Hidden = Not ActiveSheet.Rows(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row + 1).Hidden

ボタンを配置したアドレスから非表示にしています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
御二方、どちらもベストアンサーに選びたかったですが、
今回はxMAKISHIxさんを選ばせていただきました。

いろいろと考えていただき、ありがとうございました。
御二方のようになれるようにVBAの勉強を頑張りたいと思います。

同時に自分の力量ではできないことは断ることも覚えていきたいと思います。

本当にありがとうございました!

お礼日時:2017/08/24 10:34

No.2・3です。



投稿後思ったのですが・・・
1行おきにボタンを配置するのは大変なので、A列をダブルクリックする方法ではどうでしょうか?

↓のコードをシートモジュールに記載し、A列をダブルクリックしてみてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
If Target <> "" Then
If Target.Offset(1) = "" Then
Cancel = True
With Target.Offset(1).EntireRow
If .Hidden = False Then
.Hidden = True
Else
.Hidden = False
End If
End With
End If
End If
End Sub

これでダブルクリックした下のセルが空白の場合、その行が非表示になります。
もう一度ダブルクリックすると再表示されます。m(_ _)m
    • good
    • 0
この回答へのお礼

いろいろ考えていただきありがとうございます!
参考にしてみます。

これからしっかりと勉強していきたいと思います!!

お礼日時:2017/08/24 10:29

No.2です。



>例えば1行目にフォームボタンを設置した場合、それをクリックすると2行目が非表示
>3行目にフォームボタンを設置し、クリックした場合、4行目が非表示としたいとのことでした…。

すなわち奇数行ごとにフォームコントロールのコマンドボタンなりを配置している!というコトでしょうか?
仮に1行目にボタンを配置している場合は
↓のコードにしてみてください。

Sub ボタン1_Click()
With Rows(2)
If .Hidden = False Then
.Hidden = True
Else
.Hidden = False
End If
End With
End Sub

あとは非表示にする行番号だけの変更で対応してください。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!
参考にしてみます。

お礼日時:2017/08/24 10:27

こんにちは!



要するにA列が空白の行を非表示にすれば良いのですね?
もちろんループさせる方法もありますが、今回は一気に非表示にしてみました。

Sub Sample1()
Dim lastRow As Long, myRng As Range
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set myRng = Range(Cells(1, "A"), Cells(lastRow, "A")).SpecialCells(xlCellTypeBlanks)
If Not myRng Is Nothing Then '//←念のため//
myRng.EntireRow.Hidden = True
End If
End Sub

※ 再表示の操作も必要になってくると思います。
↓のコードで再表示されます。

Sub 再表示()
ActiveSheet.Rows.Hidden = False
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

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

私の説明が悪く、うまく伝わらなかったのですが、
例えば1行目にフォームボタンを設置した場合、それをクリックすると2行目が非表示
3行目にフォームボタンを設置し、クリックした場合、4行目が非表示としたいとのことでした…。

せっかくご回答いただいたのに申し訳ありません。
以上のように式を組むことはできないでしょうか…?

お礼日時:2017/08/22 09:28

1行目を見出しにしています。


あとデータが入力されている下の行を非表示にすることにしています。
シート名は使用しているシート名に変更して下さい。

Dim startRow As Long

startRow = 2

Do While Worksheets("Sheet1").Cells(startRow, 2) <> ""
Worksheets("Sheet1").Rows(startRow + 1).Hidden = Not Worksheets("Sheet1").Rows(startRow + 1).Hidden
startRow = startRow + 2

Loop
    • good
    • 0
この回答へのお礼

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

私の説明が悪く、うまく伝わらなかったのですが、
例えば1行目にフォームボタンを設置した場合、それをクリックすると2行目が非表示
3行目にフォームボタンを設置し、クリックした場合、4行目が非表示としたいとのことでした…。

せっかくご回答いただいたのに申し訳ありません。
以上のように式を組むことはできないでしょうか…?

お礼日時:2017/08/22 09:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報