<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>concat | nujonoa_blog</title>
	<atom:link href="https://nujonoa.com/tag/concat/feed/" rel="self" type="application/rss+xml" />
	<link>https://nujonoa.com</link>
	<description>人生に役立つデータ集</description>
	<lastBuildDate>Tue, 14 Jul 2020 03:12:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nujonoa.com/wp-content/uploads/2019/04/cropped-DSC00976-e1554456145409-32x32.jpg</url>
	<title>concat | nujonoa_blog</title>
	<link>https://nujonoa.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【GAS入門】2次元配列の結合方法。unshift,push,concatの使い方</title>
		<link>https://nujonoa.com/how-to-combine-two-dimensional-arrays/</link>
					<comments>https://nujonoa.com/how-to-combine-two-dimensional-arrays/#respond</comments>
		
		<dc:creator><![CDATA[nujonoa]]></dc:creator>
		<pubDate>Tue, 14 Jul 2020 11:00:00 +0000</pubDate>
				<category><![CDATA[GAS]]></category>
		<category><![CDATA[unshift]]></category>
		<category><![CDATA[oush]]></category>
		<category><![CDATA[concat]]></category>
		<category><![CDATA[二次元配列]]></category>
		<category><![CDATA[結合]]></category>
		<guid isPermaLink="false">http://nujonoa.com/?p=6215</guid>

					<description><![CDATA[目次 【GAS入門】2次元配列の結合方法。unshift,push,concatの使い方pushunshiftconcatsetvaluesについてまとめ 【GAS入門】2次元配列の結合方法。unshift,push,c [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">【GAS入門】2次元配列の結合方法。unshift,push,concatの使い方</a></li><li><a href="#toc2" tabindex="0">push</a></li><li><a href="#toc3" tabindex="0">unshift</a></li><li><a href="#toc4" tabindex="0">concat</a></li><li><a href="#toc5" tabindex="0">setvaluesについて</a></li><li><a href="#toc6" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">【GAS入門】2次元配列の結合方法。unshift,push,concatの使い方</span></h2>



<p>スプレッドシートで、GASを使っていくうえで、非常に重要になるのが</p>



<p>・二次元配列を使えるかどうか？</p>



<p>です。</p>



<p>というのも、20回掛け算する場合、<br>・セル毎に計算　→　4.4秒<br>・配列で計算　→　0.2秒</p>



<p>と、20倍もの差が生じます。<br>というか、セル毎に計算となると、正直使い物にならないくらい遅いです。。<br>5個セルを更新しただけで1秒かかります…</p>



<p>しかし、二次元配列は、正直理解しづらく苦戦すると思います。</p>



<p>そこで今回は、二次元配列をより簡単に作成するための<br>「push」「unshift」「concat」について説明していきます。</p>



<h2 class="wp-block-heading"><span id="toc2">push</span></h2>



<p>まずはpushからです。</p>



<p>プッシュのイメージは、下記の通りで、<br>配列と配列を縦に合体させます。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="900" height="348" src="https://nujonoa.com/wp-content/uploads/2020/07/image-28-900x348.png" alt="" class="wp-image-6327" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-28-900x348.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-500x193.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-300x116.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-768x297.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-28.png 951w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>FOR分と一緒に使うと非常に使い勝手が良いです。</p>



<p>1列目～10列目まで、足し算、掛け算を繰り返していく場合、<br>下記のようにpushを用いることで、配列に計算結果が追加されていきます。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
 for(var i=1;i&lt;=10;i++){  
   足し算=sh1.getRange(i,3).getValue()+sh1.getRange(i,4).getValue()
   掛け算=sh1.getRange(i,3).getValue()*sh1.getRange(i,4).getValue()
   計算結果.push(&#x5B;足し算,掛け算])
 }  
</pre></div>


<p>・1行目の[足し算1,掛け算1]に<br>pushで2行目の[足し算2,掛け算2]を追加。</p>



<p>・[足し算1,掛け算1]<br>　[足し算2,掛け算2]　に<br>pushで3行目の[足し算3,掛け算3]を追加。・・・・</p>



<p>と10行目まで計算していくイメージです。</p>



<p>上記のプログラムを参考に、<br>①足し算、引き算を自分が計算したいものに変え、<br>②iを、行の初め～終わりまでに設定することで、<br>簡単に行の初めから行の終わりまでの計算を行い、配列に代入することができます。</p>



<h2 class="wp-block-heading"><span id="toc3">unshift</span></h2>



<p>次はunshiftです。</p>



<p>unshiftはpushと似ていますが、配列を前方に結合することができます。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="900" height="347" src="https://nujonoa.com/wp-content/uploads/2020/07/image-29-900x347.png" alt="" class="wp-image-6329" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-29-900x347.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-29-500x193.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-29-300x116.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-29-768x296.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-29.png 966w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>計算式によっては、行をさかのぼって計算させたいこともあるかと思いますので、その場合は、このunshiftを用いるとうまくいくと思います。</p>



<h2 class="wp-block-heading"><span id="toc4">concat</span></h2>



<p>つぎはconcatです。</p>



<p>CONCATは、pushやunshiftとは違い、配列の要素を結合する数式です。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="900" height="215" src="https://nujonoa.com/wp-content/uploads/2020/07/image-30-900x215.png" alt="" class="wp-image-6330" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-30-900x215.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-30-500x120.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-30-300x72.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-30-768x184.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-30.png 1246w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>一見、pushやunshiftと同じように見えるのですが、pushで同じようなことを行うと、下に示す通り、配列そのものを挿入してしまうことになり、3次元配列になってしまいます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="226" src="https://nujonoa.com/wp-content/uploads/2020/07/image-31-900x226.png" alt="" class="wp-image-6331" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-31-900x226.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-31-500x125.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-31-300x75.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-31-768x192.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-31.png 1197w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>少しわかりにくいので、もう少し説明すると、</p>



<p>・concatの場合<br>結合結果[0][4]=A7<br>が出力されますが、</p>



<p>・pushで記述した場合、<br>結合結果[0][4]=A7,B7,C7,D7<br>と出力されてしまいます。</p>



<p>pushで記述した場合に、A7を取り出したいときは、<br>結合結果[0][4][1]=A7<br>となり、3次元的に指示をしないといけないことになります。</p>



<p>spreadseatに張り付ける際には、二次元配列である必要があるので、これでは成立しませんので、concatで要素を追加する必要があります。</p>



<h2 class="wp-block-heading"><span id="toc5">setvaluesについて</span></h2>



<p>push,unshift,concatについて学んできましたが、<br>ここで一つ問題が生じます。</p>



<p>それは、「列数がバラバラになる可能性があることです。」<br>setvaluesで二次元配列をセルに転記する場合、</p>



<p>・列数がすべて一致している。<br>且つ<br>・行数、列数をきちんと指定してあげる</p>



<p>必要があります。</p>



<p>行数は、【二次元配列.length】で簡単に確認することができるのですが、<br>列数はそう簡単にいきません。。</p>



<p>先ほど説明したpushで作り上げた配列をsetvaluusでspreadsheetに記載しようとすると、</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="900" height="348" src="https://nujonoa.com/wp-content/uploads/2020/07/image-28-900x348.png" alt="" class="wp-image-6327" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-28-900x348.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-500x193.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-300x116.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-28-768x297.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-28.png 951w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>下記の通り、【データの列と指定の範囲が違う。】エラーが発生してしまいます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="39" src="https://nujonoa.com/wp-content/uploads/2020/07/image-33-900x39.png" alt="" class="wp-image-6333" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-33-900x39.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-33-500x22.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-33-300x13.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-33-768x34.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-33.png 1123w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>このエラーを防ぐためには、列数をそろえてあげる必要があります。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="309" src="https://nujonoa.com/wp-content/uploads/2020/07/image-35-900x309.png" alt="" class="wp-image-6335" srcset="https://nujonoa.com/wp-content/uploads/2020/07/image-35-900x309.png 900w, https://nujonoa.com/wp-content/uploads/2020/07/image-35-500x171.png 500w, https://nujonoa.com/wp-content/uploads/2020/07/image-35-300x103.png 300w, https://nujonoa.com/wp-content/uploads/2020/07/image-35-768x263.png 768w, https://nujonoa.com/wp-content/uploads/2020/07/image-35.png 1082w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption>列右数を合わせたイメージ</figcaption></figure>



<p>push,unshift,concatなどをした後に、spreadsheetに張り付ける場合は、<br>下に示すようなコードで、二次元配列を変換してあげてから貼り付ける必要があります。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
    for(var i=0;i&lt;valArray.length;i++){
    var cn=valArray&#x5B;i].length
    if(cn&gt;maxc){maxc=cn}
    }

  for(var i=0;i&lt;valArray.length;i++){
      valArray&#x5B;i].length=maxc
    }
   
   sh1.getRange(指定行, 指定列, valArray.length,maxc).setValues(valArray);
</pre></div>


<p>以上のコードで、おこなっていることは非常に単純で、<br>・二次元配列の1行目から、一番長い列の数(maxc)を見つけ出します。<br>・列数をすべて一番長い列(maxc)に変換します。<br>・行数、列数がわかったので、シートの指定位置に貼り付けます。<br>の3ステップです。</p>



<p>ここまでできて、配列の操作については、完了すると思います。</p>



<h2 class="wp-block-heading"><span id="toc6">まとめ</span></h2>



<p>VBAにも言えることなのですが、</p>



<p>・プログラムを早く動かすためには、とにかく「配列」を用いて、<br>　セルへの値の記載を極力減らすことが重要です。</p>



<p>スプレッドシートのgasについては、特にその傾向が顕著になりますので、<br>push,unshift,concatを用いて、超高速化していきましょう！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nujonoa.com/how-to-combine-two-dimensional-arrays/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
