# coding:utf-8 import os import win32com.client import win32con import win32gui def main(): # ------------------------------------------------------------------ # Excelの定数を設定 # ------------------------------------------------------------------ # https://excel-ubara.com/EXCEL/EXCEL905.html # https://docs.microsoft.com/en-us/office/vba/api/excel(enumerations) # https://docs.microsoft.com/ja-jp/office/vba/api/excel(enumerations) # ------------------------------------------------------------------ # Excelの定数を取得する方法もあるようです。 # https://stackoverflow.com/questions/28264548/ # https://stackoverflow.com/questions/75154736/ # https://stackoverflow.com/questions/50127959/ # https://stackoverflow.com/questions/48257308/ # https://wacky.hatenadiary.com/entry/20091011/1255240572 # win32com.client.gencache.EnsureDispatch("Excel.Application") # ------------------------------------------------------------------ # Excel Enum Constants # ------------------------------------------------------------------ xlAbove = 0 xlBelow = 1 xlSolid = 1 xlFirst = 0 xlLast = 1 xlLastCell = 11 xlTopToBottom = 1 xlLeftToRight = 2 xlGeneral = 1 xlAutomatic = -4105 xlFormats = -4122 xlNone = -4142 xlCenter = -4108 xlDistributed = -4117 xlJustify = -4130 xlBottom = -4107 xlLeft = -4131 xlRight = -4152 xlTop = -4160 xlRTL = -5004 xlLTR = -5003 xlContext = -5002 # ------------------------------------------------------------------ # Excel Enum XLBorderWeight # ------------------------------------------------------------------ xlHairline = 1 xlThin = 2 xlThick = 4 xlMedium = -4138 # ------------------------------------------------------------------ # Excel Enum XLBordersIndex # ------------------------------------------------------------------ xlDiagonalDown = 5 xlDiagonalUp = 6 xlEdgeLeft = 7 xlEdgeTop = 8 xlEdgeBottom = 9 xlEdgeRight = 10 xlInsideHorizontal = 12 xlInsideVertical = 11 # ------------------------------------------------------------------ # Excel Enum XlAutoFillType # ------------------------------------------------------------------ xlFillDefault = 0 xlFillCopy = 1 xlFillSeries = 2 xlFillFormats = 3 xlFillValues = 4 xlFillDays = 5 xlFillWeekdays = 6 xlFillMonths = 7 xlFillYears = 8 xlLinearTrend = 9 xlGrowthTrend = 10 xlFlashFill = 11 # ------------------------------------------------------------------ # Excel Enum XlAutoFilterOperator # ------------------------------------------------------------------ xlAnd = 1 xlOr = 2 xlTop10Items = 3 xlBottom10Items = 4 xlTop10Percent = 5 xlBottom10Percent = 6 xlFilterValues = 7 xlFilterCellColor = 8 xlFilterFontColor = 9 xlFilterIcon = 10 xlFilterDynamic = 11 # ------------------------------------------------------------------ # Excel Enum XlCVError # ------------------------------------------------------------------ xlErrDiv0 = 2007 xlErrNA = 2042 xlErrName = 2029 xlErrNull = 2000 xlErrNum = 2036 xlErrRef = 2023 xlErrValue = 2015 # ------------------------------------------------------------------ # Excel Enum XlCVError # ------------------------------------------------------------------ xlErrSpill = 2045 xlErrConnect = 2046 xlErrBlocked = 2047 xlErrUnknown = 2048 xlErrField = 2049 xlErrCalc = 2050 # ------------------------------------------------------------------ # Excel Enum XlCellType # ------------------------------------------------------------------ xlCellTypeConstants = 2 xlCellTypeBlanks = 4 xlCellTypeLastCell = 11 xlCellTypeVisible = 12 xlCellTypeFormulas = -4123 xlCellTypeComments = -4144 xlCellTypeAllFormatConditions = -4172 xlCellTypeSameFormatConditions = -4173 xlCellTypeAllValidation = -4174 xlCellTypeSameValidation = -4175 # ------------------------------------------------------------------ # Excel Enum XlColorIndex # ------------------------------------------------------------------ xlColorIndexAutomatic = -4105 xlColorIndexNone = -4142 # ------------------------------------------------------------------ # Excel Enum XlCutCopyMode # ------------------------------------------------------------------ xlCopy = 1 xlCut = 2 # ------------------------------------------------------------------ # Excel Enum XlDeleteShiftDirection # Excel Enum XlInsertShiftDirection # ------------------------------------------------------------------ xlShiftUp = -4162 xlShiftDown = -4121 xlShiftToLeft = -4159 xlShiftToRight = -4161 # ------------------------------------------------------------------ # Excel Enum XlDirection # ------------------------------------------------------------------ xlUp = -4162 xlDown = -4121 xlToLeft = -4159 xlToRight = -4161 # ------------------------------------------------------------------ # Excel Enum XlFileFormat # ------------------------------------------------------------------ xlCSV = 6 xlHtml = 44 xlWorkbookDefault = 51 xlOpenXMLWorkbook = 51 xlOpenXMLWorkbookMacroEnabled = 52 xlWorkbookNormal = -4143 xlCurrentPlatformText = -4158 # ------------------------------------------------------------------ # Excel Enum XlFindLookIn # ------------------------------------------------------------------ xlComments = -4144 xlCommentsThreaded = -4184 xlFormulas = -4123 xlValues = -4163 # ------------------------------------------------------------------ # Excel Enum XlFixedFormatQuality # ------------------------------------------------------------------ xlQualityStandard = 0 xlQualityMinimum = 1 # ------------------------------------------------------------------ # Excel Enum XlFixedFormatType # ------------------------------------------------------------------ xlTypePDF = 0 xlTypeXPS = 1 # ------------------------------------------------------------------ # Excel Enum XlLineStyle # ------------------------------------------------------------------ xlContinuous = 1 xlDashDot = 4 xlDashDotDot = 5 xlSlantDashDot = 13 xlDash = -4115 xldot = -4118 xlDouble = -4119 xlLineStyleNone = -4142 # ------------------------------------------------------------------ # Excel Enum XlLookAt # ------------------------------------------------------------------ xlPart = 2 xlWhole = 1 # ------------------------------------------------------------------ # Excel Enum XlOrientation # ------------------------------------------------------------------ xlHorizontal = -4128 xlVertical = -4166 xlDownward = -4170 xlUpward = -4171 # ------------------------------------------------------------------ # Excel Enum XlPasteType # ------------------------------------------------------------------ xlPasteValues = -4163 xlPasteComments = -4144 xlPasteFormulas = -4123 xlPasteFormats = -4122 xlPasteAll = -4104 xlPasteValidation = 6 xlPasteAllExceptBorders = 7 xlPasteColumnWidths = 8 xlPasteFormulasAndNumberFormats = 11 xlPasteValuesAndNumberFormats = 12 xlPasteAllUsingSourceTheme = 13 xlPasteAllMergingConditionalFormats = 14 # ------------------------------------------------------------------ # Excel Enum XlReferenceStyle # ------------------------------------------------------------------ xlA1 = 1 xlR1C1 = -4150 # ------------------------------------------------------------------ # Excel Enum XlReferenceType # ------------------------------------------------------------------ xlAbsolute = 1 xlAbsRowRelColumn = 2 xlRelRowAbsColumn = 3 xlRelative = 4 # ------------------------------------------------------------------ # Excel Enum XlSearchDirection # ------------------------------------------------------------------ xlNext = 1 xlPrevious = 2 # ------------------------------------------------------------------ # Excel Enum XlSearchOrder # ------------------------------------------------------------------ xlByColumns = 2 xlByRows = 1 # ------------------------------------------------------------------ # Excel Enum XlSheetVisibility # ------------------------------------------------------------------ xlSheetVisible = -1 xlSheetHidden = 0 xlSheetVeryHidden = 2 # ------------------------------------------------------------------ # Excel Enum XlSortDataOption # ------------------------------------------------------------------ xlSortNormal = 0 xlSortTextAsNumbers = 1 # ------------------------------------------------------------------ # Excel Enum XlSortMethod # ------------------------------------------------------------------ xlPinYin = 1 xlStroke = 2 # ------------------------------------------------------------------ # Excel Enum XlSortOn # ------------------------------------------------------------------ xlSortOnValues = 0 xlSortOnCellColor = 1 xlSortOnFontColor = 2 xlSortOnIcon = 3 # ------------------------------------------------------------------ # Excel Enum XlSortOrder # ------------------------------------------------------------------ xlAscending = 1 xlDescending = 2 xlManual = -4135 # ------------------------------------------------------------------ # Excel Enum XlSortOrientation # ------------------------------------------------------------------ xlSortColumns = 1 xlSortRows = 2 # ------------------------------------------------------------------ # Excel Enum XlSortType # ------------------------------------------------------------------ xlSortValues = 1 xlSortLabels = 2 # ------------------------------------------------------------------ # Excel Enum XlSpecialCellsValue # ------------------------------------------------------------------ xlNumbers = 1 xlTextValues = 2 xlLogical = 4 xlErrors = 16 # ------------------------------------------------------------------ # Excel Enum XlUnderlineStyle # ------------------------------------------------------------------ xlUnderlineStyleNone = -4142 xlUnderlineStyleDouble = -4119 xlUnderlineStyleSingle = 2 xlUnderlineStyleSingleAccounting = 4 xlUnderlineStyleDoubleAccounting = 5 # ------------------------------------------------------------------ # Excel Enum XlYesNoGuess # ------------------------------------------------------------------ xlGuess = 0 xlYes = 1 xlNo = 2 # ------------------------------------------------------------------ # Excel起動 xlApp = win32com.client.Dispatch("Excel.Application") # https://stackoverflow.com/questions/2790825/ # ExcelのWindow最大化 win32gui.ShowWindow(xlApp.hwnd, win32con.SW_MAXIMIZE) # Excel表示 xlApp.Visible = 1 # Excelファイルオープン wb = xlApp.Workbooks.Open(f"{os.getcwd()}\\sample.csv") # Excelシートオブジェクト ws = wb.Worksheets(1) # ------------------------------------------------------------------ # 指定したシートを選択 # Select()の使用前にシートのActivate()が必要 ws.Activate() # ------------------------------------------------------------------ # A1セルを選択 ws.Range("A1").Select() # A1~B2を選択 ws.Range("A1:B2").Select() # A1とB2とC3とD4を選択 ws.Range("A1,B2,C3,D4").Select() # A1~B2とC3~D4を選択 ws.Range("A1:B2,C3:D4").Select() # ------------------------------------------------------------------ # A1セルを選択 ws.Cells(1, 1).Select() # A1~B2を選択 ws.Range(ws.Cells(1, 1), ws.Cells(2, 2)).Select() # ------------------------------------------------------------------ # 全セルを選択 ws.Cells.Select() # ------------------------------------------------------------------ # 1~2行を選択 ws.Range("1:2").Select() # A~B列を選択 ws.Range("A:B").Select() # https://www.relief.jp/docs/excel-vba-difference-range-rows-columns.html # 1~2行を選択 ws.Rows("1:2").Select() # https://www.relief.jp/docs/excel-vba-difference-range-columns.html # A~B列を選択 ws.Columns("A:B").Select() # ------------------------------------------------------------------ # 指定範囲の先頭行を選択 ws.Range("A1:D4").Rows(1).Select() # 指定範囲の先頭列を選択 ws.Range("A1:D4").Columns(1).Select() # ------------------------------------------------------------------ # (A1セル基準で)行全体を選択 ws.Range("A1").EntireRow.Select() # (A1セル基準で)列全体を選択 ws.Range("A1").EntireColumn.Select() # ------------------------------------------------------------------ # (A1セル基準で)最終列までの行を選択 ws.Range(ws.Range("A1"), ws.Cells(1, ws.Columns.Count).End(xlToLeft)).Select() # (A1セル基準で)最終行までの列を選択 ws.Range(ws.Range("A1"), ws.Cells(ws.Rows.Count, 1).End(xlUp)).Select() # ------------------------------------------------------------------ # (A1セル基準で)現在の領域を選択 ws.Range("A1").CurrentRegion.Select() # (現行シートの)使用中領域を選択 ws.UsedRange.Select() # (A1セル基準で)最終右下セル選択 ws.Range("A1").SpecialCells(xlLastCell).Select() # (A1セル基準で)可視状態セル選択 ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select() # ------------------------------------------------------------------ # 指定範囲の参照範囲の文字列を行列両方を絶対参照で取得 a = ws.UsedRange.Address print(a) # 指定範囲の参照範囲の文字列を行列両方を絶対参照で取得 a = ws.UsedRange.GetAddress() print(a) # 指定範囲の参照範囲の文字列を行列両方を絶対参照で取得 a = ws.UsedRange.GetAddress(True, True) print(a) # 指定範囲の参照範囲の文字列を行列両方を相対参照で取得 a = ws.UsedRange.GetAddress(False, False) print(a) # 指定範囲の参照範囲の文字列を行列両方を相対参照のA1形式で取得 a = ws.UsedRange.GetAddress(False, False, xlA1) print(a) # 指定範囲の参照範囲の文字列を行列両方を相対参照のR1C1形式で取得 a = ws.UsedRange.GetAddress(False, False, xlR1C1) print(a) # 指定範囲の参照範囲の文字列を行列両方を相対参照のxlA1形式の外部参照で取得 a = ws.UsedRange.GetAddress(False, False, xlA1, True) print(a) # ------------------------------------------------------------------ # 数式的な文字列のセル参照をR1C1形式からA1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlR1C1, False) a2 = ws.Application.ConvertFormula(a1, xlR1C1, xlA1) print(a1) print(a2) # 数式的な文字列のセル参照をA1形式からR1C1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlA1, False) a2 = ws.Application.ConvertFormula(a1, xlA1, xlR1C1) print(a1) print(a2) # 数式的な文字列のセル参照を相対参照のA1形式から絶対参照のA1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlA1, False) a2 = ws.Application.ConvertFormula(a1, xlA1, xlA1, xlAbsolute) print(a1) print(a2) # 数式的な文字列のセル参照を絶対参照のA1形式から相対参照のA1形式に変更 a1 = ws.UsedRange.GetAddress(True, True, xlA1, False) a2 = ws.Application.ConvertFormula(a1, xlA1, xlA1, xlRelative) print(a1) print(a2) # 数式的な文字列の外部参照のセル参照をA1形式からR1C1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlA1, True) a2 = ws.Application.ConvertFormula(a1, xlA1, xlR1C1) print(a1) print(a2) # 数式的な文字列の外部参照のセル参照をR1C1形式からA1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlR1C1, True) a2 = ws.Application.ConvertFormula(a1, xlR1C1, xlA1) print(a1) print(a2) # 数式的な文字列の外部参照のセル参照を相対参照のR1C1形式から絶対参照のA1形式に変更 a1 = ws.UsedRange.GetAddress(False, False, xlR1C1, True) a2 = ws.Application.ConvertFormula(a1, xlR1C1, xlA1, xlAbsolute) print(a1) print(a2) # 数式的な文字列の外部参照のセル参照を絶対参照のR1C1形式から相対参照のA1形式に変更 a1 = ws.UsedRange.GetAddress(True, True, xlR1C1, True) a2 = ws.Application.ConvertFormula(a1, xlR1C1, xlA1, xlRelative) print(a1) print(a2) # ------------------------------------------------------------------ # A1形式の外部参照のセル参照の文字列でRangeを取得 # R1C1形式は使用不可 a = ws.UsedRange.GetAddress(False, False, xlA1, True) rg = ws.Evaluate(a) print(rg.Address) # A1形式の外部参照のセル参照の文字列でRangeを取得 # R1C1形式は使用不可 a = ws.UsedRange.GetAddress(False, False, xlA1, True) rg = ws.Application.Evaluate(a) print(rg.Address) # ------------------------------------------------------------------ # https://thecodingforums.com/threads/328174/ # Range.Offset()Property用GetOffset()Method # 指定範囲をOffset ws.Range("A1:D4").GetOffset(2, 2).Select() # Range.Offset()Property用GetOffset()Method # 指定範囲をOffset ws.Range("A1:D4").GetOffset(RowOffset=3, ColumnOffset=3).Select() # Range.Offset()Property用GetOffset()Method # 指定範囲を縦方向にOffset ws.Range("A1:D4").GetOffset(RowOffset=3).Select() # Range.Offset()Property用GetOffset()Method # 指定範囲を横方向にOffset ws.Range("A1:D4").GetOffset(RowOffset=0, ColumnOffset=3).Select() # ------------------------------------------------------------------ # https://stackoverflow.com/questions/63112880/ # Range.Resize()Property用GetResize()Method # 指定範囲をResize ws.Range("A1:H8").GetResize(2, 2).Select() # Range.Resize()Property用GetResize()Method # 指定範囲をResize ws.Range("A1:H8").GetResize(RowSize=3, ColumnSize=3).Select() # Range.Resize()Property用GetResize()Method # 指定範囲の縦方向をResize ws.Range("A1:H8").GetResize(RowSize=3).Select() # Range.Resize()Property用GetResize()Method # 指定範囲の横方向をResize ws.Range("A1:H8").GetResize(RowSize=ws.Range("A1:H8").Rows.Count, ColumnSize=3).Select() # ------------------------------------------------------------------ # 指定範囲から指定の文字列を含むセルを選択 rg = ws.UsedRange rg.find("56", rg.GetResize(1, 1), xlValues, xlPart, xlByRows, xlNext, True).Select() # 指定範囲から指定の文字列と合致のセルを選択 rg = ws.UsedRange rg.find("56", rg.GetResize(1, 1), xlValues, xlWhole, xlByRows, xlNext, True).Select() # ------------------------------------------------------------------ # 指定セルの行数を取得 n = ws.Range("A1").Row print(n) # 指定セルの列数を取得 n = ws.Range("A1").Column print(n) # 指定範囲に含まれる行数を取得 n = ws.Range("A1:D4").Rows.Count print(n) # 指定範囲に含まれる列数を取得 n = ws.Range("A1:D4").Columns.Count print(n) # (A1セル基準で)最終行数を取得 n = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row print(n) # (A1セル基準で)最終列数を取得 n = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column print(n) # ------------------------------------------------------------------ # https://binary-star.net/excel-vba-columnchange # 数字列を英字列に変換 a = (ws.Cells(1, 1).Address).split("$")[1] print(a) a = (ws.Cells(1, 2).Address).split("$")[1] print(a) a = (ws.Cells(1, 3).Address).split("$")[1] print(a) a = (ws.Cells(1, 27).Address).split("$")[1] print(a) a = (ws.Cells(1, 53).Address).split("$")[1] print(a) # 英字列を数字列に変換 n = ws.Cells(1, "A").Column print(n) n = ws.Cells(1, "B").Column print(n) n = ws.Cells(1, "C").Column print(n) n = ws.Cells(1, "AA").Column print(n) n = ws.Cells(1, "BA").Column print(n) # ------------------------------------------------------------------ # A1セルに値を設定 ws.Range("A1").Value = 99999 # A1セルに数式を設定 ws.Range("A1").Formula = "=(3.14159-3)*100000" # ------------------------------------------------------------------ # A1セルの表示形式を設定 ws.Range("A1").NumberFormatLocal = "0.00" # ------------------------------------------------------------------ # A1セルの配置の縦位置を設定 ws.Range("A1").VerticalAlignment = xlCenter # A1セルの配置の横位置を設定 ws.Range("A1").HorizontalAlignment = xlCenter # A1セルの文字列の方向を設定 ws.Range("A1").Orientation = xlUpward # A1セルの文字列の方向を設定 ws.Range("A1").Orientation = 45 # A1セルの文字列の方向を設定 ws.Range("A1").Orientation = 0 # ------------------------------------------------------------------ # A1セルにフォントを設定 ws.Range("A1").Font.Name = "Yu Gothic UI" # A1セルのフォントのサイズを設定 ws.Range("A1").Font.Size = 12 # A1セルのフォントを太字に設定 ws.Range("A1").Font.Bold = True # A1セルのフォントを斜体に設定 ws.Range("A1").Font.Italic = True # A1セルのフォントに下線を設定 ws.Range("A1").Font.Underline = xlUnderlineStyleSingle # A1セルのフォントに取消線を設定 ws.Range("A1").Font.Strikethrough = True # ------------------------------------------------------------------ # A1セルの文字の色を設定(R+Gx256+Bx256x256) ws.Range("A1").Font.Color = 255 + 0 * 256 + 0 * 256 * 256 # A1セルの文字の色を設定(指定順序BGR) ws.Range("A1").Font.Color = int("FF0000", 16) # A1セルの文字の色を設定(指定順序RGB) ws.Range("A1").Font.Color = int("".join(list(reversed(["FF0000"[i : i + 2] for i in range(0, 6, 2)]))), 16) # A1セルの文字の色を設定(デフォルト) ws.Range("A1").Font.ColorIndex = xlColorIndexAutomatic # ------------------------------------------------------------------ # A1セルの背景の色を設定(R+Gx256+Bx256x256) ws.Range("A1").Interior.Color = 255 + 255 * 256 + 0 * 256 * 256 # A1セルの背景の色を設定(指定順序BGR) ws.Range("A1").Interior.Color = int("FFFF00", 16) # A1セルの背景の色を設定(指定順序RGB) ws.Range("A1").Interior.Color = int("".join(list(reversed(["FFFF00"[i : i + 2] for i in range(0, 6, 2)]))), 16) # A1セルの背景の色を設定(デフォルト) ws.Range("A1").Interior.ColorIndex = xlColorIndexNone # ------------------------------------------------------------------ # A1セルに罫線を設定 ws.Range("A1").Borders.Color = int("".join(list(reversed(["FF0000"[i : i + 2] for i in range(0, 6, 2)]))), 16) ws.Range("A1").Borders.LineStyle = xlContinuous ws.Range("A1").Borders.Weight = xlMedium # A1セルの罫線を解除 ws.Range("A1").Borders.LineStyle = xlLineStyleNone # A1セルの下側に罫線を設定 ws.Range("A1").Borders(xlEdgeBottom).Color = int("".join(list(reversed(["FF0000"[i : i + 2] for i in range(0, 6, 2)]))), 16) ws.Range("A1").Borders(xlEdgeBottom).LineStyle = xlContinuous ws.Range("A1").Borders(xlEdgeBottom).Weight = xlMedium # A1セルの下側の罫線を解除 ws.Range("A1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone # ------------------------------------------------------------------ # A1セルの値や数式を消去 ws.Range("A1").ClearContents() # A1セルの書式を消去 ws.Range("A1").ClearFormats() # A1セルを消去 ws.Range("A1").Clear() # A1セルを削除 ws.Range("A1").Delete() # A1セルを削除(上方向にシフト) ws.Range("A1").Delete(xlShiftUp) # A1セルを削除(左方向にシフト) ws.Range("A1").Delete(xlShiftToLeft) # A1セルに挿入 ws.Range("A1").Insert() # A1セルに挿入(下方向にシフト) ws.Range("A1").Insert(xlShiftDown) # A1セルに挿入(右方向にシフト) ws.Range("A1").Insert(xlShiftToRight) # ------------------------------------------------------------------ # (A1行基準で)高さを設定 ws.Range("A1").RowHeight = 30 # (A1列基準で)横幅を設定 ws.Range("A1").ColumnWidth = 30 # (A1行基準で)高さを自動調整 ws.Range("A1").EntireRow.AutoFit() # (A1列基準で)横幅を自動調整 ws.Range("A1").EntireColumn.AutoFit() # ------------------------------------------------------------------ # 個別のグループ化の表示と非表示を行う方法 # https://vbabeginner.net/%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e5%8c%96%e3%81%ae%e8%a1%a8%e7%a4%ba%e3%81%a8%e9%9d%9e%e8%a1%a8%e7%a4%ba/ # 行のグループ化を設定 ws.Range("A1").EntireRow.Group() # 行のグループ化を非表示 ws.Outline.ShowLevels(RowLevels=1) # 行のグループ化を表示 ws.Outline.ShowLevels(RowLevels=8) # 行のグループ化を解除 ws.Range("A1").EntireRow.Ungroup() # 列のグループ化を設定 ws.Range("A1").EntireColumn.Group() # 列のグループ化を非表示 ws.Outline.ShowLevels(RowLevels=0, ColumnLevels=1) # 列のグループ化を表示 ws.Outline.ShowLevels(RowLevels=0, ColumnLevels=8) # 列のグループ化を解除 ws.Range("A1").EntireColumn.Ungroup() # ------------------------------------------------------------------ # A1セルをB1セルに複写 ws.Range("A1").Copy(ws.Range("B1")) # A1セルをSheet2のA1セルに複写 ws.Range("A1").Copy(wb.Worksheets("Sheet2").Range("A1")) # A1セル基準の現在の領域をSheet2のA1セル基準で複写 ws.Range("A1").CurrentRegion.Copy(wb.Worksheets("Sheet2").Range("A1")) # A1セルをクリップボードに複写 ws.Range("A1").Copy() # クリップボードをB2セルに複写 ws.Activate() ws.Range("B2").Select() ws.Paste() # クリップボードをC3セルに複写(値の貼り付け) ws.Range("C3").PasteSpecial(xlPasteValues) # クリップボードをC3セルに複写(書式貼り付け) ws.Range("C3").PasteSpecial(xlPasteFormats) # クリップボードをC3セルに複写(数式貼り付け) ws.Range("C3").PasteSpecial(xlPasteFormulas) # 切り取りモードまたはコピー モードを解除 ws.Application.CutCopyMode = False # ------------------------------------------------------------------ # A1セルをB1セルに移動 ws.Range("A1").Cut(ws.Range("B1")) # A1セルをSheet2のA1セルに移動 ws.Range("A1").Cut(wb.Worksheets("Sheet2").Range("A1")) # A1セルをクリップボードに移動 ws.Range("A1").Cut() # 切り取りモードまたはコピー モードを解除 ws.Application.CutCopyMode = False # ------------------------------------------------------------------ # https://excel-ubara.com/excelvba4/EXCEL254.html # A1~D5の範囲にG16~J20の範囲を一括複写(値の貼り付け) ws.Range("A1:D5").Value = ws.Range("G16:J20").Value # A1~D5の範囲にG16~J20の範囲を一括複写(値の貼り付け) ws.Range("A1").GetResize(ws.Range("G16:J20").Rows.Count, ws.Range("G16:J20").Columns.Count).Value = ws.Range("G16:J20").Value # ------------------------------------------------------------------ # A1~D4の範囲の左側の列の内容を範囲に一括複写 ws.Range("A1:D4").FillRight() # E1~H4の範囲の上段の行の内容を範囲に一括複写 ws.Range("E1:H4").FillDown() # A5~D8の範囲の右側の列の内容を範囲に一括複写 ws.Range("A5:D8").FillLeft() # E5~H8の範囲の下段の行の内容を範囲に一括複写 ws.Range("E5:H8").FillUp() # ------------------------------------------------------------------ # A1~H1の範囲をA1~H8の範囲にAutoFill ws.Range("A1:H1").AutoFill(ws.Range("A1:H8")) # A1~H2の範囲をA1~H8の範囲にAutoFill ws.Range("A1:H2").AutoFill(ws.Range("A1:H8"), xlFillDefault) # ------------------------------------------------------------------ # A1セル基準の現在の領域をAutoFilter ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(Field=1, Criteria1=">30") # A1セル基準の現在の領域をAutoFilter ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(Field=1, Criteria1=">30", Operator=xlAnd, Criteria2="<80") # A1セル基準の現在の領域をAutoFilter ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(1, ">30") # A1セル基準の現在の領域をAutoFilter ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(1, ">30", xlAnd, "<80") # A1セル基準の現在の領域をAutoFilter ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(1, ">30", xlAnd, "<80") ws.Range("A1").CurrentRegion.AutoFilter(2, ">40", xlAnd, "<60") # AutoFilterの範囲を選択 ws.AutoFilter.Range.Select() # AutoFilterの範囲の可視状態セル選択 ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Select() # AutoFilterの範囲の可視状態セル行数 n = int(ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Count / ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Columns.Count) print(n) # AutoFilterの適用 ws.AutoFilter.ApplyFilter() # AutoFilterの絞り込み解除 if ws.FilterMode: ws.ShowAllData() # AutoFilterの解除 if ws.AutoFilterMode: ws.AutoFilterMode = False # ------------------------------------------------------------------ # A1セル基準の現在の領域を並び替え ( Range Sort Method ) # Typeを省略するとType以降のOrder2等の指定が無視される。 # TypeをNoneにするとエラーにはならないのだが誤動作する。 ws.Activate() ws.Range("A1").CurrentRegion.Select() ws.Range("A1").CurrentRegion.Sort( Key1=ws.Range("A1"), Order1=xlDescending, Key2=ws.Range("B1"), Type=None, Order2=xlDescending, Key3=ws.Range("C1"), Order3=xlAscending, Header=xlYes, MatchCase=False, Orientation=xlSortColumns, SortMethod=xlPinYin, DataOption1=xlSortNormal, DataOption2=xlSortNormal, DataOption3=xlSortNormal, ) # A1セル基準の現在の領域を並び替え ( Sort Object ) # MicrosoftのVBAのリファレンスでは省略可能とされていますが、 # 省略すると正常に並び替えされない場合があるので注意が必要。 ws.Activate() ws.Range("A1").CurrentRegion.Select() ws.Sort.SortFields.Clear() ws.Sort.SortFields.Add(Key=ws.Range("A1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlAscending) ws.Sort.SortFields.Add(Key=ws.Range("B1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlAscending) ws.Sort.SortFields.Add(Key=ws.Range("C1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlDescending) ws.Sort.SetRange(ws.Range("A1").CurrentRegion) ws.Sort.Header = xlYes ws.Sort.MatchCase = False ws.Sort.Orientation = xlSortColumns ws.Sort.SortMethod = xlPinYin ws.Sort.Apply() # ------------------------------------------------------------------ # AutoFilterを行なった上で並び替え ( Sort Object ) # MicrosoftのVBAのリファレンスでは省略可能とされていますが、 # 省略すると正常に並び替えされない場合があるので注意が必要。 ws.Activate() ws.Range("A1").CurrentRegion.Select() ws.Range("A1").CurrentRegion.AutoFilter() ws.Range("A1").CurrentRegion.AutoFilter(1, ">30", xlAnd, "<80") ws.AutoFilter.Sort.SortFields.Clear() ws.AutoFilter.Sort.SortFields.Add(Key=ws.Range("A1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlDescending) ws.AutoFilter.Sort.SortFields.Add(Key=ws.Range("B1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlDescending) ws.AutoFilter.Sort.SortFields.Add(Key=ws.Range("C1"), SortOn=xlSortOnValues, DataOption=xlSortNormal, Order=xlAscending) # ws.AutoFilter.Sort.SetRange() ws.AutoFilter.Sort.Header = xlYes ws.AutoFilter.Sort.MatchCase = False ws.AutoFilter.Sort.Orientation = xlSortColumns ws.AutoFilter.Sort.SortMethod = xlPinYin ws.AutoFilter.Sort.Apply() # ------------------------------------------------------------------ # シートの非表示 ws.Visible = xlSheetHidden # シートの表示 ws.Visible = xlSheetVisible # ------------------------------------------------------------------ # シートの保護の設定 ws.Protect() # シートの保護の解除 ws.Unprotect() # シートをパスワード付きで保護の設定 ws.Protect(Password="hoge") # シートのパスワード付きの保護の解除 ws.Unprotect(Password="hoge") # ------------------------------------------------------------------ # ブックの保護の設定 wb.Protect() # ブックの保護の解除 wb.Unprotect() # ブックをパスワード付きで保護の設定 wb.Protect(Password="hoge") # ブックのパスワード付きの保護の解除 wb.Unprotect(Password="hoge") # ------------------------------------------------------------------ # https://learn.microsoft.com/en-us/office/vba/api/excel.windows # Note that the active window is always Windows(1). # ズームの倍率の設定 ws.Activate() ws.Range("A1").Select() ws.Parent.Windows(1).Zoom = 90 # ------------------------------------------------------------------ # https://excelwork.info/excel/freezepanes/ # https://stackoverflow.com/questions/43146073/ # 枠の固定 ws.Activate() ws.Range("C3").Select() ws.Parent.Windows(1).FreezePanes = True # ------------------------------------------------------------------ # https://excel-ubara.com/excelvba4/EXCEL272.html # CTRL+HOME的A1セル選択 ws.Activate() ws.Range("A1").Select() ws.Application.Goto(ws.Range("A1"), True) # https://qiita.com/Tachy_Pochy/items/64fe16ec076c52556b2d # CTRL+HOME的選択 ( AutoFilter使用時は残念 ) ws.Activate() r = int(ws.Parent.Windows(1).SplitRow) + 1 c = int(ws.Parent.Windows(1).SplitColumn) + 1 ws.Cells(r, c).Select() # CTRL+HOME的関数 def SpecialCells_xlHomeCell(ws): r = int(ws.Parent.Windows(1).SplitRow) + 1 c = int(ws.Parent.Windows(1).SplitColumn) + 1 rg = ws.Cells(r, c) if ws.Parent.Windows(1).FreezePanes and ws.Parent.Windows(1).SplitRow and ws.AutoFilterMode and ws.FilterMode: rg = rg.GetResize(ws.Cells.Rows.Count - rg.Row + 1, ws.Cells.Columns.Count - rg.Column + 1) rg = ws.Application.Intersect(ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible), rg) rg = rg.GetResize(1, 1) return rg # CTRL+HOME的選択 ws.Activate() rg = SpecialCells_xlHomeCell(ws) rg.Select() ws.Application.Goto(rg, True) # ------------------------------------------------------------------ # 再計算 ws.Calculate() # 再計算 xlApp.Calculate() # Excelの警告メッセージの表示の停止 xlApp.DisplayAlerts = False # Excelの警告メッセージの表示の開始 xlApp.DisplayAlerts = True # Excelの画面の更新を停止 xlApp.ScreenUpdating = False # Excelの画面の更新を開始 xlApp.ScreenUpdating = True # https://stackoverflow.com/questions/3735378/#8561483 # Excelの画面の更新を強制 xlApp.ActiveWindow.SmallScroll() xlApp.WindowState = xlApp.WindowState # ------------------------------------------------------------------ # ActiveWorkbookの取得 wb = xlApp.ActiveWorkbook print(wb.Name) # ActiveWindowの取得 aw = xlApp.ActiveWindow print(aw.Caption) # ActiveSheetの取得 ws = xlApp.ActiveSheet print(ws.Name) # ActiveSheetの取得 ws = wb.ActiveSheet print(ws.Name) # ActiveCellをRangeで取得 rg = xlApp.ActiveCell print(rg.Address) # Application オブジェクトの取得 xl = rg.Application print(xl.Name) # Application オブジェクトの取得 xl = ws.Application print(xl.Name) # Application オブジェクトの取得 xl = wb.Application print(xl.Name) # ------------------------------------------------------------------ # シートの名称の変更 wb.Worksheets("Sheet2").Name = "Sheet9" # シートの追加 ws = wb.Worksheets.Add() # シートの複写 ( 指定シートの前に複写 ) ws.Copy(Before=wb.Worksheets("Sheet9")) ws = wb.Worksheets(wb.Worksheets("Sheet9").Index - 1) # https://stackoverflow.com/questions/52685699/ # シートの複写 ( 指定シートの後に複写 ) ws.Copy(Before=None, After=wb.Worksheets("Sheet9")) ws = wb.Worksheets(wb.Worksheets("Sheet9").Index + 1) # シートの移動 ( 指定シートの前に移動 ) ws.Move(Before=wb.Worksheets("Sheet9")) # https://stackoverflow.com/questions/52685699/ # シートの移動 ( 指定シートの後に移動 ) ws.Move(Before=None, After=wb.Worksheets("Sheet9")) # シートの削除 wb.Worksheets("Sheet3").Delete() wb.Worksheets("Sheet9").Delete() # ------------------------------------------------------------------ # シートをPDF出力 ws.ExportAsFixedFormat(Type=xlTypePDF, Quality=xlQualityStandard, Filename=f"{os.getcwd()}\\output.pdf") # ------------------------------------------------------------------ # ブックをファイルに上書き保存 # wb.Save() # ブックをXLSXファイルに保存 wb.SaveAs(Filename=f"{os.getcwd()}\\outputSaveAs.xlsx", FileFormat=xlOpenXMLWorkbook) # ブックをXLSファイルに保存 wb.SaveAs(Filename=f"{os.getcwd()}\\outputSaveAs.xls", FileFormat=xlWorkbookNormal) # ブックをCSVファイルに保存 wb.SaveAs(Filename=f"{os.getcwd()}\\outputSaveAs.csv", FileFormat=xlCSV) # ------------------------------------------------------------------ # ブックをクローズ # wb.Close() # ブックを保存せずにクローズ wb.Close(SaveChanges=False) # ------------------------------------------------------------------ # Excel終了 xlApp.Quit() # ------------------------------------------------------------------ if __name__ == "__main__": main()