PCメモ

Excelを中心とした業務改善の記録

Excel VBA

ExcelにVBAでパスワードをかける

Excelを開いた時にパスワードを入力させ、一致しなかった場合は自動で閉じる。 Sub pw() Dim st As String Dim i As Long For i = 1 To 3 On Error GoTo myError st = InputBox("パスワードを入力してください") '1234 If st = 1234 Then Exit For Else MsgB…

フィルター→新規ブックにコピペ→同じ階層に保存

キャリアがドコモとなっているデータを抽出して、新しいブックとして保存する。 保存先はマクロブックと同じ階層。「処理済」というフォルダを作成してその中に保存する。 Sub wrk() Dim wb As Workbook Dim st As String Dim strPath As String '同じ階層に…

複数ブックを編集

内容 ブックA.Sheet1のA列に入力してあるブック名を開き、B列で指定しているシートに対して処理を行う。 A列に入力してある各ブックは、ブックAと同じ階層に保存してある。 コード Sub wrk() Dim wb As String Dim ws As String Dim openBook As Workbook Di…

作成したフォルダに保存

Sub test() Dim openBook As Workbook Dim strPath As String '作成したいフォルダのパス '①処理後フォルダ作成 '========================================================= '--- 同じ階層に「処理後」というフォルダを作成する ---' strPath = ThisWorkbo…

加工後同じ階層にコピーして保存

Sub 同じ階層に保存() Dim openBook As Workbook Dim openPath As String '選択したブック名を格納 openPath = Application.GetOpenFilename("xls,*.xls?") If openPath <> "False" Then '格納したブックを開く Set openBook = Workbooks.Open(openPath) 'マ…

同じ階層にフォルダを作成する(Mkdir)

Sub フォルダ作成() '--- 作成したいフォルダのパス ---' Dim strPath As String strPath = ThisWorkbook.Path & "¥処理後" '--- フォルダが存在しない場合のみMkDirで作成 ---' If (Dir(strPath, vbDirectory) = "") Then Call MkDir(strPath) Else MsgBox …

Do Loopステートメント(繰り返し処理)

指定した条件で処理を繰り返す A列の2行目以下の数字を合計する。 While条件(条件が正しい間) Sub test2() Dim i As Long Dim c As Long i = 2 '空白ではない間処理を続ける Do While Cells(i, 1) <> "" c = c + Cells(i, 1) i = i + 1 Loop MsgBox c End …

ネーミングについて(変数名・プロシージャ名)

よく使われる変数名 変数名 用途 語源 ct 数えるとき Count f オン/オフ Flag temp 一時的に使用する Temporrary i カウンタ変数 Iteration buf 一時的に格納 Buffer rc 戻り値を格納 Return Code n 一時的に使う数値 Number s 一時的に使う文字列 String 変…

Functionプロシージャ

Functionプロシージャは引数を渡さなくてもエラーにならない。

引数の渡し方(ByRef・ByVal)

引数の渡し方には「参照渡し」と「値渡し」がある。 指定しない場合は「参照渡し」になる。 参照渡し(ByRef) 値渡し(ByVal)

VBA用語集(オブジェクト・関数・ステートメントなどの読み方)

VBA用語集|VBAエキスパート公式サイト

並べ替え(SortオブジェクトSortメソッド)

並べ替え Excel2007以降の並べ替え Excel2003までの並べ替え Sortオブジェクトのメンバー SortOn ~並べ替えのタイプ~ Order ~並べ替えの順番~ DataOption ~数値と文字が混在~ Header ~タイトル行かどうか~ 並べ替え Excel2007以降の並べ替え Sortオブジェク…

複数条件でフィルターをかける(AutoFilter 配列)

AutoFilterメソッド セル.AutoFilter Field, Criteria1, Operator, Criteria2 Criteriaで条件指定できるのは2つまで。3つ以上条件指定する場合は、引数Criteria1を配列形式で指定する。 条件2つ With Range("A1") .AutoFilter field:=1, Criteria1:="*B*", _…

Faxデータ削除(再帰処理)

フォルダ内のFaxデータをまとめて削除する。条件は更新日が二週間前。 Faxフォルダの中にデータが入っているがフォルダの数に規則性はない。 Faxフォルダ 20210411 Aさん PDFデータ PDFデータ PDFデータ 再帰処理を行い、フォルダ内すべてのデータに対して処…

重複削除マクロ

重複を削除する。 Sub 重複を削除() Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row Dim i As Long Dim a As Long Dim c As Long '重複している数のカウント用 For i = 2 To LastRow c = 0 '重複があるか調べる For a = 2 To LastRow If…

オブジェクト・コレクション・メンバ

