vectorの要素削除

// 0 〜 4が入ったvector型変数numbersを用意
std::vector<int> numbers {0, 1, 2, 3, 4};
    
// aとbを除きたい
int a = 1;
int b = 3;

// iteratorで内部要素を回し、該当値であればその要素を削除
for (auto itr = numbers.begin(); itr != numbers.end(); itr++)
{
    if (((*itr) == a) || ((*itr) == b))
    {
        numbers.erase(itr);
  break; 
    }
}

ネタ元

blog.dalt.me

SQLite には、データを一括挿入するための特別な方法はありません

SQLite には、データを一括挿入するための特別な方法はありません。 データの挿入または更新時に最適なパフォーマンスを得るには、以下を行ってください。

トランザクションの使用。
同じパラメーター化コマンドの再利用。 後続の実行で、最初の実行のコンパイルを再利用します。

ネタ元

docs.microsoft.com

ExcelVBA ThisWorkbook.RefleshAllで更新待ちしてくれない対策

サンプル。指定シートの更新を行ってから待つ

クラス CQtEvents

Option Explicit

Private WithEvents mQryTble As QueryTable
Private mRefreshed As Boolean
Private mCallback As String

Public Property Set QryTble(ByVal QryTable As QueryTable): Set mQryTble = QryTable: End Property
Public Property Get QryTble() As QueryTable: Set QryTble = mQryTble: End Property

Public Property Let Refreshed(ByVal paramRefreshed As Boolean): mRefreshed = paramRefreshed: End Property
Public Property Get Refreshed() As Boolean: Refreshed = mRefreshed: End Property

Public Property Let Callback(ByVal SpecifiedProcName): mCallback = SpecifiedProcName: End Property

Private Sub Class_Initialize()
    mRefreshed = False
End Sub

Private Sub mQryTble_BeforeRefresh(Cancel As Boolean)
    mRefreshed = False
    Debug.Print "*** mQryTble_BeforeRefresh(): Refreshed=" & Refreshed
End Sub

Private Sub mQryTble_AfterRefresh(ByVal Success As Boolean)
    mRefreshed = True
    Debug.Print "*** mQryTble_AfterRefresh(): Refreshed=" & Refreshed, "Success=" & Success
    If mCallback <> "" Then Application.Run mCallback, Success
End Sub

メインコード

    Dim TargetTable As ListObject: Set TargetTable = Sheets("hogehoge").ListObjects(1)
    TargetTable.DataBodyRange.Rows.Delete ' いったんテーブルのデータを全てクリア
    
    Dim TargetQueryTable As QueryTable: Set TargetQueryTable = TargetTable.QueryTable
    Dim classQtEvents As CQtEvents: Set classQtEvents = New CQtEvents
    Set classQtEvents.QryTble = TargetQueryTable
    
    Dim BeforeTime: BeforeTime = Timer
    Debug.Print "[Before] TargetQueryTable.Refreshing:" & TargetQueryTable.Refreshing, "Rows.Count: " & TargetTable.Range.Rows.Count
    
    classQtEvents.QryTble.Refresh BackgroundQuery:=False ' クエリ更新を待つ
    
    'Debug.Print "[After]  TargetQueryTable.Refreshing:" & TargetQueryTable.Refreshing, "Rows.Count: " & TargetTable.Range.Rows.Count
    'Debug.Print "[Completed] " & Format(Timer - BeforeTime, "00:00:00.000")

ネタ元

gist.github.com

ExcelVBAでテキストファイルを比較

'テキストファイルの比較
'同じならTrue / 違うなら False
Function DiffTxtFile(aFilepath1 As String, aFilepath2 As String) As Boolean

    DiffTxtFile = True
    
    ' 機能:2つのテキストファイルを比較する
    ' 【変数定義】
    Dim file1(1) As String ' ファイル名(フルパス)
    Dim file2(1) As String ' ファイル名
    Dim nFNO(1) As Integer 'ファイル番号
    Dim buf(1) As String ' テキスト読み出し用バッファ
    Dim line_no(1) As Integer ' 行数
    Dim str1 As String ' 文字列
    Dim i As Integer ' 整数
    ' ファイル名
    file1(0) = aFilepath1 ' テキストファイル1のファイル名(フルパス)
    file1(1) = aFilepath2 ' テキストファイル2のファイル名(フルパス)
    ' ファイルが存在するか確認
    For i = 0 To 1
      If Dir(file1(i)) = "" Then
        MsgBox i & ": " & file1(i) & "が存在しません。"
        Exit Function
      End If
    Next
    For i = 0 To 1
      ' 使用可能なファイル番号を調べる
      nFNO(i) = FreeFile()
      ' ファイルを開く
      Open file1(i) For Input As #nFNO(i)
      ' 行数を初期化
      line_no(i) = 0
      ' ファイル名から、パスを除く
      file2(i) = Dir(file1(i))
    Next
    ' どちらかのファイルがEOFになるまで繰り返す
    Do Until EOF(nFNO(0)) Or EOF(nFNO(1))
      For i = 0 To 1
        Line Input #nFNO(i), buf(i) ' 1行ずつ読み出す
        line_no(i) = line_no(i) + 1 ' 行番号を1増やす
        ' 1行ずつ比較
        If i = 1 And StrComp(buf(0), buf(1), vbTextCompare) <> 0 Then
           DiffTxtFile = False
          MsgBox line_no(0) & "行目が異なります。" & vbCrLf _
          & file2(0) & "=" & buf(0) & vbCrLf _
          & file2(1) & "=" & buf(1)
           GoTo label_escape
        End If
      Next
    Loop
    ' 行数が異なるか?
    If EOF(nFNO(0)) <> EOF(nFNO(1)) Then
      For i = 0 To 1
        If EOF(nFNO(i)) = False Then
          Do Until EOF(nFNO(i))
            Line Input #nFNO(i), buf(i) ' 1行ずつ読み出す
            line_no(i) = line_no(i) + 1 ' 行番号を1増やす
          Loop
        End If
      Next
      DiffTxtFile = False
      MsgBox "行数が異なります。" & vbCrLf _
      & file2(0) & "=" & line_no(0) & vbCrLf _
      & file2(1) & "=" & line_no(1)
      GoTo label_escape
    End If
    
label_escape:
    ' ファイルを閉じる
    For i = 0 To 1
        Close #nFNO(i)
    Next
End Function