読者です 読者をやめる 読者になる 読者になる

【RemoveDuplicates】重複削除する

・サンプル 

Range("A1:B" & .Cells(1, 1).End(xlDown).Row).RemoveDuplicates Columns:=Array(1, 2),Header:=xlYes

このサンプルはA1からの連続最終行を求め、A1:B最終行の範囲を指定。
重複判定Columnsに1列目(A列),2列目(B列)を指定しヘッダー(範囲内の1行目)は残す設定。

式 Range.RemoveDuplicates(Columns, Header)

引数 optional or required 説明
Columns 必須 バリアント型 重複判定する列のインデックスの配列を指定
Header 任意 XlYesNoGuess 1行目をヘッダーとするかどうか。XlGuessは自動判定

 XlGuessの自動判定とはExcelに表として認識された場合のみヘッダーとする。
使わないほうが無難。

Range.RemoveDuplicates メソッド (Excel)

【AdvancedFilter】テーブルからデータ抽出

テーブルから条件を指定して抽出する

Worksheets("").Range("").AdvancedFilter _'テーブルを指定
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("").Range(""), _'抽出条件がある範囲を指定
CopyToRange:=Worksheets("").Range(""), _'抽出先を指定
Unique:=False
End Sub
Action
必須
xlFilterCopy
(値は2)
リスト範囲とは他の場所に抽出データをコピーします
xlFilterInPlace
(値は1)
リスト範囲内にデータを抽出します
CriteriaRange
(省略可能)
Variant型の値を使用する 検索条件範囲を指定します。
省略すると、検索条件なしで抽出されます。
CopyToRange
(省略可能)
Variant型の値を使用する 引数 ActionがxlFilterCopyのときは、抽出された行のコピー先のセル範囲を指定します。
それ以外の場合、この引数は無視されます。
Unique
(省略可能)
True 検索条件に一致するレコードのうち、重複するレコードは無視されます。
FALSE 重複するレコードも含めて、検索条件に一致するレコードがすべて抽出されます。

 ・複数条件の指定方法

 横に並べるとand、縦に並べるとor になる

フィールド1 フィールド1 フィールド2
abc def ghi
123 456 789

この場合、or(and(フィールド1=abc,フィールド1=def,フィールド2=ghi),and(フィールド1=123,フィールド1=456,フィールド2=789))

が抽出される

Excel(エクセル)VBA入門:フィルタオプション(AdvancedFilter)でのデータ抽出

【VBA】便利コード集

実行中の表示を更新するかしないか (Trueにするのを忘れずに)

Application.ScreenUpdating = False

 

実行中のアラートを無視するかしないか (Trueにするのを忘れずに)
※無視した場合Yesで処理されるので注意

Application.DisplayAlerts = False

特定のブックを開く(既に開いていたらActivateする)

 

Dim WB As Workbook
Dim fl As Boolean

fl = False

For Each WB In Workbooks
If WB.Name = "ブック名" Then fl = True
Next WB
If fl Then
Workbooks("ブック名").Activate
Else
Workbooks.Open ("ディレクトリ+ブック名")
End If
Next

 

フォルダ内にある全ファイル名取得

VBSでファイルを取得してMsgを表示する

Dim objFileSys
Dim objFolder
Dim objFile

Set objFileSys = CreateObject("Scripting.FileSystemObject")

'フォルダオブジェクトを取得
Set objFolder = objFileSys.GetFolder("ディレクトリ名")

'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
WScript.Echo objFile.Name
Next

Set objFolder = Nothing
Set objFileSys = Nothing

↓こちらはtxtに出力する

Dim objFileSys
Dim objFolder
Dim objFile
Dim objOutputTextStream

Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objOutputTextStream = objFileSys.OpenTextFile("log.txt", 2, True)

'フォルダオブジェクトを取得
Set objFolder = objFileSys.GetFolder("ディレクトリ名")

'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
'ファイル名を取得し、ログファイルに出力
objOutputTextStream.WriteLine objFile.Name
Next

'TextStream は Close を忘れずに
objOutputTextStream.Close

Set objOutputTextStream = Nothing
Set objFolder = Nothing
Set objFileSys = Nothing

 

フォルダ内のファイル一覧を取得する[VBScript] : バヤシタ

ログファイル作成 & 追記

VBSでログファイルを作成する

Dim objFSO,objLog

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objLog = objFSO.OpenTextFile("
ファイル名",8,True)

objLog.WriteLine("
任意の文字列")

objLog.Close
Set objLog = Nothing
Set objFSO = Nothing

ディレクトリに一致するファイルがなければ作成される
OpenTextFile の2つ目の引数 = 1:読み取り 2:上書き 8:追加

 

OpenTextFile メソッド

VBScriptで処理した結果をログに書き出す - Qiita

【RegExp】文字列比較

VBSで文字列を比較する

Dim objRE

Set objRE = CreateObject("VBScript.RegExp")
objRE.Pattern = "比較したい文字列"

If objRE.Test("比較する文字列") Then
一致したときの動作
Else
一致しないときの動作
End If

Set objRE = Nothing

正規表現

文字列の先頭を指定 = ^
文字列の後尾を指定 = $
不特定多数の不明文字列 = .*
不明文字 = .

 

VBScript(VBスクリプト)でLikeするには? - 燈明日記