質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

1回答

2924閲覧

PowerShell。エクセル文字列一括検索&行削除

ponpon10

総合スコア1

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/11 05:44

前提

言語はPowerShell。

実現したいこと

エクセルの自動編集ツール作成の勉強をしています。
同じ文字列で一括検索して、該当箇所の行を一括削除するプログラミングをしたいと思っています。

ここに実現したいことを箇条書きで書いてください。

  • [ ]同じ文字列で一括検索して、該当箇所の行を一括削除する

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

https://qiita.com/www-tacos/items/045dad569920cd439a9a
上記サイトのソースを利用して、文字列検索をすることはできましたが、
この方法だと1個づつ検索する方法であり、該当しない場合はエラーになるので、
文字列を一括検索して、該当セルの行は一括削除する方法が分からないです。
該当しない場合はエラーになるので、ループ処理も良い方法が分かっていないです。
良き方法がありましたら教えてください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
ccc-

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問