自分用メモ2

はい、ブック内の全てのシートのA30にあるセルの数値の大きい順にシートを並べるためのVBAコードを以下に示します。このコードは、シートの名前とA30セルの値をリストに格納し、そのリストを値の大きい順にソートしてシートの順序を変更します。

```vba
Sub SortSheetsByA30()
   Dim ws As Worksheet
   Dim sheetList As New Collection
   Dim i As Long, j As Long
   Dim temp As Variant

   ' シート名とA30の値をコレクションに追加
   For Each ws In ThisWorkbook.Worksheets
       sheetList.Add Array(ws.Name, ws.Range("A30").Value)
   Next ws

   ' コレクションのソート
   For i = 1 To sheetList.Count - 1
       For j = i + 1 To sheetList.Count
           If sheetList(i)(1) < sheetList(j)(1) Then
               temp = sheetList(i)
               sheetList(i) = sheetList(j)
               sheetList(j) = temp
           End If
       Next j
   Next i

   ' ソートされた順にシートを並べ替え
   For i = 1 To sheetList.Count
       ThisWorkbook.Sheets(sheetList(i)(0)).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
   Next i

End Sub
```

このコードの動作について簡単に説明します。

1. すべてのシートをループし、シート名とセルA30の値をコレクション(`sheetList`)に追加します。
2. `sheetList`をA30の値に基づいて降順にソートします。
3. ソートされた順序に基づいてシートを並べ替えます。

このコードをエクセルのVBAエディタにコピーして実行すれば、ブック内のシートがA30セルの値の大きい順に並べ替えられます。





セルの値を小さい順に並べ替える場合、ソートの条件を変更するだけで済みます。以下のコードは、セルA30の値を小さい順にシートを並べ替えます。

```vba
Sub SortSheetsByA30Ascending()
   Dim ws As Worksheet
   Dim sheetList As New Collection
   Dim i As Long, j As Long
   Dim temp As Variant

   ' シート名とA30の値をコレクションに追加
   For Each ws In ThisWorkbook.Worksheets
       sheetList.Add Array(ws.Name, ws.Range("A30").Value)
   Next ws

   ' コレクションのソート
   For i = 1 To sheetList.Count - 1
       For j = i + 1 To sheetList.Count
           If sheetList(i)(1) > sheetList(j)(1) Then
               temp = sheetList(i)
               sheetList(i) = sheetList(j)
               sheetList(j) = temp
           End If
       Next j
   Next i

   ' ソートされた順にシートを並べ替え
   For i = 1 To sheetList.Count
       ThisWorkbook.Sheets(sheetList(i)(0)).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
   Next i

End Sub
```

この変更により、`If sheetList(i)(1) > sheetList(j)(1) Then` という条件でソートされるようになり、A30の値が小さいシートが前に来るようになります。このコードを実行すれば、シートがA30セルの値の小さい順に並べ替えられます。




はい、2つの条件を組み合わせてシートを並べ替えることもできます。まずA30の値を小さい順に並べ替え、次に同じA30の値を持つシートの中でD6からD26の合計値を大きい順に並べ替えます。以下のコードはその実装例です。

```vba
Sub SortSheetsByA30AndSumD6toD26()
   Dim ws As Worksheet
   Dim sheetList As New Collection
   Dim i As Long, j As Long
   Dim temp As Variant
   Dim sumRange As Double

   ' シート名、A30の値、D6からD26の合計値をコレクションに追加
   For Each ws In ThisWorkbook.Worksheets
       sumRange = Application.WorksheetFunction.Sum(ws.Range("D6:D26"))
       sheetList.Add Array(ws.Name, ws.Range("A30").Value, sumRange)
   Next ws

   ' コレクションのソート(A30の値の小さい順、次にD6-D26の合計値の大きい順)
   For i = 1 To sheetList.Count - 1
       For j = i + 1 To sheetList.Count
           If sheetList(i)(1) > sheetList(j)(1) Or (sheetList(i)(1) = sheetList(j)(1) And sheetList(i)(2) < sheetList(j)(2)) Then
               temp = sheetList(i)
               sheetList(i) = sheetList(j)
               sheetList(j) = temp
           End If
       Next j
   Next i

   ' ソートされた順にシートを並べ替え
   For i = 1 To sheetList.Count
       ThisWorkbook.Sheets(sheetList(i)(0)).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
   Next i

End Sub
```

このコードの動作について説明します。

1. 各シートについて、シート名、A30の値、およびD6からD26の合計値をコレクション(`sheetList`)に追加します。
2. コレクションをソートします。まずA30の値で小さい順にソートし、A30の値が同じ場合はD6からD26の合計値で大きい順にソートします。
3. ソートされた順序に基づいてシートを並べ替えます。

このコードを実行することで、シートがまずA30の値の小さい順に並べ替えられ、その次に同じA30の値を持つシートはD6からD26の合計値の大きい順に並べ替えられます。

頂いたサポートは鶏のささみを買って猫と半分こします!