<?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>Excel | リョクちゃの電脳日記</title>
	<atom:link href="https://dreamparadaisu.com/tag/excel/feed/" rel="self" type="application/rss+xml" />
	<link>https://dreamparadaisu.com</link>
	<description>今まで学んできたことや、新たに学んだこと、趣味を通して様々な人と共有できたらなと思いはじめた電脳日記。</description>
	<lastBuildDate>Tue, 03 May 2022 18:34:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<atom:link rel='hub' href='https://dreamparadaisu.com/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">180489529</site>	<item>
		<title>【VB.Net】Excelの拡張子を.xlsから.xlsxに変換してみた</title>
		<link>https://dreamparadaisu.com/visualbasic_68/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=visualbasic_68</link>
		
		<dc:creator><![CDATA[リョクちゃ]]></dc:creator>
		<pubDate>Fri, 09 Jul 2021 18:48:00 +0000</pubDate>
				<category><![CDATA[VB.Net]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[VisualStudio]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[プログラム]]></category>
		<guid isPermaLink="false">https://dreamparadaisu.com/?p=2611</guid>

					<description><![CDATA[<p>どうも！リョクちゃです。 &#160; 今回は、Excelの拡張子を.xlsから.xlsxに変換する方法を紹介していきます。 &#160; .xlsだとClosedXMLが使えず、プログラムでのExcel処理がめんどうに...</p>
The post <a href="https://dreamparadaisu.com/visualbasic_68/">【VB.Net】Excelの拡張子を.xlsから.xlsxに変換してみた</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>

この投稿の関連記事が見つかりませんでした。
</div>
]]></description>
										<content:encoded><![CDATA[<p>どうも！リョクちゃです。</p>
<p>&nbsp;</p>
<p>今回は、Excelの拡張子を.xlsから.xlsxに変換する方法を紹介していきます。</p>
<p>&nbsp;</p>
<p>.xlsだとClosedXMLが使えず、プログラムでのExcel処理がめんどうになるので</p>
<p>.xlsxに変えてからClosedXMLで処理しようと思って今回記事にしたのが事の発端です。</p>
<p>&nbsp;</p>
<p>ClosedXMLについては、こちら</p>
<div class="blog-card internal-blog-card blog-card-thumbnail-right cf"><div class="blog-card-thumbnail"><a href="https://dreamparadaisu.com/visualbasic_66/" class="blog-card-thumbnail-link"><img width="100" height="100" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_10-100x100.png" class="blog-card-thumb-image wp-post-image" alt="" srcset="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_10-100x100.png 100w, https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_10-150x150.png 150w, https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_10-120x120.png 120w" sizes="(max-width: 100px) 100vw, 100px" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://dreamparadaisu.com/visualbasic_66/" class="blog-card-title-link">【VB.Net】Excelを操作してみた～ClosedXMLを使う～</a></div><div class="blog-card-excerpt">VB.NETでClosedXMLを使いExcel(.xlsx)を安全に読み書きする方法。列はA1形式/数値入力どちらも対応。Sheetが無い場合の対処とSaveAsでの上書き禁止運用も解説。</div></div><div class="blog-card-footer"><div class="blog-card-site">dreamparadaisu.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://dreamparadaisu.com/visualbasic_66/" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://dreamparadaisu.com/visualbasic_66/" alt="" /></a></div><div class="blog-card-date">2021-06-29 07:42</div></div></div>
<p>&nbsp;</p>
<p>ちなみに前回の記事はこちら</p>
<div class="blog-card internal-blog-card blog-card-thumbnail-right cf"><div class="blog-card-thumbnail"><a href="https://dreamparadaisu.com/visualbasic_67/" class="blog-card-thumbnail-link"><img width="100" height="100" src="https://dreamparadaisu.com/wp-content/uploads/2021/07/tryparse_1-100x100.png" class="blog-card-thumb-image wp-post-image" alt="" srcset="https://dreamparadaisu.com/wp-content/uploads/2021/07/tryparse_1-100x100.png 100w, https://dreamparadaisu.com/wp-content/uploads/2021/07/tryparse_1-150x150.png 150w, https://dreamparadaisu.com/wp-content/uploads/2021/07/tryparse_1-120x120.png 120w" sizes="(max-width: 100px) 100vw, 100px" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://dreamparadaisu.com/visualbasic_67/" class="blog-card-title-link">【VB.Net】入力されたデータがinteger型かどうかチェックする方法</a></div><div class="blog-card-excerpt">時に入力された値が文字列なのか数値なのかでどちらか一方が欲しいときはないでしょうか。例えば、数値データを受け取りたい場合、入力される値はinteger型もしくはfloatやdoubleといった型になります。今回はinteger型で受け取りたいときに使える関数を紹介しています。</div></div><div class="blog-card-footer"><div class="blog-card-site">dreamparadaisu.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://dreamparadaisu.com/visualbasic_67/" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://dreamparadaisu.com/visualbasic_67/" alt="" /></a></div><div class="blog-card-date">2021-07-01 14:29</div></div></div>
<p>&nbsp;</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=3HG23L+1FSQEQ+4AQ0+5ZEMP" rel="nofollow">
<img decoding="async" class="aligncenter" src="https://www25.a8.net/svt/bgt?aid=210701217087&amp;wid=001&amp;eno=01&amp;mid=s00000020052001005000&amp;mc=1" alt="" width="320" height="50" border="0" /></a></p>
<img decoding="async" class="aligncenter" src="https://www12.a8.net/0.gif?a8mat=3HG23L+1FSQEQ+4AQ0+5ZEMP" alt="" width="1" height="1" border="0" />
<p>&nbsp;</p>
<h1>拡張子の変換にライブラリを使う</h1>
<p>ClosedXMLでは.xlsはサポートされていなかったので、</p>
<p>拡張子の変換には別のライブラリを使用します。</p>
<p>&nbsp;</p>
<div class="sp-info">Microsoft.Office.Interop.Excel</div>
<p>&nbsp;</p>
<p>といわれるライブラリを使います。</p>
<p>&nbsp;</p>
<p>プロジェクトへの追加は、</p>
<p>VisualStudioのプロジェクトタブ→参照の追加を選びます。</p>
<p>&nbsp;</p>
<figure id="attachment_mmd_2613" class="wp-block-image aligncenter"><img decoding="async" width="781" height="538" src="https://dreamparadaisu.com/wp-content/uploads/2021/07/excel_interop_1.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>&nbsp;</p>
<p>COMをクリックし、<strong><span class="red-under">Microsoft Excel 15.0 Object Library</span></strong>を探して、</p>
<p>チェックを入れます。</p>
<p>※<strong><span class="red-under">環境によってバージョンが違う</span></strong>ので自身の環境に合わせて入れてください。</p>
<p>Excelのバージョンで変わります。</p>
<p>&nbsp;</p>
<p>入れたらOKを押し、追加されていることを確認します。</p>
<figure id="attachment_mmd_2617" class="wp-block-image aligncenter"><img decoding="async" width="197" height="21" src="https://dreamparadaisu.com/wp-content/uploads/2021/07/excel_interop_2.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>&nbsp;</p>
<h1>ライブラリの使い方</h1>
<p>ライブラリを使うファイル内で、</p>
<div class="sp-info">Imports Microsoft.Office.Interop.Excel</div>
<p>と書きます。</p>
<p>&nbsp;</p>
<p>使い方は簡単、以下の手順で行います。</p>
<p>細かく順序だって解説しています。</p>
<p>※簡略できるところもあります。</p>
<ol>

<li>Excelブックの定義(設定)</li>

<li>ワークブックの定義(1で定義したExcelブックの)</li>

<li>1のインスタンス生成</li>

<li>Excelファイルを開く</li>

<li>拡張子変換処理</li>

<li>ワークブックの終了</li>

<li>2のオブジェクト解放</li>

<li>Excelブックの終了</li>

<li>1のオブジェクト解放</li>

<li>ガベージコレクト</li>
</ol>
<p>といった流れで行います。</p>
<p>&nbsp;</p>
<p>このうちの<strong><span class="red-under">6～10の流れは重要な処理になるので忘れずに書きましょう</span></strong>。</p>
<p>これを書かないで終了すると、<span class="marker-under">ずっとプロセスとして残り続けてしまいます</span>。</p>
<p>&nbsp;</p>
<p>新たにExcelを開こうとしてもエラーになる可能性があるので危険です。</p>
<p>&nbsp;</p>
<h2>Excelブックの定義(設定)</h2>
<p>以下の方法で行います。</p>
<div class="sp-info">Dim 変数名 As Microsoft.Office.Interop.Excel.Application = Nothing</div>
<p>&nbsp;</p>
<p>例)</p>
<p>Dim excel As Microsoft.Office.Interop.Excel.Application = Nothing</p>
<h2>ワークブックの定義(設定)</h2>
<p>以下の方法で行います。</p>
<div class="sp-info">Dim 変数名 As Microsoft.Office.Interop.Excel.Workbook = Nothing</div>
<div></div>
<div>例)</div>
<div>Dim workBook As Microsoft.Office.Interop.Excel.Workbook = Nothing</div>
<h2>1のインスタンス生成</h2>
<p>以下の方法で行います。</p>
<div class="sp-info">excel = New Microsoft.Office.Interop.Excel.Application()</div>
<p>&nbsp;</p>
<h2>Excelファイルを開く</h2>
<p>以下の方法で行います。</p>
<div class="sp-info">workBook = excel.Workbooks.Open(&#8220;編集したいExcelファイルの絶対パス&#8221;)</div>
<p>&nbsp;</p>
<p>例) test.xlsというファイルを開くとき</p>
<p>workBook = excel.Workbooks.Open(&#8220;C:\test.xls&#8221;)</p>
<p>&nbsp;</p>
<p>workBook変数は<span class="marker-under">2で設定した変数</span></p>
<p>excel変数は<span class="marker-under">1で設定した変数</span></p>
<p>にそれぞれなります。</p>
<p>&nbsp;</p>
<h2>拡張子変換処理</h2>
<p>以下の方法で行います。</p>
<div class="sp-info">workBook.SaveAs(&#8220;拡張子とパスを除いたファイル名&#8221;, FileFormat:=&#8221;変換する拡張子&#8221;)</div>
<p>&nbsp;</p>
<p>と書くことで拡張子を変換して保存をすることができます。</p>
<p>厳密にいうと<span class="red-under">新しいファイルとして作成し、拡張子を変換</span>しています。</p>
<p>&nbsp;</p>
<p>例) test.xlsxをtest.xlsとして変換したい場合</p>
<p>workBook.SaveAs(&#8220;test.xlsx&#8221;, FileFormat:=XLFileFormat.xlOpenXMLWorkbook)</p>
<p>と書くことで、.xlsx形式で保存することができます。</p>
<p>&nbsp;</p>
<p>workBook変数は、<span class="marker-under">2で設定した変数を使います</span>。</p>
<p>&nbsp;</p>
<p>FileFormatには、XLFileFormat列挙体でサポートされている項目を使用します。</p>
<p>今回は、.xlsから.xlsxに変換をしたいので、<span class="marker-under"><strong>xlOpenXMLStrictWorkbook</strong></span>を使用します。</p>
<p>&nbsp;</p>
<p>他の項目については、下記のリンク先を参照ください。</p>
<p><a href="https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlfileformat"><a href="https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlfileformat">https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlfileformat</a></a></p>
<p>&nbsp;</p>
<h2>ワークブックの終了</h2>
<p>拡張子変換処理で終了……といいたいのですが、これで終えてしまうと</p>
<p><strong><span class="red-under">Excelファイルはずっと開かれたままでプロセスに残り続けてしまいます</span></strong>。</p>
<p>&nbsp;</p>
<p>以下の方法でワークブックのクローズを行います。</p>
<div class="sp-info">workBook.Close()</div>
<p>※workBook変数は<span class="marker-under">2で設定した変数になります</span>。</p>
<p>&nbsp;</p>
<h2>2のオブジェクト解放</h2>
<p>クローズができたら<span class="marker-under">2で設定した変数のオブジェクト解放</span>を行います。</p>
<p>ExcelファイルはCOMオブジェクトとして扱うので、この解放処理も必要になります。</p>
<p>※COMオブジェクトとして扱うことでプログラムでも</p>
<p>Excelファイルが操作できるようになっているといった感じです。</p>
<p>&nbsp;</p>
<p>以下の方法で解放を行います。
</p><pre class="urvanov-syntax-highlighter-plain-tag">System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook) : workBook = Nothing</pre><p>
ReleaseComObject()に引数としてworkBook変数を、</p>
<p>渡すことでオブジェクトの解放ができます。</p>
<p>&nbsp;</p>
<h2>Excelブックの終了</h2>
<p>ワークブックの終了ができたので次にExcelブックの終了処理を行います。</p>
<p>※まだ終わりではないです……。</p>
<p>&nbsp;</p>
<p>Excelブックの終了は以下の処理で行います。</p>
<div class="sp-info">excel.quit()</div>
<p>excel変数は1で設定した変数になります。</p>
<p>&nbsp;</p>
<h2>1のオブジェクト解放</h2>
<p>これもワークブック同様オブジェクトの解放が必要になります。
</p><pre class="urvanov-syntax-highlighter-plain-tag">System.Runtime.InteropServices.Marshal.ReleaseComObject(excel) : excel = Nothing</pre><p>
ReleaseComObject()の引数にexcel変数を渡しています。</p>
<p>&nbsp;</p>
<h2>ガベージコレクト</h2>
<p>最後に、ガベージコレクトを行いメモリ領域の解放を行います。</p>
<p>こちらについては、下記の記事もご参照ください。</p>
<div class="blog-card internal-blog-card blog-card-thumbnail-right cf"><div class="blog-card-thumbnail"><a href="https://dreamparadaisu.com/visualbasic_9/" class="blog-card-thumbnail-link"><img width="100" height="100" src="https://dreamparadaisu.com/wp-content/uploads/2020/10/VBNet_Title_10-100x100.png" class="blog-card-thumb-image wp-post-image" alt="" srcset="https://dreamparadaisu.com/wp-content/uploads/2020/10/VBNet_Title_10-100x100.png 100w, https://dreamparadaisu.com/wp-content/uploads/2020/10/VBNet_Title_10-150x150.png 150w, https://dreamparadaisu.com/wp-content/uploads/2020/10/VBNet_Title_10-120x120.png 120w" sizes="(max-width: 100px) 100vw, 100px" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://dreamparadaisu.com/visualbasic_9/" class="blog-card-title-link">【VB.Net】テキストファイルを作成するやり方</a></div><div class="blog-card-excerpt">テキストファイルを作成する方法を、フォーム上のボタンが押された後にテキストボックスに入力された文字を書き込むといった例を交えて紹介しています。プログラム上でファイルを作成する方法はいくつかありますが、その中でも一般的に使われているだろう方法を載せています。これをきっかけにイメージをつかんでいただけたらなと思います。</div></div><div class="blog-card-footer"><div class="blog-card-site">dreamparadaisu.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://dreamparadaisu.com/visualbasic_9/" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://dreamparadaisu.com/visualbasic_9/" alt="" /></a></div><div class="blog-card-date">2020-10-01 19:55</div></div></div>
<p>※最後の方に載せています。</p>
<p>&nbsp;</p>
<p>本来は自動で解放されるようなのですが、外部参照しているExcelファイルの場合は</p>
<p>別途解放をしてあげないといけないみたいです。</p>
<p>&nbsp;</p>
<p>メモリを効率的に管理していくうえでは必要なのでやっておいて損はありません。</p>
<p>安定したプログラム稼働を目指すうえでは大事です。</p>
<p>&nbsp;</p>
<p>長々となりましたがガベージコレクトは以下の方法で行えます。</p>
<div class="sp-info">GC.Collect()</div>
<p>これだけです。</p>
<p>&nbsp;</p>
<p>これらの処理を行うことでプロセスに残ることなくExcelファイルの終了ができます。</p>
<p>&nbsp;</p>
<p>ClosedXMLでは、<span class="marker-under">この処理を暗黙的に行ってくれているみたいなので、</span></p>
<p><span class="marker-under">終了処理を別途挟まなくていいのが便利だと感じました</span>。</p>
<p>&nbsp;</p>
<h1>まとめ</h1>
<p>拡張子を変換する方法として、新たに<span class="marker-under"><strong>Microsoft.Office.Interop.Excel</strong></span>を使って、</p>
<p>.xlsを読込み、.xlsxに変換するという力業でした。</p>
<p>&nbsp;</p>
<p>変換しても、<span class="red-under">落とし穴があるので注意が必要</span>です。</p>
<p>記事でも載せた、<span class="red-under">プログラム上でExcelを終了しただけでは</span></p>
<p><span class="red-under"><strong>プロセスとしては残り続ける</strong>という罠</span>です。</p>
<p>&nbsp;</p>
<p>これを回避するには<span class="red-under">Excelオブジェクトの解放を忘れないこと</span>です。</p>
<p><strong><span class="red-under">6～10の処理を忘れないことです。</span></strong></p>
<p>&nbsp;</p>
<p>今回は変換のみでMicrosoft.Office.Interop.Excelを使いましたが、</p>
<p>読み込みや書き込みももちろんできます。</p>
<p>&nbsp;</p>
<p>ただし、Microsoft.Office.Interop.Excelは<span class="marker-under">処理が遅い</span>といった悩みがあるので、</p>
<p>使う際は処理時間に気を付けながらコードを書いていきましょう。</p>
<p>&nbsp;</p>
<p>最後までお読みいただきありがとうございます。</p>
<p>&nbsp;</p>
<p><strong><em>・こちらの書籍を参考にVB.Net勉強しています。</em></strong></p>




		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="2611"
					data-ulike-nonce="0730d49f84"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_2611"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>The post <a href="https://dreamparadaisu.com/visualbasic_68/">【VB.Net】Excelの拡張子を.xlsから.xlsxに変換してみた</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>
<p>この投稿の関連記事が見つかりませんでした。</p>
</div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2611</post-id>	</item>
		<item>
		<title>【Excel】新たに列を作らず任意列の値を取得する</title>
		<link>https://dreamparadaisu.com/excel_1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=excel_1</link>
		
		<dc:creator><![CDATA[リョクちゃ]]></dc:creator>
		<pubDate>Thu, 17 Sep 2020 05:15:30 +0000</pubDate>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[関数]]></category>
		<category><![CDATA[集計]]></category>
		<guid isPermaLink="false">https://dreamparadaisu.com/?p=661</guid>

					<description><![CDATA[<p>どうも！リョクちゃです。 今回は、Excelで困ったことについて解決策の紹介をしていこうと思います。 &#160; みなさんは、Excelで集計をするときに今あるデータ列に変更は加えず、 計算を行い指定の値と比較し結果を...</p>
The post <a href="https://dreamparadaisu.com/excel_1/">【Excel】新たに列を作らず任意列の値を取得する</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>

この投稿の関連記事が見つかりませんでした。
</div>
]]></description>
										<content:encoded><![CDATA[<p>どうも！リョクちゃです。</p>
<p>今回は、Excelで困ったことについて解決策の紹介をしていこうと思います。</p>
<p>&nbsp;</p>
<p>みなさんは、Excelで集計をするときに今あるデータ列に変更は加えず、</p>
<p>計算を行い指定の値と比較し結果を出力したい場合ってありませんか？</p>
<p>&nbsp;</p>
<p>そんなときの方法を関数の説明しながら順を追って紹介していきます。
ちなみにExcelのバージョンは、2016以前のを対象にしています。</p>
<p>&nbsp;</p>
<p>今回、使うExcel関数は下の通りです。</p>
<ul>

<li>INDEX関数　　 →　指定された行と列が交差する位置にある値またはセルの参照を返す</li>

<li>MATCH関数　　→　指定された照合の種類に従って</li>
</ul>
<p>&nbsp;</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=3NA5PS+1NJD9U+3CJQ+60H7L" rel="nofollow">
<img decoding="async" class="aligncenter" src="https://www29.a8.net/svt/bgt?aid=220503664100&amp;wid=001&amp;eno=01&amp;mid=s00000015623001010000&amp;mc=1" alt="" width="468" height="60" border="0" /></a></p>
<img loading="lazy" decoding="async" class="aligncenter" src="https://www12.a8.net/0.gif?a8mat=3NA5PS+1NJD9U+3CJQ+60H7L" alt="" width="1" height="1" border="0" />
<p>&nbsp;</p>
<h1>INDEX関数</h1>
<blockquote>指定された行と列が交差する位置にある値またはセルの参照を返します。</blockquote>
<p>とExcelで関数について説明がされています。</p>
<p>&nbsp;</p>
<h2>基本構文</h2>
<p>使い方が2通りあり、それぞれ</p>
<p>①　INDEX(配列、行番号、【列番号】)
※列番号は省略可能</p>
<p>&nbsp;</p>
<p>②　INDEX(参照、行番号、【列番号】、【領域番号】)
※列番号、領域番号は省略可能</p>
<p>&nbsp;</p>
<p>①を配列形式、②をセル範囲形式とそれぞれ参照する形式が違います。</p>
<h3>配列形式？</h3>
<blockquote>行番号と列番号のインデックスで選択された。
テーブルまたは配列内の要素の値を返します。</blockquote>
<p>&nbsp;</p>
<h3>セル範囲形式?</h3>
<blockquote>指定された行と列が交差する位置にあるセルの参照を返します。
参照が隣接していない選択範囲で構成されている場合は、検索対象を選べます。</blockquote>
<p>それぞれ、Excel上ではこのように説明がされています。</p>
<p>&nbsp;</p>
<p>ではどんな時につかえるでしょうか。</p>
<p>たとえば、下のようなExcelがあるとします。</p>
<figure id="attachment_mmd_666" class="wp-block-image aligncenter"><img decoding="async" width="479" height="386" src="https://dreamparadaisu.com/wp-content/uploads/2020/09/excel_3-1.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>B列には分類、C列には産地、D列には名称そしてE列には価格がそれぞれ埋められています。</p>
<p>&nbsp;</p>
<p>このExcelから青森のりんごの価格を取得したいとき、
私たちが手動で操作をしている場合は、&#8221;E3&#8243;と選択するだけで取得が簡単にできます。
下のような形になります。</p>
<figure id="attachment_mmd_2559" class="wp-block-image aligncenter"><img decoding="async" width="490" height="594" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_4.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>E列の3行目の価格に破線が引いてあります。</p>
<p>このセルに値を&#8221;青森のりんごの価格&#8221;と記述された列に&#8221;=E3&#8243;と書くことで、
求めている価格が表示できます。</p>
<p>&nbsp;</p>
<p>ではこれをINDEX関数を使って表記した場合どうなるか見ていきます。</p>
<p>&nbsp;</p>
<p>先ほどの&#8221;青森のりんごの価格&#8221;が表示されている列に、
INDEXの基本構文①を参考に書いてみましょう。</p>
<p>&nbsp;</p>
<p>配列には、<span class="red-under">A:E</span>を範囲として選択します。
これはA列とE列全てを選択しています。</p>
<p>&nbsp;</p>
<p>行番号には、<span class="red-under">3行目</span>を選択します。(青森のりんごなので)</p>
<p>列番号には、<span class="red-under">5列目</span>を選択します。</p>
<p>&nbsp;</p>
<p>これらをINDEX関数に埋めていくと、</p>
<div class="sp-info"><span style="font-size: 20px"><strong>INDEX(A:E, 3, 5)</strong></span></div>
<p>と書くことができます。</p>
<p>実際にこれを実行すると、配列内の3行目と5列目で交差する値の取得ができます。</p>
<figure id="attachment_mmd_2560" class="wp-block-image aligncenter"><img decoding="async" width="614" height="594" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_5.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>他にも、E3からE5までの合計を取得したい場合、図で表すと下のようなとき。</p>
<p>このようなときにもINDEX関数は力を発揮します。</p>
<figure id="attachment_mmd_2561" class="wp-block-image aligncenter"><img decoding="async" width="626" height="318" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_6.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>&nbsp;</p>
<p><strong>＜書き方＞</strong></p>
<p>= INDEX(SUM(E3:INDEX(A:E,7,5))</p>
<p>&nbsp;</p>
<p>と書くことで、E3(250)からE5(170)までの値取得し、
SUM関数で足した合計値を取得することができます。</p>
<p>こういった使い方もできます。</p>
<p>&nbsp;</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=3BI0VE+4JQ84Y+0K+1128EP" rel="nofollow">
<img loading="lazy" decoding="async" class="aligncenter" src="https://www21.a8.net/svt/bgt?aid=200715242275&amp;wid=001&amp;eno=01&amp;mid=s00000000002006225000&amp;mc=1" alt="" width="350" height="80" border="0" /></a></p>
<img loading="lazy" decoding="async" class="aligncenter" src="https://www13.a8.net/0.gif?a8mat=3BI0VE+4JQ84Y+0K+1128EP" alt="" width="1" height="1" border="0" />
<h1>MATCH関数</h1>
<blockquote>指定された照合の種類に従って検査範囲内を検索し、
検索値と一致する要素の、配列内での相対的な位置を表す数値を返します。</blockquote>
<p>と説明がされています。</p>
<p>&nbsp;</p>
<p>簡単に言うと、検索したい値と検索したい列がわかっていれば、それをMATCH関数に入れてあげることで、検索したい値が何行目にいるかを番号で教えてくれるといった関数です。
(※個人的解釈です)</p>
<h2>基本構文</h2>
<div class="sp-info"><strong>MATCH(検査値、検査範囲、照合の種類)</strong></div>
<p>照合の種類は、</p>
<ul>

<li>1 または省略  →　検査値に近い最大値の位置を返す</li>

<li>0　　　　　　→　検査値との完全一致の場合に位置を返す</li>

<li>－1　　　　   →　検査値に近い最小値の位置を返す(※降順で並べ替える必要あり。)</li>
</ul>
<p>となっています。</p>
<p>&nbsp;</p>
<p>では、先ほどの表をもとに今度はみかんが何行目にあるのか調べてみましょう。
私たちが見ているだけであれば、みかんは4行目にあるのがわかります。
これをMATCH関数を使ってやらせる場合はどうなるでしょうか？</p>
<p>&nbsp;</p>
<p>検査値には、&#8221;みかん&#8221;</p>
<p>検査範囲には、みかんが表示されているD列(D:D)</p>
<p>照合の種類には、0(完全一致)</p>
<p>をそれぞれ埋め込んでいくと、</p>
<p>&nbsp;</p>
<div class="sp-info"><span style="font-size: 20px"><strong>MATCH(&#8220;みかん&#8221;,D:D,0)</strong></span></div>
<p>&nbsp;</p>
<p>と書くことができます。</p>
<figure id="attachment_mmd_2562" class="wp-block-image aligncenter"><img decoding="async" width="670" height="298" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_7.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>実行すると、みかんのある&#8221;4行目&#8221;が取得されます。</p>
<p>&nbsp;</p>
<p>このようにして、MATCH関数を使うことができます。</p>
<p>&nbsp;</p>
<h1>本題：新たに列を作らず任意列の値を抽出</h1>
<p>&nbsp;</p>
<p>たとえば、下のような集計表があるとします。</p>
<figure id="attachment_mmd_663" class="wp-block-image aligncenter"><img decoding="async" width="843" height="337" src="https://dreamparadaisu.com/wp-content/uploads/2020/09/excel_1-1.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>これは4月と5月のそれぞれ項目1項目2の不良数を表したシートです。</p>
<p>不良数の隣にはその月のランクをそれぞれ示しています。
例えば4月のパソコン、キズについては、
不良数が10件で全体でみるとランクは1位になっています。</p>
<p>&nbsp;</p>
<p>このシートの完成は、4月と5月の項目ごとの不良件数を比較し、前月と比べてどうなっているかをシートに出力するのが完成となります。</p>
<p>&nbsp;</p>
<p>既に4月の項目ごとの不良件数におけるランクは求められているので、
後は、5月ランクと比較し、上昇しているか下降しているかを判定すればいいのですが、</p>
<h2>条件としては、</h2>
<ul>

<li>新たに列を追加するのは禁止(計算用に列を作るのはダメ)</li>

<li>項目1と項目2の内容を連結して前月から一致するランクを取得する
例えば、5月の3行目のI列とJ列を連結して前月(4月)のランク取得してくる。</li>

<li>前月と比較し上昇(↑)か下降(↓)かをそれぞれ判別する。</li>
</ul>
<p>といったのが条件として挙げられます。</p>
<h2>新たに列を追加するのは禁止……</h2>
<p>例えば新たに列を追加するのが禁止されていなければ、
以下のようにすることで問題は解決できると思います。</p>
<p>&nbsp;</p>
<p><span style="font-size: 20px"><strong>使用する関数＜VLOOKUP＞</strong></span></p>
<p><span style="font-size: 20px"><strong>使用方法：VLOOKUP(検索値、検索範囲、検索方法)</strong></span></p>
<p>&nbsp;</p>
<p>これを使えば、例えば、下の表のJ列の&#8221;冷えない&#8221;をキーとして
VLOOKUPを使うと、前月の&#8221;冷えない&#8221;のランクが引っ張ってくることができます。</p>
<figure id="attachment_mmd_2557" class="wp-block-image aligncenter"><img decoding="async" width="680" height="594" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_2.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>ただしこれだと、項目2のみでしか検索ができません。</p>
<p>項目1と項目2を連結させて検索したい場合、下のように書いてもエラーとなってしまいます。</p>
<p>= VLOOKUP(I3&amp;J3,C:C &amp; F:F, 3, FALSE)
※　&amp; は文字列同士の連結を表す記号です。</p>
<figure id="attachment_mmd_2563" class="wp-block-image aligncenter"><img decoding="async" width="934" height="593" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_8.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>ここで最初に紹介した、INDEX関数とMATCH関数の登場です。</p>
<p>この二つの関数を組み合わせて、問題の解決に試みます。</p>
<p>&nbsp;</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=3BM8PU+FA4JQQ+3L4M+6CHB5" rel="nofollow">
<img loading="lazy" decoding="async" class="aligncenter" src="https://www25.a8.net/svt/bgt?aid=200912034924&amp;wid=001&amp;eno=01&amp;mid=s00000016735001066000&amp;mc=1" alt="" width="120" height="60" border="0" /></a></p>
<img loading="lazy" decoding="async" class="aligncenter" src="https://www10.a8.net/0.gif?a8mat=3BM8PU+FA4JQQ+3L4M+6CHB5" alt="" width="1" height="1" border="0" />
<h1>INDEX関数とMATCH関数を組み合わせる</h1>
<p>INDEX関数では、前月のランクを取得することを目的に、
MATCH関数では、5月の項目1と2が4月の項目1と2で一致する行を見つけることを目的
とそれぞれすることで関数を書いていくと、以下の手順の通りで行えると思います。</p>
<ol>

<li>MATCH関数でI3とJ3を連結した項目が、C列とD列のどの行に含まれるか表記する。</li>

<li>INDEX関数で、取得したいランクの列(F列)と1で求めた値を行番号にあてる。</li>
</ol>
<p>この流れが関数に記述できれば、前月のランクを引っ張ってくることができるはずです。
実際に流れをもとに関数を書いていきましょう。</p>
<h2>1. MATCH関数で検査値が、どの行に含まれるか表記する</h2>
<p>これは、このようにして書くことができます。</p>
<p>&nbsp;</p>
<div class="sp-info"><span style="font-size: 20px"><strong>= MATCH(I3&amp;J3, C:C&amp;D&amp;D, 0)</strong></span></div>
<p>ここでは検査範囲の項目もそれぞれ連結させています。</p>
<p>これを実行すると、&#8221;冷蔵庫冷えない&#8221;に一致した行の6行目が値として返されます。
実際に前月の&#8221;冷蔵庫冷えない&#8221;を見てみると、6行目に表記されています。</p>
<h2>2. INDEX関数で、取得したい列と1.で求めた値を行にあてる</h2>
<p>これは、このようにして書くことができます。</p>
<div class="sp-info"><span style="font-size: 20px"><strong>= INDEX(F:F,MATCH(I3&amp;J3, C:C&amp;D:D, 0),0)</strong></span></div>
<div></div>
<figure id="attachment_mmd_2564" class="wp-block-image aligncenter"><img decoding="async" width="1024" height="598" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_9.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>では、これを実行してみましょう。</p>
<p>&nbsp;</p>
<p>……#Value……？と表示がされてしまいます。
なぜでしょうか……？</p>
<p>&nbsp;</p>
<p>関数の設定を見てみると値は取得できているはずなのに……。</p>
<figure id="attachment_mmd_2566" class="wp-block-image aligncenter"><img decoding="async" width="587" height="1127" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_10.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>うーん……順を追って細かく見てみると、どうやら問題は、
項目1と項目2の連結させていく方法で起きていそうです。</p>
<p>&nbsp;</p>
<p>ここからは個人的解釈に基づく見解になります。
文字列の連結がすべての関数の処理を終わってからしているからかと推測。</p>
<p>また、I3&amp;J3では一つのセル同士を指定して検索値を決めていますが、
検査範囲では、C列とD列の複数の文字連結を行ったのを範囲として決めている。</p>
<p>&nbsp;</p>
<p>おそらくこの2点が原因だろうと推測。</p>
<p>これを解決するに至った考えが、<strong><span class="red-under" style="font-size: 20px">配列数式</span></strong>です。</p>
<h2>配列数式？</h2>
<p>配列を対象に、1つの数式を作成する式のことを呼んでいます。</p>
<p>&nbsp;</p>
<p>これを行うことで、あらかじめ検査範囲に当てられた、
配列内の文字列連結の処理を行ってしまう数式を作ります。</p>
<p>作り方は簡単で、作成した式の前後に{}を付与してあげるだけです。</p>
<p>※　{}これはただ、入力するだけでは効力が発揮されません。</p>
<figure id="attachment_mmd_2569" class="wp-block-image aligncenter"><img decoding="async" width="276" height="490" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_11.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>&nbsp;</p>
<p>この状態で、<span class="marker-under">キーボードの<strong>&#8220;Ctrl&#8221;</strong> + <strong>&#8220;Shift&#8221;</strong> + <strong>&#8220;Enter&#8221;</strong>を同時に押します</span>。</p>
<p>&nbsp;</p>
<p>実行すると、</p>
<div class="sp-info"><span style="font-size: 20px"><strong>{= INDEX(F:F,MATCH(I3&amp;J3, C:C&amp;D:D, 0),0)}</strong></span></div>
<p>となるかと思います。</p>
<p>&nbsp;</p>
<p>そして、#Valueではなく、結果が正しく表示されました。</p>
<p>これでなんとか目的達成です。</p>
<figure id="attachment_mmd_2570" class="wp-block-image aligncenter"><img decoding="async" width="783" height="264" src="https://dreamparadaisu.com/wp-content/uploads/2021/06/excel_12.png" class="attachment-full size-full" alt="" loading="lazy" align="center" /></figure>
<p>それぞれ実行した結果になります。</p>
<p>&nbsp;</p>
<h1>まとめ</h1>

<table id="tablepress-9" class="tablepress tablepress-id-9">
<thead>
<tr class="row-1">
	<th class="column-1">項目</th><th class="column-2">書き方</th><th class="column-3">内容</th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">INDEX関数</td><td class="column-2">INDEX(配列、行番号、【列番号】)</td><td class="column-3">指定した行と列が交差する値を取得</td>
</tr>
<tr class="row-3">
	<td class="column-1">MATCH関数</td><td class="column-2">MATCH(検査値、検査範囲、照合の種類)</td><td class="column-3">検査範囲にある検査値を照合の種類に基づいて結果を取得</td>
</tr>
<tr class="row-4">
	<td class="column-1">配列数式</td><td class="column-2">{計算式}</td><td class="column-3">Ctrl + Shift + Enterそれぞれのキーを同時押し(計算式セル編集中に)</td>
</tr>
</tbody>
</table>
<!-- #tablepress-9 from cache -->
<p><a href="https://rpx.a8.net/svt/ejp?a8mat=3BI0VE+4KBNQQ+2HOM+63H8H&amp;rakuten=y&amp;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2F0ea62065.34400275.0ea62066.204f04c0%2Fa20071550035_3BI0VE_4KBNQQ_2HOM_63H8H%3Fpc%3Dhttp%253A%252F%252Fwww.rakuten.co.jp%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252F" rel="nofollow">
<img decoding="async" alt="" class="aligncenter" src="http://hbb.afl.rakuten.co.jp/hsb/0ec09b9b.f2fdca6c.0eb4bbaa.95151395/" border="0" /></a></p>
<img loading="lazy" decoding="async" class="aligncenter" src="https://www16.a8.net/0.gif?a8mat=3BI0VE+4KBNQQ+2HOM+63H8H" alt="" width="1" height="1" border="0" />
<p>&nbsp;</p>		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="661"
					data-ulike-nonce="29f478d914"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_661"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://dreamparadaisu.com/excel_1/">【Excel】新たに列を作らず任意列の値を取得する</a> first appeared on <a href="https://dreamparadaisu.com">リョクちゃの電脳日記</a>.<div class='yarpp yarpp-related yarpp-related-rss yarpp-related-none yarpp-template-list'>
<p>この投稿の関連記事が見つかりませんでした。</p>
</div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">661</post-id>	</item>
	</channel>
</rss>
