つらつら Excel VBA

私の備忘録です。

ExcelVBA

CollectionとDictionary

Collectionのキーは大文字小文字関係なし、TestとTESTが同じ扱い。 Dictionaryのキーは完全一致。TestとTESTは別物扱い。 以下、ざっくりとした使い方の違いメモ。 Option Explicit Sub CollectionとDictionary() 'Collection宣言 Dim col As Collection Set…

処理の停止

VBA実行中に処理を停止したい時の案。 停止検知時にメッセージボックスでも出せば、再開or終了とかもできそう。 UserForm作ってコマンドボタン2個、ラベル1個配置して以下を張り付け。 '------------------------------------------------------------------…

BOM有無UTF-8テキストファイルの読み書き

「Option Explicit」マジ大事。適当に書いても動くからVBA厄介デスヨネー。 UTF-8はBOM有で、UTF-8NはBOM無し。 本題。UTF-8はADODBを使って入出力します。FSOもついでに載せときます。 Option Explicit Public Sub テキストファイルUTF8読み込み(strFilePat…

オブジェクト廃棄のメモ

変数の宣言も廃棄も要らぬ書き方メモ。Withで囲まれている間だけ変数が有効。 Dim buf As String With CreateObject("Scripting.FileSystemObject") With .GetFile("テキストファイルパス").OpenAsTextStream buf = .ReadAll .Close End With End With Debug…

ドルマーク付の関数

文字列を返す関数とのこと。たまに見かけます。 Dim s$ なんかこれでString型になる模様。 IntegerとかLongとか他もろもろも、記号で同様の事ができる模様。 利点。Nullが使える! String型でNull判定が必要に!やったー!(怒)

ListViewコントロール

ListViewコントロールはこんな感じ。 通常、ツールボックスには出てません。 こんな感じで出して使う。 テスト作成したプログラム載せときます。 フォームはモードレスで動かす予定。 Private Sub UserForm_Initialize() With ListView1 .View = lvwReport '…

テキスト一括出力タブ区切り

Sub テキストファイルタブ区切り一括出力() Dim buf As String '1行 Dim delimiter As String '区切り文字 Dim row As Range, clm As Range Dim ws As Worksheet Dim outputTxt As String '全データ Dim outputFilePath As String '出力パス Dim fileNo As I…

テキスト出力タブ区切り(簡易)

Sub テキストファイル出力タブ区切り() Sheets(1).Copy '新しいブックが作成される Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\temp\test.txt", FileFormat:=xlText ActiveWorkbook.Close 'SaveChanges:=False Application.Dis…

テキストファイル読み込みタブ区切り

Sub テキストファイル読み込みタブ区切り() Dim filePath As String Dim buf As String, iRow As Integer Dim i As Integer Dim temp As Variant Dim fileNo As Integer filePath = Application.GetOpenFilename("CSVファイル(*.csv),*.csv,テキストファイル…

Union

If rrr Is Nothing Then Set rrr = r Else Set rrr = Union(rrr, r) End If

ファイルの移動と名前変更

Name ファイルパス As 変更後ファイルパス '勿論エラー処理が必要

指定の文字が何個含まれるか数える

Private Function stringCount(strA As String, strB As String) As Integer stringCount = UBound(Split(strA, strB))End Function 'エラー処理が必要

ハイパーリンクを削除して保存を繰り返す

Sub ハイパーリンクを削除して保存する処理() Dim targetWb As Workbook, targetWsh As Worksheet Dim strFolderPath As String strFolderPath = ThisWorkbook.Path & "\指定フォルダ\" '画面の更新を停止して処理を高速化 Application.ScreenUpdating = Fal…

フォーム上でログ表示したい

'formにListBoxを用意して、Moduleに以下を追加 Private Sub LogAdd(s As String) If s = "" Then Exit Sub With UserForm1.LstBox_Log .AddItem s .ListIndex = .ListCount - 1 '最後尾を選択 .Selected(.ListCount - 1) = False '選択解除 End With DoEven…

オートフィルタで重複データを抽出

Sub Macro1() ' 重複データに色をつける条件付き書式 Range("B:B").Select Range("B:B").FormatConditions.Delete Selection.FormatConditions.AddUniqueValues '条件付き書式の追加 Selection.FormatConditions(1).DupeUnique = xlDuplicate '重複 Selectio…

カレントディレクトリの変更とファイル選択ダイアログの表示場所

Private Sub readLineTextFile() Dim fType As String, promptText As String, chDirPath As String Dim fPath As Variant Dim buf As String 'カレントディレクトリを移動 curDirPath = CurDir ChDir ActiveWorkbook.Path fType = "テキストファイル (*.txt…

データ格納クラスを連想配列で使用する

'クラスモジュールKakunouClassを作成 '系統格納用クラスPublic Name As StringPublic Father As StringPublic Mother As String '自分自身を返すPublic Property Get Self() As KakunouClass Set Self = MeEnd Property '============================== Di…

エクセルシートを個別にブック保存する連続処理

'シート1枚目を残してシート名をファイル名としてブック保存する処理 Sub ブック吐き出し() Dim strSaveFileName As String, strSavePath As String strSavePath = ThisWorkbook.Path & "\個別\" '画面の更新を停止して処理を高速化 Application.ScreenUpdat…

ブラウザIEを開いてエクセルにコピペする処理

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) '処理待機Sleep用 'IE上で全て選択とコピーを行ない、Excelの新規シートに貼り付けるFunction getHTML(strSheetName As String, strUrl As String) As Boolean getHTML = True Dim objIE As Ob…

ハイパーリンクのURLを取得

strURL = r.Hyperlinks(1).Address

ステータスバーにメッセージ表示

Application.StatusBar = "表示文字" Application.StatusBar = False 'Excelに返す

ハイパーリンク一括削除

ActiveSheet.Hyperlinks.Delete

InstrRev関数

後ろから探して、前から数える

Interior.ColorとInterior.ColorIndex

Interior.Colorでは背景色未設定が判別できないので、以下のようにする。 If Interior.ColorIndex=xlNone Then 最悪、16777215で比較するとできる

フリガナ削除と設定

For Each rng In Selection rng.Characters.PhoneticCharacters = ""Next rng '上記は削除。設定も同様に行う

Interior.ColorIndex

背景色をコピーする時、結果が異なるのは仕様なのだろうか r.Interior.ColorIndex = rr.Interior.ColorIndex r.Interior.Color = rr.Interior.Color 私は下を使う事にする

ランダム値を重複なしで取得

Dim DIC As Object, mKey Dim i As Integer, rd As Integer, no As IntegerSet DIC = CreateObject("Scripting.Dictionary")For i = 1 To 52 '連想配列の作成。 DIC.Add i, i Next For i = 52 To 1 Step -1 rd = getRandom(1, i) '1~iの範囲でランダム値を…

フォームに画像ファイル表示

Dim gazou As Stringgazou = ThisWorkbook.Path & "\gif\gazou.gif" Image1.Picture = LoadPicture(gazou)

オートフィルタ

'オートフィルタで絞り込み、必要列だけデータを取得する。 searchData = "*条件を含む*" wsh.AutoFilterMode = False 'オートフィルタ解除 wsh.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=searchData Set targetRange = wsh.Range("A1").C…

Select文の使い方メモ

Select文は上から順に条件を確認し、一致したところで終わる。 基本編 Select Case aaa Case "A" Case "B" Case Else End Select 応用編 Select Case True Case aaa Like "*A*" Case aaa Like "*B" Case Else End Select