• ベストアンサー

GASで文字列を下から検索し2列目から該当列を削除

Google sheetsのGASで特定文字列を下から検索し2行目から該当行までを削除する方法を探しています。 添付図のようにダウンロードするデータに余計な区分が入っており、GASで並べ替えを行うと上に集中するので、その余分な区分の文字を含むセルの最下限の行から2行目を選択範囲にして一気に消したいです 該当の文字列を判定して消す方法だと1行ずつの処理となり、タイムオーバーを吐きまくったので、結果的に余計な列をタイムオーバーを吐かせずに消せる方法ならば何でも良いです よろしくお願いします。 それとchatGPTでも答えは出ませんでしたので…

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.4

> 最下限の行から2行目を選択範囲にして一気に消したい ここだけをとらえて シート3対象です 区分がC列で 質問の画像の右側のように並び替えられているデータが対象です。 function Test() { let mSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート3'); let lastRow = mSheet.getRange(mSheet.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); const data = mSheet.getRange(2, 3, lastRow - 1,1).getValues(); for (var i in data) { if(data[i] != '合計' && data[i] != '平均'){ var mCount = i ; break; } } if (mCount >= 1){ mSheet.deleteRows(2,mCount); } }

GASFling
質問者

お礼

ご回答ありがとうございます。 思った通りに動きました! 実際のデータは30,000行あるので4行目のlastrow -1で長すぎるせいか詰まってましたが6000という固定値を指定することで(運用上ここまではいかないし、行っても毎日6000ずつ削除できればいつか追いつくので)うまく動かすことができました。 ありがとうございます!

その他の回答 (3)

  • NuboChan
  • ベストアンサー率47% (745/1583)
回答No.3

求められていないでしょうが、 参考としてExcelのVBAなら以下ですが ? (もっと簡単なコードも有りますが、以後の運用も視野に入れて。。。 Option Explicit Sub test() Dim i As Long Dim R As String For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Select Case Cells(i, "C").Value Case "平均" Cells(i, "D").Value = 2 Case "合計" Cells(i, "D").Value = 1 Case Else Cells(i, "D").Value = 3 End Select Range("A2").AutoFilter Field:=4, Criteria1:="3", Operator:=xlFilterValues Next End Sub 結果、以下がソート出力されるので 後は、D列を除いたセルを他にコピペ処理すれば目的の体裁にはなると思います。 |[A] |[B] |[C] |[D] [1]|場所|数値|区分 |優先 [2]|東京| 5|2022/3/1| 3 [3]|大阪| 4|2022/3/1| 3 [4]|大阪| 5|2022/3/2| 3

GASFling
質問者

お礼

間違えてお礼でなく補足で返信してしまいました。すいません… ご回答ありがとうございました。参考にします。

GASFling
質問者

補足

ご回答ありがとうございます。 エクセルのVBAの方がやはり人口的に質問しやすい環境が整っているのですかね… 処理方法に関しては参考にさせて頂きます、ありがとうございます。

  • SI299792
  • ベストアンサー率48% (714/1476)
回答No.2

これは、どうしてもGAS でやらなければならないのでしょうか。 画像を見る限り、 =filter(A:C,C:C<"") でいいように思います。 並べ替えが必要なら、 =sort(filter(E:G,G:G<""),3,FALSE) にすればいいです。 タイムオーバーが出るというのは、データが多量にあるのでしょうか。 であれば、関数でやる以外方法はないと思います。 https://docs.google.com/spreadsheets/d/1Tg4hg80Z0eiSrhC1sGKbUcx9VHFQoW4JFKKtscpiJSU/edit?usp=sharing

GASFling
質問者

お礼

ご回答ありがとうございます。 並べ替えは既にGASで出来ています 後出しで申し訳ないのですがこのデータ群はピボットテーブル用のデータで参照されないよう消しています(フィルター関数ですと表示されなくても参照されます…よね?) 運用内容を書き切れないので、どうしても説明不足になりがちですね、申し訳ございません… 他の方の回答も順次確認して言っています Yahooが使えなくなって日本の電話番号も持っていないのでOK waveに初めて投稿しましたが本当に助かります!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

エクセルVBAには「Findで下から検索」が出来る https://www.relief.jp/docs/excel-vba-find-from-bottom.html Findで下から上へ検索したい ーー 小生は、今更、GoogleのGASを勉強する気がないので、これがあるかどうか、知らない。 エクセルにデータをもってきて下記のようにしてはどうか? 例データ Sheet1 A1:G10 2塊目はF列からとする。 場所 数値 場所 数値 東京 10 東京 10 東京 4 大阪 8 東京 5 大阪 11 大阪 8 東京 4 大阪 4 大阪 4 大阪 4 大阪 5 大阪 11 東京 5 大阪 5 大阪 4 大阪 5 大阪 5 標準モジュールで、(上記記事を微修正して) Sub 下から検索する() Dim rng As Range Set rng = Range("F:F").Find( _ What:="東京", _ SearchDirection:=xlPrevious) If rng Is Nothing Then MsgBox "見つかりませんでした。" Else MsgBox rng.Address Range("f3:h" & rng.Row).Select MsgBox "範囲確認" 'Selection.ClearContents Selection.Delete Shift:=xlUp End If End Sub 結果 場所 数値 場所 数値 東京 10 東京 10 東京 4 大阪 4 東京 5 大阪 5 大阪 8 大阪 4 大阪 4 大阪 11 大阪 5 大阪 5 == エクセルとのデータ往復など余分ですが、どうかな。 GASでも、1列内のデータで単純な1語句(例 東京)だけなら、For Each で下から上行セルへ セル総なめでIfで聞いても大した処理時間にならないのでは。 == まあ思い付き程度と思って読んでください。

GASFling
質問者

お礼

ご回答ありがとうございます。 エクセルだとそういう方法もあるのですね。 グーグルシートの他者との共有のしやすさ、またピボットを自動的に更新してくれることから、グーグルシートを使っています。 処理方法に関しては参考にさせて頂きます、ありがとうございます。

関連するQ&A

  • GASで文字列を下から検索し2列目から該当列を削除

    Google sheetsのGASで特定文字列を下から検索し2列目から該当列までを削除する方法を探しています。 添付図のようにダウンロードするデータに余計な区分が入っており、GASで並べ替えを行うと上に集中するので、その余分な区分の文字を含むセルの最下限の列から2列目を選択範囲にして一気に消したいです 該当の文字列を判定して消す方法だと1列ずつの処理となり、タイムオーバーを吐きまくったので、結果的に余計な列をタイムオーバーを吐かせずに消せる方法ならば何でも良いです よろしくお願いします。

  • 【VBA】該当する文字列がある列を削除したい。

    指定した文字列を検索して、そのセルのある列削除したいです。 例えば2行目に、表の項目として「社名、フリガナ、住所、電話番号、備考、・・・」 と、あるときに、フリガナと電話番号の列を削除させたいのです。 シートによって項目の位置が若干変わる為、列番号を指定して削除するようなことは出来ません。 項目の名前が変わることはありません。 vbaでどのようにすればよいのでしょうか。 また、2行目の範囲で文字列を検索して、該当する文字列があるセルの位置情報を 取得したい場合はどうすれば良いでしょうか? 宜しくお願いします。

  • (VBA)対応する番号の下に行挿入して文字列を追加

    以下を行うVBAのコードを知りたい シート名「Extra」のA列に文字列が複数行に渡って記入されています 必ずA1は1で数行後に2と以後連番が続く形式です。 Sheets名「Time」は、 A列に1から始まる連番 B列にA列に対応する文字列が対であります。 やりたいことは、 「Time」のA列の連番と「Extra」にある同じ連番行の一つ下に行を挿入して 「Time」のA列と同じ行のB列の文字列を書き込みです。 例えば、「Extra」が 435 ABC で 「Time」 435 123456 ならば 「Extra」を以下のように書き換える 435 123456 ABC 判りにくい内容でしょうがよろしくお願いします。 ’-----------------------------------------

  • 文字を検索し、同行の離れたセルに単語と数値を反映

    B列から「○○」という文字を検索し、 (1)該当した行のIセルに「小計」と入力 (2)Jセルに、Cセルの数値に「個」を付けたものを表示させる という作業を延々と繰り返しています。 該当する行はランダムにあります。 並べ替えが出来ない状態なので、VBAなのかな??と思うのですが、 マクロの記録ぐらいしかやったことがなくて…。 良い方法があれば教えて下さい。 お願いします。

  • 【Excel】文字列だと並べ替えができません

    書式設定の「数値」で並べ替えをすると普通にできるのですが、数に円などの単位をつけて文字列に設定した場合、並べ替えができません。 文字列では並べ替えができないのでしょうか? もしそうでしたら、数値に単位をつけて並べ替えをする方法を教えてください。 バージョン2019利用です。

  • 特定文字列を含まない行を削除

    以前特定文字列を含む行を削除する方法の質問をし、正規表現を置換することでできることを知りました。^.*特定の文字列.*\n 今度は特定文字列を含まない行を削除を削除したいです。 この場合どう記述すればいいでしょうか? また、特定文字列1と特定文字列2のどちらかを含まない行を削除する方法もあわせて知りたいです。

  • エクセルで文字検索を簡単に。

    エクセルで文字検索を簡単にする方法はありますか? B列2行目以降に年月日(曜日)・・・同じ年月日(曜日)の行がたくさんある場合もあります。 C列以降はB列に関する文字が入力されています。 検索対象は年月ですが、検索するのに標準コマンドで検索すればよいことかと思いますが、年月日(曜日)がかなり増え、簡単に検索する方法がないかと、ネットなどで調べましたがなかなかヒットしません。 H19年4月、5月・・・H20年1月、2月・・・・○○年月の文字を1行目に作成し、その文字をクリックすると該当する年月の行の始まりまたは、該当する年月の行のいずれかを表示させる方法はありますでしょうか? エクセルは2000です。 参考サイト等ご存じでしたらよろしくお願いします。

  • 文字列検索 複数のテキストファイル

    最近趣味でC言語を始めたのですが、 大本のリストを含んだテキストファイルに含まれる文字列 【テキストの中身】 osaka nagoya tokyo 上のリストを行ごとに読み込んで もう一つのファイルから検索して該当する文字列を含む行以外を削除するようにしたいのですが何か良い方法はないでしょうか? 色々調べながらやってはいるもののまだまだ勉強不足なせいかわからず困っております。よろしければご教授お願いします。

  • 15文字を超える文字列のランク付け方法

    いつもお世話になっております。 Office2007にて、ExcelVBAでプログラムを組んでいるのですが、 現在、15文字を超える文字列の並べ替えについていい方法が浮かばず 悩んでおります。 例えば、以下のケースにおいて、B列に、A列の長い文字列の大小関係を 判定して、RANK関数のように順位を表示させたいのですが、名案が中々 浮かびません。文字列長15桁を超えてしまうと、様々な関数が機能しないようです。               A                        B 1234567890123456789012345678901234567890 0987654321098765432109876543210987654321 6789012345678901234567890123456789012345              ・・・ ⇒               A                        B 1234567890123456789012345678901234567890        2 0987654321098765432109876543210987654321        1 6789012345678901234567890123456789012345        3              ・・・ 昨日半日悩んでしまい非常に困っています。 どなたかご教授いただければ幸いです。

  • エクセルで、該当する文字列がある行のみを残す方法

    はじめまして、初めての質問になります。 題名の通り、現在エクセルで関数を使い該当する文字列がある行のみを残す関数を探しているのですが、実際に登録してみるとうまく動くものが無かったので質問しました。 画像がうまく表示されるか不安なので記述すると セルのA2から下に数字があり、その数字に対していくつかの該当した番号がある行のみを 残す関数を探しております。 資材コード    品名 301140    パネル 301240    ソケット 360940 この様な表になります。 この中で、例えば 301140 360940 この2つ該当する数字がある行を残すマクロを探しております。 ぜひ教えていただければ幸いです。

専門家に質問してみよう