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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

2157閲覧

データ抽出、転記のマクロコード(GAS)

ch-taros164

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2021/12/31 10:27

下記のようなExcelVBAマクロを、
スプレッドシートGAS版で作りたいのですが、GAS初心者でコードがわかりません。
どなたか助けてください。
GASでの、コピペ版の転記とカット&ペースト版の転記
2種類知りたいです。

'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub 検索ボックス式データ抽出() 'プログラム2|シート設定 Dim ws01 As Worksheet Set ws01 = Worksheets("データ一覧") Dim ws02 As Worksheet Set ws02 = Worksheets("検索結果") Dim kensaku As String Dim I, M, lRow, mRow As Long 'プログラム3|検索結果シートの既入力データをクリア ws02.Range("A7:CV" & Rows.Count).Clear   'プログラム4|検索項目を「kensaku」へ代入 kensaku = ws01.Range("E3") lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'プログラム5|抽出先のシートの初期値を設定 Dim k As Long k = 7 'プログラム6|変数設定 Dim rng As Range Dim keyword As Variant 'プログラム7|対象データを行ごとに処理 For I = 1 To ws01.UsedRange.Rows.Count 'プログラム8|6行目(ヘッダー)を抽出先のシートへ出力(コピー) If I = 6 Then ws01.Rows(6).Copy (ws02.Rows(6)) End If 'プログラム9|7行目以降を行ごとに取得 If I >= 7 Then Set rng = ws01.UsedRange.Rows(I) 'プログラム10|プログラム2のキーワードを全て取得 For Each keyword In Split(kensaku, ",") Application.Goto Reference:=Worksheets("検索結果").Range("A7") 'プログラム11|各行にキーワードを含むセルがあれば If Not rng.Find(keyword, Lookat:=xlPart) Is Nothing Then 'プログラム12|キーワードを含む行を抽出用シートへ出力 ws01.Rows(I).Copy (ws02.Rows(k)) k = k + 1 Exit For End If Next End If Next 'プログラム14|プログラム終了 End Sub

よろしくお願いいたします。

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

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

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

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

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

papinianus

2021/12/31 10:37

やりたいことを言葉で説明していただけないですか。
guest

回答1

0

javascript

1const q376213 = () => { 2 const srcSheetName = `データ一覧`; 3 const dstSheetName = `検索結果`; 4 const rowWhereDataStarts = 7; 5 const keyWordInputCell = /* E3 */[3, 5/* E === 5 */].map(e => e - 1); 6 const srcSheet = SpreadsheetApp.getActive().getSheetByName(srcSheetName); 7 const dstSheet = SpreadsheetApp.getActive().getSheetByName(dstSheetName); 8 dstSheet.getRange(rowWhereDataStarts, 1, dstSheet.getLastRow(), dstSheet.getLastColumn()).clearContent(); 9 const src = srcSheet.getDataRange().getValues(); 10 const keyWords = src[keyWordInputCell[0]][keyWordInputCell[1]].split(`,`); 11 const found = src.slice(rowWhereDataStarts).filter(r => r.some(c => keyWords.some(key => c.indexOf(key) !== -1))); 12 const data = src.slice(rowWhereDataStarts-1,rowWhereDataStarts).concat(found); 13 dstSheet.getRange(rowWhereDataStarts-1,1,data.length,data[0].length).setValues(data); 14} 15const q376213TxT = () => { 16 const srcSheetName = `データ一覧`; 17 const dstSheetName = `検索結果`; 18 const rowWhereDataStarts = 7; 19 const keyWordInputCell = "E3"; 20 const srcSheet = SpreadsheetApp.getActive().getSheetByName(srcSheetName); 21 const dstSheet = SpreadsheetApp.getActive().getSheetByName(dstSheetName); 22 dstSheet.getRange(rowWhereDataStarts, 1, dstSheet.getLastRow(), dstSheet.getLastColumn()).clearContent(); 23 const lastColumn = srcSheet.getLastColumn(); 24 const keyWords = srcSheet.getRange(keyWordInputCell).getValue().split(`,`); 25 const rows = [rowWhereDataStarts-1,...new Set(keyWords.map(k=>srcSheet.createTextFinder(k).matchEntireCell(false).findAll().filter(e=> e !== null).map(e=>e.getRow()).filter(e=>e !== 3)).flat())]; 26 rows.forEach((e,i)=> 27 srcSheet.getRange(e,1,1,lastColumn).copyTo(dstSheet.getRange(rowWhereDataStarts-1+i,1,1,lastColumn))); 28}

投稿2021/12/31 15:10

papinianus

総合スコア12705

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

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

papinianus

2021/12/31 15:29

Google Apps Script は VBA とは根本的に作りが違うというか、発想が違うので、VBA どおりに作ろうとすると動きとしてもたつきを感じると思います。 前の質問との関連ですが、VBA を Google Spreadsheet にもってくるときに業務の分析と整理をしたほうがいいと思います。検索結果と DL 管理票で同じようなコピペを繰り返しているように思います。 あと、Google Apps Script は HTML の画面を使えたりするので、Excel ではできないような UI も作れます。というかそうしないとただただ遅く、重たく、使いづらくなるだけなんじゃないかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問