カテゴリー別アーカイブ: Excel

Excel 2つのシート間で重複するデータと重複しないデータを調べる

Sheet1とSheet2の2つのデータ間で、両方のシートに存在しているものと、Sheet2にしかないデータを調べる方法です。

sheet1

Sheet1の内容

sheet2

Sheet2の内容

Sheet2のB1セルに
=COUNTIF(Sheet1!A:A,Sheet2!A1)=0
(Sheet2のA1セルの内容がSheet1のA列に1つ以上存在しているかを調べている)
と入力し、B1セルの内容をB列にコピーする。

sheet2結果

Sheet2のA列で、Sheet2にしかない行はTRUEが表示され、Sheet1とSheet2両方にある行は、FALSEが表示されている。

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

Excel VBAマクロ:タイトル名で列選択

Excelマクロで列選択を列番号でしていると、新しい行が間に挿入されるなどで列がずれると処理が正しく行われなくなり、マクロのその部分を書き換えなければなりません。

1行目などがタイトル行になっていて、タイル文字列がある場合、タイトル文字列で列を指定するようにしておくと列がずれても修正しなくて良くなります。
ということで、タイトル文字列で列選択するマクロです。

'タイトル行(1行目)で文字列マッチする列を選択
Sub ColumnSelectByTitle(title As String)
    Dim titleRow As Integer
    titleRow = 1   ' タイトル行番号
    
    Dim i As Integer
    For i = 1 To EndColumn()
        If Cells(titleRow, i).Text() = title Then
            Columns(i).Select
            Exit Sub      ' 正常終了
        End If
    Next
    
   'エラー終了
    Err.Description = "タイトル行に指定文字列( " + title + " ) が見つかりませんでした"
    Err.Raise (60000)
    MsgBox (Err.Description)
End Sub

テスト用のシートの内容

上記を”名前”列で選択したい場合

Sub testOk()
    ColumnSelectByTitle ("名前")
End Sub

結果

マッチするタイトル名が無い場合、Excelをエラー終了させるようにしています。

Sub testNg()
    ColumnSelectByTitle ("あああ")
End Sub

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

ExcelなどのVBAマクロで、エラー終了させる方法

エラー終了させたい時のコード

Sub errorTest()

   'エラー終了
    Err.Description = "XXXXエラーが発生しました"
    Err.Raise (60000)    ' 数値は適当に
    MsgBox (Err.Description)
    
    MsgBox ("ここにはこない")

End Sub

これを実行すると、5行目の Err.Raise (60000)で処理が終了し、以下のダイアログが表示されます。
8行目の MsgBox (“ここにはこない”) は実行されません。
SubやFunctionの中でも呼び出し元に戻ること無く終了します。

ダイアログの[デバッグ(D)]ボタンをクリックすると、エラーを発生させた、
5行目の Err.Raise (60000) を表示します。

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

Excel VBA マクロ:パターンマッチ(正規表現)した文字列をメッセージと別の列に書き出す

A列の様にURLが入っているなかから、ドメイン名だけをパターンマッチで取り出し、メッセージボックスで表示し、また、B列にも記入するマクロ

A B
1 http://kenlog.net/category/excel/
2 https://www.google.co.jp/

A B
1 http://kenlog.net/category/excel/ kenlog.net
2 https://www.google.co.jp/ www.google.co.jp

 

Sub RegExpSample()
    Dim RE, reMatch
    Dim strPattern As String
    Dim i As Long
    Dim msg As String
    Dim matchString As String

    Set RE = CreateObject("VBScript.RegExp")

    strPattern = "https?://([^/]+)/"     '検索パターン:ドメイン名の部分を()でグルーピング化

    With RE
        .Pattern = strPattern
        .IgnoreCase = True   '大文字と小文字を区別する
        .Global = False       '1回目のマッチで終了
        For i = 1 To ActiveSheet.UsedRange.End(xlDown).Row 'データが有る最終行まで
            Set reMatch = .Execute(Cells(i, 1))   'A列で検索実行
            If reMatch.Count > 0 Then             'マッチ
                matchString = reMatch(0).Submatches(0) '検索パターンのグルーピング化[()内]
                msg = msg & matchString & vbCrLf
                Cells(i, 2).Value = matchString   'B列に入れる
            End If
        Next i
    End With
    MsgBox msg
    Set reMatch = Nothing
    Set RE = Nothing
End Sub
↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

Excel VBA マクロ:指定カラムが空の行を削除する


Sub removeBalkLines()
' 1行目にダミー行を追加(ヘッダー行を消されないよう)
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'AutoFilterでA1セルが空白な行のみ選択
Cells.Select
Selection.AutoFilter
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="="
'対象行を全て削除
Selection.Delete Shift:=xlUp
' A1セルに選択を戻しておく
Range("A1").Select
End Sub
↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