投稿

4月, 2021の投稿を表示しています

vba 結合されたセルの列を隠す

Quick Edit Pencil
sub セルの名前から列を非表示(myRange As Range)

'    Dim myRange As Range
'    Set myRange = ActiveCell
'    Set myRange = ActiveSheet.Range("名前")

If myRange.MergeCells Then '結合を検証
    
        '結合されている
    
'        Debug.Print myRange.MergeArea.Address
        
        For Each cell In myRange.MergeArea
        
            Columns(cell.Column).Hidden = True
        
        Next
        
    Else
    
        '結合されていない
        
        Columns(cell.Column).Hidden = True
    
    End If

End sub

VBA 正規表現 複数の文字列の繰り返し パターン

Quick Edit Pencil
    Dim v As Variant
    With CreateObject("VBScript.RegExp")    '正規表現を利用する為のオブジェクトを作成
        .Pattern = "^(\d{1,2}r((\d{1})|(\d{1}(15|30|45|00)))(,|$|, )?)+$"   '文字列パターンを設定
         v = .test(Str.Value) '結果を格納
         Debug.Print v
    End With

正規表現 許可文字

Quick Edit Pencil
許可する文字

var str = @"^[0-9a-z@\+\?]+$";

#が入っているのでfalseになる
bool res = Regex.IsMatch("#azd@+", str);

vbaで正規表現

Quick Edit Pencil
参考サイト
 
Sub macro1()
    'RegExpオブジェクトの作成
    Dim reg As Object
    Set reg = CreateObject("VBScript.RegExp")
    
    '正規表現の指定
    With reg
        .Pattern = "[0-9]"      'パターンを指定
        .IgnoreCase = False     '大文字と小文字を区別するか(False)、しないか(True)
        .Global = True          '文字列全体を検索するか(True)、しないか(False)
    End With
    
    Dim str1 As String, str2 As String
    str1 = "東京1大阪2名古屋3"
    str2 = reg.Replace(str1, ",") '指定した正規表現を第2引数の区切り文字に置換
    
    MsgBox str2
End Sub
参考サイト

Sub Sample2()
'正規表現を使用して文字列を検索する
'**Executeメソッド**
 
  Dim Re As Object
  Dim Mc As Object
  Dim msg As String
  Dim i As Long
   
  '正規表現を利用する為のRegExpオブジェクトを作成
  Set Re = CreateObject("VBScript.RegExp")
   
  With Re
    '正規表現パターンの設定
    '[A-Z,a-z,0-9]で全てのアルファベットと0~9範囲の数値
    '「+」で直前に指定した文字の繰り返しを表す
    '[.][o][m]で「.com」という文字を表す
    'この指定で「.com」で終わる文字列という意味になる
    .Pattern = "[A-Z,a-z,0-9]+[.][o][m]"
     
    '複数マッチを有効
    .Global = True
     
    'セルA1に入力された文字列に対して検索を実行する
    Set Mc = .Execute(Cells(1, 1).Value)
  End With
   
  With Mc
    '対象文字の有無を判定
    If .Count > 0 Then
        For i = 0 To .Count - 1
           '対象文字「有り」の場合、文字を取得
           msg = msg & i + 1 & "番目の文字列:" & _
           .Item(i).Value & vbLf
        Next
     Else
        '対象文字「なし」の場合の文字列
        msg = "該当なし"
    End If
  End With
   
  'メッセージボックスの表示
  If msg = "該当なし" Then
      MsgBox msg, vbCritical
    Else
      MsgBox msg, vbInformation
  End If
   
End Sub


参考サイト

RegExpオブジェクトのプロパティとメソッド

Patternプロパティ正規表現で使用するパターンを設定します。.*や[A-Z]、(田中|鈴木)などの文字列です。
IgnoreCaseプロパティ大文字と小文字を区別しないときにTrueを設定します。デフォルトはFalseです。
Globalプロパティ検索対象の文字列内で、文字列全体を検索するにはTrueを設定します。デフォルトではFalseです。
Testメソッド正規表現によるマッチングを行います。パターンと一致した場合はTrueを返します。
Replaceメソッド検索文字列の中で正規表現によるマッチングを行い、成功するとそのマッチした部分を置換文字列と置き換えます。
ExecuteメソッドTestメソッドはマッチングが成功したかどうかをTrue/Falseで返します。Executeメソッドは、マッチングの結果をMatchesコレクションとして返します。MatchesコレクションはMatchオブジェクトの集合です。

MatchesコレクションはExecuteメソッドによって返されるコレクションです。Matchesコレクションには0個以上のMatchオブジェクトが含まれます。つまり、Executeメソッドの結果返ってきたMatchesコレクションにMatchオブジェクトが存在しなかったら、マッチングは失敗したということです。

Matchesコレクションのプロパティとメソッド

CountプロパティMatchesコレクション内でMatchオブジェクトの個数を返します。これを調べるとマッチングの成功/失敗がわかります。
Itemプロパティいわゆる一般的なコレクションのItemプロパティです。普通はMatches(1)のようにアクセスするので使うことはないでしょう。

Matchオブジェクトのプロパティとメソッド

FirstIndexプロパティ最初にマッチングに成功した位置を返します。文字列の先頭は0から始まります。
Lengthプロパティマッチした文字列の長さを返します。
Valueプロパティマッチした文字列を返します。

主なメタ文字とエスケープシーケンス

titletitle
^文字列の先頭
$文字列の末尾
\n改行
.改行を除く任意の1文字
*直前のパターンの0回以上の繰り返し
+直前のパターンの1回以上の繰り返し
?直前のパターンが0回または1回現れる
\d任意の数値
\D任意の数値以外の文字
\s任意のスペース文字
\S任意のスペース以外の文字
()パターンのグループ化
|パターンの論理和
[]キャラクタクラス