前提
言語はPowerShell。
実現したいこと
エクセルの自動編集ツール作成の勉強をしています。
同じ文字列で一括検索して、該当箇所の行を一括削除するプログラミングをしたいと思っています。
ここに実現したいことを箇条書きで書いてください。
- [ ]同じ文字列で一括検索して、該当箇所の行を一括削除する
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
https://qiita.com/www-tacos/items/045dad569920cd439a9a
上記サイトのソースを利用して、文字列検索をすることはできましたが、
この方法だと1個づつ検索する方法であり、該当しない場合はエラーになるので、
文字列を一括検索して、該当セルの行は一括削除する方法が分からないです。
該当しない場合はエラーになるので、ループ処理も良い方法が分かっていないです。
良き方法がありましたら教えてください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
■エクセル一括検索のサンプル
①エクセルを作成してください。Test.xlsx
②C:\aaaa\Test.xlsx に保存してください。
Test.xlsx ┌──────┬──────┬──────┬──────┬──────┬──────┬ │ │ A │ B │ C │ D │ E │ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 1 │ 1│ 1│ 1│ 1│ 1│ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 2 │ 2│ 2│あ │ 2│ 2│ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 3 │ 3│ 3│ 3│ 3│ 3│ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 4 │ 4│あ │ 4│あ │ 4│ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 5 │ 5│ 5│ 5│ 5│ 5│ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 6 │ 6│ 6│ 6│ 6│あ │ ├──────┼──────┼──────┼──────┼──────┼──────┼ │ 7 │ 7│ 7│ 7│ 7│ 7│ ├──────┼──────┼──────┼──────┼──────┼──────┼
③サンプルは横長にしています。
PowerShell
1 2Write-host "起動中..." 3$filename = "C:\aaaa\Test.xlsx" # ← Excelファイルの場所 4$excel = New-Object -ComObject Excel.Application 5$excel.Visible = $False 6$book = $excel.Workbooks.Open( $filename ) 7$ssss = @($book.Sheets) 8$PSC = [ordered]@{} 9 10Write-host "検索中..." 11$DATA = foreach ( $sheet in $ssss ){ 12 $found = $sheet.Cells.Find("あ") # 1回目 検索 ← 検索文字を入力してください 13 if ( $NULL -eq $found ){ Write-host "$($sheet.Name) ×ありません" } # 1回目 14 if ( $NULL -ne $found ){ Write-host "$($sheet.Name) ○あります" } # 1回目 15 if ( $NULL -ne $found ){ 16 $BeginAddress = $Found.Address(0,0,1,1) # 1回目 17 $PSC["インデックス"] = $sheet.Index # 1回目 18 $PSC["シート名"] = $sheet.Name # 1回目 19 $PSC["列"] = $found.Column # 1回目 20 $PSC["行"] = $found.Row # 1回目 21 $PSC["文字"] = $Found.Text # 1回目 22 [PSCustomObject]$PSC # 1回目 23 While(1){ 24 $found = $sheet.Cells.FindNext($found) # 2回目以降 検索 25 $Address = $Found.Address(0,0,1,1) # 2回目以降 26 If ($Address -eq $BeginAddress){ break } # 2回目以降 27 $PSC["インデックス"] = $sheet.Index # 2回目以降 28 $PSC["シート名"] = $sheet.Name # 2回目以降 29 $PSC["列"] = $found.Column # 2回目以降 30 $PSC["行"] = $found.Row # 2回目以降 31 $PSC["文字"] = $Found.Text # 2回目以降 32 [PSCustomObject]$PSC # 2回目以降 33 } 34 } 35 } 36Write-host "検索結果を表示中..." 37$DATA | Format-Table * -AutoSize -Wrap 38 39Write-host "閉じる..." 40$book.Close() 41$excel.Quit() 42 43cmd /c "pause" 44
④実行結果
起動中... 検索中... Sheet1 ○あります 検索結果を表示中... インデックス シート名 列 行 文字 ------------ -------- -- -- ---- 1 Sheet1 3 2 あ 1 Sheet1 2 4 あ 1 Sheet1 4 4 あ 1 Sheet1 5 6 あ 閉じる... 続行するには何かキーを押してください . . .
投稿2022/12/13 05:08
編集2022/12/13 05:15総合スコア356
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。