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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1124閲覧

特定の文字列を検索し、それ以前の行を削除する。

same_2614869

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/29 07:28

編集2021/09/29 13:14

前提・実現したいこと

お世話になっております。

下記の内容を実現したいのですが、似たような内容で検索しても回答が見つからないため質問させていただきます。

実現したい内容
・シート内から特定の文字列を検索し、ヒットした場合それ以前の行をすべて削除する。

前提
1.A列に「project1」「project2」「project3」のような文字列が記載されているシートを処理したい。

2.A列には、project~の他に、「項目1」「項目2」のような文字列が記載されている。

3.B列以降には値が入力されている。

4.条件に設定したい文字列は、別ブック「設定用.xlsm」の「setting」と名前を付けられたセルに記載している。

処理内容の例 (検索する文字列をproject3で設定)
1.「project1」と記載されているセルがA列1行目、「project2」と記載されているセルがA列40行目「project3」と記載されているセルがA列100行目に存在する。

2.A列から「project3」の文字列を、上から検索する。

3.「project3」の文字列を発見したら、発見した行より上の行を削除する。(今回はA列100行目に存在するので、A列1行目~99行目までを削除)

今回行いたい処理は以上となります。
お力添え頂ければ幸いです。

追記
質問文に試したコード、エラー部分等が存在せず、丸投げのような質問内容となってしまい大変失礼いたしました。

ご回答頂き、内容は解決したのですが、戒めとして質問内容を修正し、必要な情報を補完したうえでベストアンサーを定めさせていただきます。
またお力添え頂く機会があれば、その折は質問内容を正しく記載させていただきますので、御宥恕のほどよろしくお願い申し上げます。

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

エラー文 クラスが登録されていません。 エラー箇所 project = Range("A:A").Find(SetingSht.Range(set)).Row '設定シートの検索値をA列から検索し、行番号を格納。

該当のソースコード

VBA

1’~~~~~~~~エラーが発生したコード~~~~~~~~~~~~~~~ 2'新しいシートをアクティブに 3test1sht.Activate 4Sheets("Sheet1").Select 5 6'必要項目を残して必要ない行を削除する。 7Dim project As Long 8 9project = Range("A:A").Find(SetingSht.Range(set)).Row '設定シートの検索値をA列から検索し、行番号を格納。 10 11'検索値の行番号の1つ上の行から最初の行まですべての値を削除する。 12With ActiveSheet.Range("A:A") 13Rows(1: & project - 1).Delete 14End With 15 16'~~~~~~~ご回答頂き、正しく処理が行えたコード~~~~~~~~~ 17'新しく作成したシートをアクティブに 18test1sht.Activate 19Sheets("Sheet1").Select 20 21'必要項目を残して必要ない行を削除する。 22Dim ws As Worksheet 23Dim project_1 As String 24 25Set ws = ActiveSheet 26 27project_1 = Workbooks("設定用.xlsm").Names("setting").RefersToRange.Value 28 29With ws.Range("A:A") 30.Resize(.Find(project_1).Row - 1).EntireRow.Delete 31End With 32

試したこと

findを用いれば可能なのではないかと試したのですが、文字列の検索を行う方法、検索した文字列を格納し、それを処理に用いる方法がわかりませんでした。

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

エクセルバージョン:2016

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

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

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

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

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

hex309

2021/09/29 08:07

実際にFindは試されたのですよね。動かなかったとしても、まずそのコードを提示されると、回答が付きやすいかと思います。
same_2614869

2021/09/29 13:12 編集

大変失礼いたしました。 下記のような内容で記述していたのですが、クラスが登録されていないというエラーが発生し、処理が停止してしまいました。 '新しいシートをアクティブに test1sht.Activate Sheets("Sheet1").Select '必要項目を残して必要ない行を削除する。 Dim project As Long project = Range("A:A").Find(SetingSht.Range(set)).Row '設定シートの検索値をA列から検索し、行番号を格納。 '検索値の行番号の1つ上の行から最初の行まですべての値を削除する。 With ActiveSheet.Range("A:A") Rows(1: & project - 1).Delete End With
guest

回答1

0

ベストアンサー

こんな感じでどうでしょうか。

vba

1Sub sample() 2 Dim ws As Worksheet 3 Set ws = ActiveSheet 4 5 Dim moji As String 6 moji = Workbooks("設定用.xlsm").Names("Setting").RefersToRange.Value 7 8 With ws.Range("A:A") 9 .Resize(.Find(moji).Row - 1).EntireRow.Delete 10 End With 11End Sub 12

投稿2021/09/29 09:37

jinoji

総合スコア4585

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

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

same_2614869

2021/09/29 12:59

丸投げのような質問であったにも関わらず、ご回答頂き誠にありがとうございます。 頂いた内容をもとに下記のコードを試したところ、処理を行うことができました。 '新しく作成したシートをアクティブに test1sht.Activate Sheets("Sheet1").Select '必要項目を残して必要ない行を削除する。 Dim ws As Worksheet Dim project_1 As String Set ws = ActiveSheet project_1 = Workbooks("設定用.xlsm").Names("setting").RefersToRange.Value With ws.Range("A:A") .Resize(.Find(project_1).Row - 1).EntireRow.Delete End With 今後お力を頂戴する機会があれば、質問文は正しく記載を行いますので、その折はまたよろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問