2017-01-23 14 views
1

ここに掲載されている質問/回答を読んだことがあります。私はマクロには比較的新しいので、これは私のための少しの挑戦であることが証明されています。機能ボタン:値の間にセルを表示し、他のすべての行を非表示にする

私はいくつかのセクションを含むテンプレートを構築しています。

私に必要なもの: このスプレッドシートには、キーワードを入力してすべてのセクションが順番にリストされています。たとえば、そのうちの1つを「管理テスト」といいます。このセクションの上の行で、「T MaTes」とタイプしました。このセクションの下の行で、「U Fin」とタイプしました。私が必要とするのは、最初の単語を探し、それを見つけてから2番目の単語を探し、その間のすべての行を選択し、他のすべてのセクションを隠したままで再表示するマクロです。 次に、そのマクロを他のすべてのセクションに適用し、どのオプションボタンが選択されたかに応じて、他のすべてのセクションを隠しながらそのマクロを表示できるようにします。

キーワードがマクロに必要な理由は、セクションが編集されることがあります(行の追加/削除など)。行番号に基づいて行を非表示/非表示にするマクロが失敗することを意味します。

これは私がこれまでに出ている何をされます。ここで、ここからそれを取るために

Sub ManagementTesting() 

Dim 1FirstHit   As Long 

Dim 1SecondHit   As Long 

Do While True 
     1FirstHit = getItemLocation("T*MaTes", Columns(1), , False) 
     If (1FirstHit = 0) Then Exit Do 
     1SecondHit = getItemLocation("U*Fin", Range(Cells(lFirstHit + 1, 1), Cells(Rows.Count, 1)), , False) 
     If (1SecondHit = 0) Then Exit Do 
     Rows(1FirstHit & ":" & lSecondHit).EntireRow.Hidden = True 
EndSub 

わからない...あなたの助けと指導は非常に高く評価されます!ありがとうございました!!!!

マルタ

+0

解決策ではありませんが、数値で変数名を開始することはできません。 'getItemLocation'関数のコードも含めることができますか? – NickSlash

答えて

0

私はあなたのコードを動作させることができなかったが、一般的なアイデアは良いです(getItemLocationが何をするかの私の推測と仮定すると、右である)

次のコードは異なるアプローチではなく、複数のグループを非表示にすることができます(または編集することで1つのグループだけを非表示にすることもできます)。

Sub Main() 
Dim Index As Integer: Index = 1 ' Where to start the search from 
Dim Found As Boolean: Found = False 
Dim SingleInstance As Boolean: SingleInstance = False ' Stop after the first instance 
Dim Start As Integer 
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets(1) ' The worksheet your data is on 

' This will hide groups (multiple) of rows. 
' It searches column 1 for keywords "StartGroup" and "EndGroup" 
' Eg- Sheet1 
' 1: StartGroup 
' 2: [Hidden] ExampleData 
' 3: [Hidden] ExampleData 
' 4: EndGroup 
' 5: StartGroup 
' 6: [Hidden] ExampleData 
' 7: EndGroup 

' Running this code with that data will unhide rows 2-3 and rows 6-6 (including the start and end group indicators) 



Do 
    ' Test to see if the current iteration indicates the start of a group 
    If Sheet.Cells(Index, 1).Value2 = "StartGroup" Then 
     Start = Index ' remember the location 
     Found = True ' remember that we've found a group 
    Else 
     ' Skip if we are not currently in a group 
     If Found = True Then 
      ' Test to see if it is the end of a group 
      If Sheet.Cells(Index, 1).Value2 = "EndGroup" Then 
       ' unhide the rows 
       Sheet.Range(Sheet.Rows(Start), Sheet.Rows(Index)).EntireRow.Hidden = False 
       ' reset Found and wait for the next group of EOF 
       Found = False 
       If SingleInstance = True Then Exit Do 
      End If 
     Else 
      ' I added an EOF indicator just to exit quicker from the loop past my test data 
      If Sheet.Cells(Index, 1).Value2 = "EndFile" Then Exit Do 
     End If 
    End If 

    ' Debugging - Infinite Loops are mean! 
    If Index < 1000 Then 
     Index = Index + 1 
    Else 
     Exit Do 
    End If 

Loop 

End Sub 
0

回答が見つかりました。これは私が作成したマクロです。 Nickforあなたの応答をありがとう!

Sub MaTes() 
Rows("8:1000").EntireRow.Hidden = True 
Dim Index As Integer: Index = 9 
Dim I As Integer 
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets(1) 
For Index = 1 To 1000 
If Sheet.Cells(Index, 1).Value2 = "T*MaTes" Then 
I = Index + 1 
For I = Index To 1000 
If Sheet.Cells(I, 1).Value2 = "U*Fin" Then 
Sheet.Range(Sheet.Rows(Index), Sheet.Rows(I)).EntireRow.Hidden = False 
Exit For 
Else: I = I + 1 
End If 
Next 
Else: Index = Index + 1 
End If 
Next 
For Index = 1 To 1000 
If Sheet.Cells(Index, 1).Value2 = "A*Sum" Then 
I = Index + 1 
For I = Index To 1000 
If Sheet.Cells(I, 1).Value2 = "T*Mates" Then 
Sheet.Range(Sheet.Rows(Index), Sheet.Rows(I)).EntireRow.Hidden = True 
Exit For 
Else: I = I + 1 
End If 
Next 
Else: Index = Index + 1 
End If 
Next 

End Sub 
関連する問題