• ベストアンサー

GASの結合セルについて

いつもお世話になっております。 今回はGASでの結合セルの値を変数に取得する方法で悩んで質問します。 E3~E7までセルの結合をされており、ここに入っている値を取得しようと 下記を記載しましたがstrに格納されません。 ネットを探してみたものの見当たらず途方にくれております。 var str = ss.getRange(3,5,7,1).getValues();  Logger.log(str) 上記ですとログには何も記載されません。 お助け願います!!

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2437)
回答No.1

こんな感じになるということでしょうか [19-00-00 00:00:226 PDT] [[], [], [], [], [], [], []] としたら ssがgetActiveSheetで別のシートを開いているということはないですか。

関連するQ&A

  • 結合セルに結合していないセルの値を貼り付けたいです。

    結合セルに結合していないセルの値を貼り付けたいです。 シート1の1行目の[A1-B1-C1-D1]を結合しています。以下同じように[E1-F1-G1-H1]…のように4つづつ結合しています。 この行に、シート2のA1→B1→C1と続く結合していないセルのデータを貼り付けたいのですが、やりかたがわかりません。色々やってみたのですが、うまくゆきません。ご教授お願いいたします。

  • 選択したセルの値を足した後に結合して入力したい

    VBAで初めてプログラミングしています。 初心者の質問で恐縮なのですが、よろしくお願いします。 数字が並んだ表を作成し、その表のいくつかを選択 します。(縦、横で結合可能な選択と前提) 選択したそれらの値を足した結果を、選択したセルを 結合したところに書き出す。 ということをしたいのですが、どうすれば出来ますで しょうか? 私が思いつくのは、選択したセルの一つ一つのセルか ら値を取得して別シートに書き出して、それを足し、 セルを結合した後に足した値をコピーする。というこ とくらいです。 配列などを使って一気に出来る方法などありますで しょうか? FormulaArray なるものを使おうとしたのですが、上手 く行かず途方にくれております。 何卒、よろしくお願い致します。

  • Google Scriptの別シートの参照

    現在、アクティブなスプレッドシートと同じシート名で、 別のスプレッドシートの同じシート名を 参照したいのですが、 getRangeで、リファレンスエラーになります。 var mySS = SpreadsheetApp.getActiveSpreadsheet(); mySS.getSheets()[j].activate(); var ss_copyFr = SpreadsheetApp.openById(GetID); var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet(); var sheet_copyFr = ss_copyFr.getSheetByName(name); var sheet_copyTo = ss_copyTo.getSheetByName(name); var d = sheet_copyFr.getRange('A1').getValues();              ~~~~~~~~~~~~~~~~~~~~~~~~~~ 何か、 よい解決策は、ありますでしょうか? よろしくお願いします。

  • vba 結合されたセルの列番号を取得したい

    セルを結合しているセルに、値が入っていて、 その値を検索して列番号を取得したいのですが エラーになります。 A1セルとA2セルを結合して、 「a」をいれて Sub test() MsgBox Cells.Find(What:="a", LookAt:=xlWhole).Column MsgBox Rows("1:2").Find(What:="a", LookAt:=xlWhole).Column End Sub をしても、どちらもエラーになります。 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」 というエラーです。 でもB1に「a」を入れれば、問題なく2が返されます。 結合されててもセルを検索する方法を教えてください。

  • GASスプレッドシートの編集した行を取得

    Googleappsのスプレッドシートのスクリプトで 何か文字を入力したらその行を取得したいのです onEditイベントにて function onEdit(event) { var sheet = event.source.getActiveSheet(); var range = event.source.getActiveRange(); var rowidx = range.getRow();  sheet.getRange(rowidx, 1, 1, 4).setBackgroundColor('#a9a9a9'); } このようにすると編集した行の色が変わるので確かにrowidxに編集した行を取得できていると 思います・・・ でも編集した行と1行目の2つの色がかわってるので色を変えたことにより もういっかい編集イベントが発生してしまっているのかな??? でここからが本題なのですが Logger.log(rowidx);を最後の行に追加して確認すると 1.0という値がセットされているのです スプレッドシートを編集したのは10行目だとしても・・・ もしかしてイベントが2回発生していてログには最後に実行されたものしか セットされてないから1.0になっているのかなと想像し 最後の行に以下のように記述して値を確認しました MailApp.sendEmail("hogehoge@xxxxx.xx", "test", rowidx); 飛んでくるメールは1通だけ(イベントは2回発生していない?) 値は1.0がセットされています スプレッドシートの何か値を変更したらその行番号の値を 取得するにはどうしたらいいでしょうか?

  • セルの結合による影響

    エクセルのセル範囲を結合させた時の、結合したセル範囲内のセルが示す値について教えてください。 まず、B2:D5のセル範囲を結合します。結合したセル範囲を選択して、数字10を入力します。 任意のセルを選択して、式"=B2"を入力するとセルには、10が表示されます。次に"=C2"を入力すると、0(零)が表示されます。同じく他の、セル範囲のメンバーで同じことをしてもすべて0(零)が表示されます。 次に、式"=B2:C2"を入力すると、10が表示されます。しかし、式"=B2:D2"では、0(零)が表示されます。 さらに、式"=B2:C4"、式"B2:C3"、式"=B2:D5"では、#VALUEが表示されます。 いったい、一番最初に入力した10の数字はどこに格納されているのでしょうか?また、結合したセル範囲ないで、任意のセル範囲を参照してしまった場合、何を参照することになるのでしょうか?単にセル範囲の左上の値ではないようですが? 参考に、式"C2:D2"では、0(零)、式"=C2D3"では、同じように#VALUEとなります。(相対参照にはなっているようです?)詳しい方いらっしゃいませんか? よろしくお願いします。

  • 結合セル内の値を、結合解除後に結合されていた全てのセルへコピーする方法

    結合セル内の値を、結合解除後に結合されていた全てのセルへコピーする方法 例えば、A1~A5、A6~A10がそれぞれ結合されており、【あ】【い】という文字が それぞれ入力されているとします。 各結合セルを解除後、各結合セルを構成していたセルにそれぞれの文字をコピーして、 A1~A5には【あ】 A6~A10には【い】という文字が入るようにしたいと思っているのですが、 実践している下記の方法だと、セル数が多いせいか時間がかかってしまいます。 (1)結合セルを全て解除 (2)For Next if文で1行目から順にセルを見て、何も入力されていなければ、  直上のセルに入っている文字をコピーする。 そこで、下記のような方法で高速化できないか考えたのですが、記述がわかりません。 ご教授頂けますでしょうか。 または、他に高速化できる方法がありましたらお教え頂けますと幸いです。 (1)上から順に結合セルを探す。 (2)結合セルに当たったら、結合セルを構成する先頭セルと末尾セルのアドレスを変数に記憶 (3)該当の結合セルを解除 (4)記憶したら先頭セルの内容を、先頭セル直下~末尾セルまでにコピー (5)末尾セルの直下から、(1)~(4)を繰り返す。 どうぞ、よろしくお願いいたします。

  • エクセルマクロでセルの結合をしたい

    エクセル2003です。 E列の値は昇順で並んでいます。 先頭E3行から下の行の値と比較し 同じ値の場合はセルを結合し 値が違う場合は結合しないで次の行を比較という処理を 最終行まで行いたいです。 (添付画像参照) 例えば E3-AA E4-BB E5-BB E6-CC E7-DD E8-EE E9-EE E10-EE E11-FF セルE4とE5を結合します セルE8とE9とE10を結合します。 次に結合した行と同じ行数のF列を結合します。 さらに結合した行と同じ行数のG列を結合します。 上記の場合 セルF4とF5を結合、 セルF8とF9とF10を結合します。 セルG4とG5を結合、 セルG8とG9とG10を結合します。 さらに結合した行と同じ行数のA列を結合します。 上記の場合 セルA4とA5を結合、 セルA8とA9とA10を結合します。 さらに結合したA列に数字を入力します A4とA5を結合したA4、A5セルには 2行を結合したので2と入力 セルA8とA9とA10を結合したA8、A9、A10セルには 3行を結合したので3と入力。 とりあえず、E列の結合を完成させてそのE列を 3行目から最終行までコピーして、 「形式を選択して貼付」の「書式」で 書式のみをF,G,A列にコピーすれば出来るのではと 以下の構文を作成しました。 セルの結合時は結合するセルの先頭の行の値が結合済セルの値に なるので最初にE列を結合していく時に A列に結合回数を記入しようと考えました。 ただ2行の結合は、A列に2と入力されたのですが 3行連結した時も2と入力されてしまったので改造しました。 テストデータでは期待しているようになったのですが 本番データでは結合される行が4行、5行等それ以上の行数が 結合する場合が有りこの構文ではなるべくしてなっているのですが 4行以上の行結合はA列の値はいずれも3になってしまいます。 (添付画像参照) どう修正すればいいか手段が考え付きません。 どのような方法がありますでしょうか? よろしくお願いします。 Sub セル結合2() '2013年10月25日 Dim 最終行 As Integer Dim 処理行 As Integer Dim 比較行 As Integer Dim 確認値 As Variant Dim 比較値 As Variant Dim 結合回数 Dim 戻行 Application.ScreenUpdating = False ThisWorkbook.Sheets("Sheet1").Select 最終行 = Cells(Rows.Count, 5).End(xlUp).Row 'F列の最終行を求めます。 Application.DisplayAlerts = False For 処理行 = 3 To 最終行 '3行目から最終行の前まで繰り返します。 比較行 = 処理行 + 1 '処理行の一つ下の行と比較します。→比較行とします。 確認値 = Cells(処理行, 5).MergeArea(1, 1).Value 'チェックする値を、確認値に代入します。 比較値 = Cells(比較行, 5) '比較する値を、比較値に代入します。 If 確認値 = 比較値 Then '値が同じかどうか Range(Cells(比較行, 5), Cells(処理行, 5)).MergeCells = True 結合回数 = Cells(処理行, 1) + 1 'セルを結合した回数 戻行 = 処理行 - 1 '処理行の1行上の行数を戻行とする Cells(処理行, 1) = 結合回数 '処理行のA列に結合回数を記入 Cells(比較行, 1) = 結合回数 '比較理行のA列に結合回数を記入 If Cells(処理行, 1) >= 3 Then 'もしも処理行のA列が3以上の場合 Cells(戻行, 1) = 結合回数 '戻り行のA列に結合回数をセット End If '同じでない場合は以下へ End If '同じでない場合は以下へ Next 処理行 Application.DisplayAlerts = True Application.ScreenUpdating = True Range(Cells(3, 5), Cells(最終行, 5)).Copy Range(Cells(3, 6), Cells(最終行, 6)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 7), Cells(最終行, 7)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 1), Cells(最終行, 1)).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False MsgBox "終了しました" End Sub

  • GAS

    GASについてです。 現在、実行するとExcelのシートにあるセル範囲を指定してその範囲内に記載されている文字や時間がGメール本文に反映され送信できる、というツールを作成しています。 しかし、実行しても時間表示が中々上手くできません… シート内に記載されている09:00というように本文にも反映させたくて編集を繰り返し、何度実行しても Sat Dec 30 1899 09:00:00 GMT+0900 (日本標準時) と表示されてしまいます。 この表示ではなく09:00と表示をさせたいのですがどこを直せば良いでしょうか? アドバイスよろしくお願いします。 function sendOrderMail() {    var ss = SpreadsheetApp.getActiveSpreadsheet();    var sheet = ss.getSheets()[0];    var range = sheet.getRange('A14:G68')    var values = range.getValues();    // 行ごとの値を格納する変数を初期化    var row = "";    //その2次元配列の行の数だけループを回す  for (var i = 0; i <values.length; i++) {    //改行     row += ("\n");    // その2次元配列の列の数だけループを回す  for (var j = 0; j <values[i].length; j++) {        //values[i][j]の中身が空ではない場合    if (values[i][j]!=="") {         //rowの中身を作る処理     row += values[i][j];         //if(values[i][j]!==の中身が日付じゃない場 合){     if(values[i][j]!== "date"){             //values[i][j]の中身をそのままrowにくっ つける処理        values[i][j] +=row;             //全部の条件に一致しないとき下の処理を 行う    }else{       //values[i][j]の中身を○○時○○分の表示に変換して、       //変数dateに代入      var date = Utilities.formatDate(date, "JST", "HH:mm");        //rowにdateをくっつける処理          row += date; }     }  }  }       MailApp.sendEmail("***@gmail.cam","【勤怠報告】"row);     } ※最後のメアドは仮です。

  • エクセルVBAでの、結合したセルの扱いについて質問です

    エクセルVBAでの、結合したセルの扱いについて質問です A1とA2が結合されていたとします。 A1の値は、Range("A1")で取得できますが、 A2の値を取得しようとした場合、何もかえってきません 空の文字列が返ってきます。 A2がA1と結合されている、という情報を取得するにはどうしたらいいでしょうか。 ずっと困っていて、また困ったので聞いてみようと思いました。 よろしくお願いいたします。