EXCEL VBA マクロを組むとき列番号の把握をしやすいよう、シートの1行目に列番号を記入する
マクロを組むとき列番号の把握をしやすいよう、シートの1行目に列番号を記入します。
既に値が入ったセルには書き込みません。
Public Sub test() Call nisub列番号を1行目に挿入 End Sub ' ' 1行目に列番号を入れる。 'https://pgbigoroku.hatenablog.com/entry/2022/08/24/154418 '2022/8/15 Public Sub nisub列番号を1行目に挿入(Optional ByVal pint最終列 As Integer = 100) Dim intCol As Integer For intCol = 1 To pint最終列 If Cells(1, intCol) = "" Then Cells(1, intCol) = "=COLUMN()" End If Next End Sub
EXCEL VBA クリップボードからセルにPaste時に「実行時エラー1004:この操作は結合したセルには行えません。」を回避する
F12を押した場所に貼り付けます。
Application.OnKey "{F12}", "subFromClipbord" ' ' クリップボードからセルにPaste時に「実行時エラー1004:この操作は結合したセルには行えません。」を回避する 'https://pgbigoroku.hatenablog.com/entry/2022/08/23/171554 '2022/8/21 Public Sub subFromClipbord() Dim wkbNow As Workbook Dim wksNow As Worksheet Dim wkbNew As Workbook Dim strFromClipboard As String Dim strMageArea As String Dim strMageArea1つめのセル As String If nirngSelectionの1つ目のセル.MergeCells = True Then '結合されている場合 Set wkbNow = ActiveWorkbook Set wksNow = ActiveSheet '現状の情報を保持 strMageArea = Selection.Address strMageArea1つめのセル = nirngSelectionの1つ目のセル.Address Set wkbNew = Workbooks.Add() ActiveSheet.Paste strFromClipboard = wkbNew.Worksheets(1).Cells(1, 1) Range("A1").Delete 'コピー先シートから、テンポラリシートへコピー(フォント等維持のため) wkbNow.Activate Selection.Copy wkbNew.Activate Range(strMageArea).Select ActiveSheet.Paste Application.CutCopyMode = False 'いったん結合を外してコピー Selection.UnMerge wkbNew.Worksheets(1).Range(strMageArea1つめのセル) = strFromClipboard Range(strMageArea).Merge '貼り付け Range(strMageArea).Copy wksNow.Range(strMageArea) wkbNew.Close (False) Else ActiveSheet.Paste End If End Sub
EXCEL VBA 選択したセルすべてが結合セルの1つの場合
If nirngSelectionの1つ目のセル.MergeArea.Address = Selection.Address Then '選択したセルすべてが結合セルの1つの場合 End If ' Selectionの1つ目のセル ' https://blog.hatena.ne.jp/nakairo/pgbigoroku.hatenablog.com/edit ' 2021/8/21 Public Function nirngSelectionの1つ目のセル() As Range Dim strSelection As String strSelection = Selection.Address strSelection = nistr文字列検索をして1つ目の区切り位置までの値を取得(strSelection, ",") strSelection = nistr文字列検索をして1つ目の区切り位置までの値を取得(strSelection, ":") Set nirngSelectionの1つ目のセル = Range(strSelection) End Function ' 文字列検索をして1つ目の区切り位置までの値を取得 'https://pgbigoroku.hatenablog.com/entry/2022/08/23/161312 ' 2021/8/21 Public Function nistr文字列検索をして1つ目の区切り位置までの値を取得(ByVal pstrTarget As String, ByVal pstrDivide As String) Dim intInstr As Integer intInstr = InStr(pstrTarget, pstrDivide) If intInstr = 0 Then nistr文字列検索をして1つ目の区切り位置までの値を取得 = pstrTarget Else nistr文字列検索をして1つ目の区切り位置までの値を取得 = Left(pstrTarget, intInstr - 1) End If End Function
EXCEL VBA 文字列検索をして1つ目の区切り位置までの値を取得
Debug.print=nistr文字列検索をして1つ目の区切り位置までの値を取得(strSelection, ",") ' 文字列検索をして1つ目の区切り位置までの値を取得 'https://pgbigoroku.hatenablog.com/entry/2022/08/23/161312 ' 2021/8/21 Public Function nistr文字列検索をして1つ目の区切り位置までの値を取得(ByVal pstrTarget As String, ByVal pstrDivide As String) Dim intInstr As Integer intInstr = InStr(pstrTarget, pstrDivide) If intInstr = 0 Then nistr文字列検索をして1つ目の区切り位置までの値を取得 = pstrTarget Else nistr文字列検索をして1つ目の区切り位置までの値を取得 = Left(pstrTarget, intInstr - 1) End If End Function
EXCEL VBA 全シートのオートフィルタ―の絞り込みを辞める
オートフィルターにデータが隠れていて、再度確認した事ないですか?
このマクロは、開いているブックのすべてのシートのオートフィルターを解除します!
Sub psn全シートのオートフィルタ―の絞り込みを辞める() '全シートを標準ビューにする。 Call msub全シートのオートフィルタ―の絞り込みを辞める(ActiveWorkbook) End Sub ' 指定ブックについて全シートのオートフィルタ―の絞り込みを辞める。 ' '引数 ByVal wkbTarget As Workbook 対象ブック 'URL https://pgbigoroku.hatenablog.com/entry/2022/08/23/142805 ' '2022/8/18 Public Sub msub全シートのオートフィルタ―の絞り込みを辞める(ByVal wkbTarget As Workbook) Dim intFor As Integer With wkbTarget .Activate For intFor = .Worksheets.Count To 1 Step -1 If .Worksheets(intFor).FilterMode Then .Worksheets(intFor).ShowAllData End If Next End With End Sub
EXCEL VBA 指定のセルにデータが入っているか確認します。
MsgBox ni指定セルに値が入っているか(ActiveSheet, "B2:C2,D4:D5") ' ' 機能 : 指定のセルにデータが入っているか確認します。 ' ' 返り値 : TRUE 文字が入力されている。 ' FALSE 空白(LEN(0)の文字列) ' ' 引き数 : ByRef wksTarget As Worksheet 対象のワークシート ' ByVal pstrセルの場所A1形式 As String 確認したいセルをA1形式で指定 ' 機能説明 : - ' ' 備考 : - ' ' この関数のURL :https://pgbigoroku.hatenablog.com/entry/2022/08/22/165014 ' ' バージョン :2022/8/21 Public Function ni指定セルに値が入っているか(ByRef wksTarget As Worksheet, ByVal pstrセルの場所A1形式 As String) Dim varFor As Variant For Each varFor In wksTarget.Range(pstrセルの場所A1形式) If Len(varFor) > 0 Then ni指定セルに値が入っているか = True Exit Function End If Next ni指定セルに値が入っているか = False End Function
EXCEL VBA 複数シートを選択する
ワークシートを複数したい場合に、配列でセレクトってRedimし直しで煩雑なコードになりませんか?
今回は、コレクションを利用してシンプルなコードで指定できるようにしました!
サンプル
「Sheet1とSheet3とSheet5を選択する。」
Sub test() Dim cllTemp As New Collection cllTemp.Add "Sheet5" cllTemp.Add "Sheet3" cllTemp.Add "Sheet1" ni複数シート選択 ActiveWorkbook, cllTemp End Sub ' 機能 : 複数シートを選択する。 ' ' 返り値 : - ' ' 引き数 : ByRef wkbTarget As Workbook 対象のワークブック ' ByRef pcll印刷シート名 As Collection 選択するワークシート名 ' 機能説明 : 存在しないシート名を指定した場合、エラーになります。 ' ' 備考 : - ' ' この関数のURL :https://pgbigoroku.hatenablog.com/entry/2022/08/22/162205 ' ' バージョン :2022/8/21 ' Public Sub ni複数シート選択(ByRef wkbTarget As Workbook, ByRef pcll印刷シート名 As Collection) Dim arySheetName() As String Dim intFor As Integer ReDim arySheetName(0 To pcll印刷シート名.Count - 1) For intFor = 0 To pcll印刷シート名.Count - 1 arySheetName(intFor) = pcll印刷シート名(intFor + 1) Next wkbTarget.Sheets(arySheetName).Select End Sub