オブジェクト オブジェクトとは、VBAで何か操作する時の対象となるもののことです。 名 オブジェクト名 ブック Workbook ワークシート WorkSheet セル Range オブジェクト式①対象.様子=値②対象.命令 オプション:=値 佐藤君という小学生を例に説明していきま…

検索結果を削除(Findメソッド)

セルを検索し行を削除する。 Sub wrk() Dim a As Range Set a = Range("A:A").Find(what:="佐藤") If a Is Nothing Then MsgBox "見つかりません" Else a.EntireRow.Delete End IfEnd Sub 対象セルだけを削除したい場合。 Sub wrk() Dim a As Range Set a = …

ブックを閉じる(Closeメソッド)

ブックを閉じる Sub 閉じる() ActiveWorkbook.Close End Sub 編集が保存されていない場合、確認メッセージが表示される。 Closeメソッドの引数SaveChangesを使うと保存するかどうか指定できる。保存する:True保存しない:False Sub 閉じる() '保存して閉じ…

PageSetupオブジェクト(印刷設定)

PageSetupオブジェクトについて 印刷範囲設定(PrintArea) PageSetupオブジェクトについて PageSetupオブジェクトのプロパティを変更することで印刷設定を行うことができる。 With Worksheets("Sheet1").PageSetup. '横向き印刷 .Orientation = xlLandscape…

ファイル保存先規定の場所

ファイルを保存する時に、ファイル名のみ指定し保存場所を指定しなかった場合規定の場所にファイルが保存される。 ActiveWorkbook.SaveAs Filename:="test2.xlsx", FileFormat:=xlWorkbookDefault 既定の場所変更方法 ファイル→オブション→保存→ブックの保存…

VBA3要素(オブジェクト操作・制御構文・関数)

VBAには大きく3つの要素がある。 ①オブジェクトに対する操作②制御構文③関数 Sub wrk() Dim LastRow As Long Dim i As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row '制御構文(繰り返し) For i = 2 To LastRow '制御構文(分岐) 関数 If Cells(i, …

最終行と最終列の組み合わせ

最終列と最終行を組み合わせて全てのセルに対して処理を行う。 Sub wrk() Dim i As Long Dim j As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column Cells(i, j).Interior.ColorIndex = 6 …

VBAでOutlookメールを送付

ExcelVBAを使用してOutlookメールを作成し送付する。 準備 Outlookを操作する為の参照設定。 VBE→ツール→参照設定→Microsoft Outlook 16.0 Object Libraryにチェック。16.0はバージョンによって変わる。 コード Sub SendMail1() '--- Outlook操作のオブジェ…

インプットボックスフィルター

Sub delete() Dim wrk As String wrk = InputBox("文字列を入力してください") With Range("A1") .AutoFilter .AutoFilter field:=1, Criteria1:=wrk .CurrentRegion.Offset(1, 0).EntireRow.delete .AutoFilter End With End Sub InputBoxに入力された文字…

シートを同じ階層に保存

元データと同じ階層にブック内のシートを保存する。 Sub 同じ階層に保存() 'マクロブックのパス Dim Path As String Path = ThisWorkbook.Path 'シートを新規ブックへコピー Sheets(1).Copy '同じ階層に保存 On Error Resume Next ActiveWorkbook.SaveAs Fil…

チェックした行の削除

D列に×を入力した行を削除する。 '最終行の取得 Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row Dim i As Long For i = LastRow To 2 Step -1 '×と書かれているかどうか If Range("D" & i).Value = "×" Then Rows(i).Delete End If Next…

キーワードでデータを抽出

Dim LastRow As Long Dim r As Integer 'クリア Sheets("まとめ").Range("A5").CurrentRegion.Offset(1, 0).ClearContents 'まとめシートのタイトル行を取得する r = Sheets("まとめ").Range("B5").Row 'まとめシートへデータを書き写す LastRow = Worksheet…

MsgBox 分岐

MsgBoxを使ってその後の処理を分岐させる Dim ans As Integer ans = MsgBox("処理を行いますか?", vbYesNo + vbQuestion, "動作確認") If ans = vbYes Then MsgBox "開始します" Else MsgBox "中断します" End If buttons の引数 定数 値 内容 vbYesNo 4 […

文字列内検索(InStrh)

InStr関数 ~文字列内で検索~ InStr関数 ~文字列内で検索~ 引数に指定した文字列の中で、「検索文字列」が存在する位置を数値で返す。 InStr(文字列,検索文字列) Midと組み合わせて使用することが多い。 Cells(1, 2) = Mid(Cells(1, 1), InStr(Cells(1,…

Copyメソッド

別の場所へコピー コピー元のセル.Copy Destination : = コピー先のセル Range("A1").Copy Destination : = Range("B1") ※Destination は省略可能。→ Range("A1").Copy Range("B1") 貼り付け方法の指定 Range("A1").Copy Range("B1").PasteSpecial Paste := …