使用されているセル範囲を全て取得する方法
エクセルVBAで最終行を見つける方法
Excel VBA マクロの最終行を取得
Range.End メソッドで最終行を取得可能
定数名 | 値 | 説明 |
---|---|---|
xlUp | -4162 | 上端 |
xlDown | -4121 | 下端 |
xlToLeft | -4159 | 左端 |
xlToRight | -4161 | 右端 |
End.EntireRow | 指定すると終端の行を取得できます。 |
Dim r As Range ‘セル「A1」の下端の行を取得 Set r = Range("A1").End(xlDown).EntireRow r.Select
途中の行に空白セルがある場合は上記の方法で最終行取得ができません。
この場合、空白セルの上のセルが最終行と判定されます。
こういうときはシートの最終行から上端のセルを取得します。
‘エクセルにおける最終行を取得(空白も含めて) Dim intLast As Integer intLast = Rows.Count ‘取得したい列番号を設定(A列⇒1,B列⇒2,C列⇒3,・・・E列⇒5・・・) Dim intCol As Integer intCol = 5 ‘最終行を探す(値が入っているセル) Dim r As Range Set r = Cells(intLast , intCol ).End(xlUp) r.Select
フォルダ内の全ファイルを取得する方法(サブフォルダも含めて取得)
' フルパスを格納するリスト Public lstFullPath As Collection ' 呼出し:ルートパスを指定 Public Sub GetAllFilePath() ' 初期化 Set lstFullPath = New Collection ' ルートパスを指定(最後の\マークは不要) Call GetSubDir("c:\root\src") End Sub ' サブフォルダを含めてファイルのフルパスを全取得 Sub GetSubDir(Path As String) Dim buf As String, f As Object buf = Dir(Path & "\*.*") Do While buf <> "" ' フルパスを格納 Dim sCurFullPath As String sCurFullPath = Path & "\" & buf lstFullPath.Add(sCurFullPath ) ‘次ファイルを検索 buf = Dir() Loop ‘ サブフォルダへ移動 With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(Path).SubFolders Call GetSubDir(f.Path) DoEvents Next f End With End Sub
任意フォルダ内の全てのエクセルに対して同じ処理をしたい場合
' ======================================================== '@ 機能:全てのブック、シートに対して同じ処理をしたい場合 '@ 日付:2014.01.20 '@ 作成:D.O Revolutions エンターテイメントカレッジ ' ======================================================== Sub ExeOperationTemplate() On Error GoTo ERR001 '----------------------------------------------------- '変数宣言 '----------------------------------------------------- Dim wsSheet As Worksheet Dim wbCurrent As Workbook Dim DIR_PATH As String Dim fl_name As String '----------------------------------------------------- '固定値 '----------------------------------------------------- Const S_TARGET_SHEET = "10桁を6桁変換" Const S_PATH_CELL = "C6" '----------------------------------------------------- 'エクセルの保存パスを取得 '----------------------------------------------------- ThisWorkbook.Activate ThisWorkbook.Worksheets(S_TARGET_SHEET).Activate DIR_PATH = ThisWorkbook.ActiveSheet.Range(S_PATH_CELL).Value '----------------------------------------------------- 'アラート非表示 '----------------------------------------------------- Application.DisplayAlerts = False '----------------------------------------------------- 'エクセルファイルを検索 '(無ければエラーメッセージ) '----------------------------------------------------- fl_name = Dir(DIR_PATH & "\*.xls*") If fl_name = "" Then MsgBox "Excelファイルがありません。" Exit Sub End If '----------------------------------------------------- 'フォルダの全エクセルファイルを取得ループ '----------------------------------------------------- Do ' 現在のワークブックを取得 Set wbCurrent = Workbooks.Open(Filename:=DIR_PATH & "\" & fl_name, UpdateLinks:=False) '----------------------------------------------------- '現在ワークブックの全シートを取得ループ '----------------------------------------------------- For Each wsSheet In wbCurrent.Worksheets ' カレントシートをアクティブ化 wsSheet.Activate Debug.Print wsSheet.Name & "の処理中・・・" '★================================================= '★実行処理はここに記述 '★================================================= '★例)シートの{A1}セルに"ABC"と入力したい場合★ 'wsSheet.Range("A1").Value = "ABC" '★================================================= ' 各シートの先頭セルを選択状態にする wsSheet.Range("A1").Select Next ' 各ブックの先頭シートを選択 wbCurrent.Worksheets(1).Activate '保存して閉じる wbCurrent.Save wbCurrent.Close (True) '----------------------------------------------------- '次のエクセルを探す '(無ければ処理終了) '----------------------------------------------------- fl_name = Dir Loop Until fl_name = "" ' 正常終了時 '----------------------------------------------------- 'アラート表示 '----------------------------------------------------- Application.DisplayAlerts = True MsgBox "正常終了" Exit Sub ERR001: ' 異常発生時 MsgBox "エラー番号:" & Err.Number & vbCrLf & "エラーソース:" & Err.Source & vbCrLf & _ "エラーの種類:" & Err.Description, vbExclamation '----------------------------------------------------- 'アラート表示 '----------------------------------------------------- Application.DisplayAlerts = True End Sub
- 出版社/メーカー: Uフォレスト(U-forest)
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: Uフォレスト(U-forest)
- メディア: Personal Computers
- この商品を含むブログを見る
エクセルのVBAマクロでセルをFind検索する際に下から上に逆方向で見つける方法
検索方向パラメータ:SearchDirectionにxlPreviousを設定します。
Sub 下から検索する() Dim rng As Range Set rng = Range("A:A").Find(What:="検索文字", SearchDirection:=xlPrevious) If rng Is Nothing Then MsgBox "存在しません" Else MsgBox rng.Address(False, False) End If End Sub
- 出版社/メーカー: Uフォレスト(U-forest)
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: Uフォレスト(U-forest)
- メディア: Personal Computers
- この商品を含むブログを見る
エクセルVBAの参照設定を動的に変更する方法
‘ 参照設定追加 Sub AddReferences() On Error Resume Next Dim Ref With ActiveWorkbook.VBProject Call .References.AddFromFile("C:\work\common1.xlam") Call .References.AddFromFile("C:\work\common2.xlam") End With End Sub ‘ 参照設定削除 Sub RemoveReferences() On Error Resume Next Dim Ref With ActiveWorkbook.VBProject For Each Ref In ActiveWorkbook.VBProject.References ‘ common1.xlamを参照していたら削除(チェックを外す) If ((InStr(Ref.FullPath, "common1.xlam") > 0 )) Then Call .References.Remove(Ref) GoTo C_FOR End If ‘ common2.xlamを参照していたら削除(チェックを外す) If ((InStr(Ref.FullPath, "common2.xlam") > 0 )) Then Call .References.Remove(Ref) GoTo C_FOR End If C_FOR: Next Ref End With End Sub
- 出版社/メーカー: Asustek
- 発売日: 2015/12/18
- メディア: Personal Computers
- この商品を含むブログを見る
Access(テーブル、クエリ)をCSVファイルとして出力する方法
VBAでCSVファイルを作成して出力する方法
Sub Exp_CSV() Dim dbs As DAO.Database Dim rst As Dim rst As DAO.Recordset Dim lngFileNum As Long Dim strOutPut As String lngFileNum = FreeFile() Open "C:\work\expdata.csv" For Output As #lngFileNum Set dbs = CurrentDb Set rst = dbs.OpenRecordset("M_DATA") With rst strOutPut = "" Do Until .EOF strOutPut = strOutPut & !コード & "," & !品名 & "," & _ !備考 & "," & !数量 & "," & !仕入先 & vbCrLf .MoveNext Loop .Close End With Print #lngFileNum, strOutPut Close #lngFileNum End Sub