【Excel】フィルターで並び替えを行う②

①フィルターを設定する
フィルターで並び替えを行う①」を参照

②マクロを使えるようにする
マクロを使えるようにする」を参照

③並び替え用のボタンを配置

④ボタン配置時の以下の画面で「マクロ名」を「TitleAsc」として「新規作成」を押す

⑤「Microsoft Visual Basic for Applications」にて以下のコードを記載

'最終行の取得
Dim lastRow As Integer:
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
'2列目の5行目から最終行に対して昇順のソート
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:=Range(Cells(5, 2), Cells(lastRow, 2)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

⑥ボタンの名前を変更する

⑦降順のボタンを作成
ボタンを配置し、「マクロ名」を「TitleDesc」とする


コードは以下のようにする(「Order:=xlDescending」の部分が違うのみ)

'最終行の取得
Dim lastRow As Integer:
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
'2列目の5行目から最終行に対して降順のソート
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:=Range(Cells(5, 2), Cells(lastRow, 2)), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

【Excel】足し算の問題を作る

①UserFormの作成

②各ボタン押下時の処理を記載
※例外処理は省略

○「出題!」ボタン押下時のソース

Private Sub CommandButton1_Click()
'「出題!」ボタン押下時の処理

'一つ目のラベルに乱数をセット(1~9)
Label1.Caption = Str(Int(9 * Rnd + 1))

'二つ目のラベルに乱数をセット(1~9)
Label2.Caption = Str(Int(9 * Rnd + 1))

'回答入力欄にフォーカスセット
TextBox1.SetFocus

'正解判定ラベルを空に
Label3.Caption = ""

End Sub<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>

○「採点!」ボタン押下時のソース

Private Sub CommandButton2_Click()
'「採点!」ボタン押下時の処理

'正解なら「〇」不正解なら「×」を表示
If (Val(Label1.Caption) + Val(Label2.Caption) = TextBox1.Text) Then
Label3.Caption = "○"
Else
Label3.Caption = "×"
End If

End Sub

【Excel】Excelファイルと同階層の最新フォルダを開く

①マクロを使えるようにする
マクロを使えるようにする」を参照

②FileSystemObjectを利用するため、「Microsoft Scripting Runtime」を参照
ライブラリの参照方法は「ライブラリを参照する」を参照

③必要に応じてボタン配置
ボタンの配置方法は「表を複数の条件で絞り込む②」を参照

④Microsoft Visual Basic for Applications」にて以下のコードを記載

Sub ボタン1_Click()
Dim fso As FileSystemObject
Set fso = New FileSystemObject

'Excelファイルが配置されているフォルダを取得
Dim pfl As Folder
Set pfl = fso.GetFolder(ActiveWorkbook.Path)

'Excelファイルと同じ階層にフォルダがなければ処理を終了
If pfl.SubFolders.Count = 0 Then
Set fso = Nothing
Exit Sub
End If

'最終的に開くフォルダ
Dim ofl As Folder
'日付を確認するために一時的に取得するフォルダ
Dim tfl As Folder

'サブフォルダ分日付を検証
For Each tfl In pfl.SubFolders
'初回のみoflに代入
If ofl Is Nothing Then
Set ofl = tfl
End If

'tflの更新日付がoflよりも大きければoflに代入(作成日時で比較の場合は「DateCreated」を使用)
If ofl.DateLastModified < tfl.DateLastModified Then
Set ofl = tfl
End If
Next

'一番更新日付が大きいoflを起動
Shell "C:\Windows\explorer.exe " & ofl.Path, vbNormalFocus
End Sub

【Excel】表を複数の条件で絞り込む②

①マクロを使えるようにする
マクロを使えるようにする」を参照

②検索文字入力欄と検索ボタンを配置

③ボタン配置時の以下の画面で「マクロ名」を「SearchGoods」として「新規作成」を押す

④「Microsoft Visual Basic for Applications」にて以下のコードを記載
※表の形式に応じて「★」のついた箇所の数値を変更

Sub SearchGoods()
'検索文字入力行・列
Dim searchValueRow As Integer: searchValueRow = 2 '★
Dim searchValueCol As Integer: searchValueCol = 2 '★
'検索対象列
Dim targetCol As Integer: targetCol = 3 '★
'検索開始行
Dim startRow As Integer: startRow = 5 '★
'検索終了行
Dim lastRow As Integer: lastRow = 9 '★

'半角文字で区切った検索文字を配列に格納
Dim searchValues() As String: searchValues = Split(Cells(searchValueRow, searchValueCol).Value, " ")

'開始行から終了行までループ
For i = startRow To lastRow Step 1
Dim val As Variant
'半角文字で区切った検索文字でループ
For Each val In searchValues
'検索文字が含まれない場合は行を非表示にして次の行へ
If InStr(Cells(i, targetCol).Value, val) = 0 Then
Rows(i).Hidden = True
GoTo Continue
End If
Next val
'全ての検索文字が含まれる場合、または検索文字が何も入力されていない場合は
'行を表示
Rows(i).Hidden = False
Continue:
Next
End Sub

検索データの行数が増える場合は10行目のコードを以下のようにしておく事で、
追加した行数も考慮して最終行の取得が可能

Dim lastRow As Integer: lastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1