拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
結合セルの値を得る
Excelで作業をしていた時に、結合セルの値を得たい場面がありました。
その方法を紹介します。
1.事例
たとえば、ワークシートに以下のように入力しているとします。
A列ではセルを縦に結合しています。
A | B | |
---|---|---|
1 | 東京都 | 千代田区 |
2 | 港区 | |
3 | 新宿区 |
ここで、以下のようにA列とB列の値を結合して、C列の値にしたいとします。
A | B | C | |
---|---|---|---|
1 | 東京都 | 千代田区 | 東京都千代田区 |
2 | 港区 | 東京都港区 | |
3 | 新宿区 | 東京都新宿区 |
「C1セルに『=A1&B1』と入力して、C列の2行目以降にコピーすれば良いのでは・・・」と思いましたが、その方法ではうまくいきません。
結合されているA2セルやA3セルは、値が何も入力されていないという扱いになります。
そのため、上で述べた方法だと、C2セルやC3セルには「港区」や「新宿区」だけが表示されます。
2.VBAで関数を自作
この問題は、VBA(Visual Basic for Applications)で関数を自作して解決できます。
セル範囲のオブジェクト(Range)には、「MergeCells」と「MergeArea」というプロパティがあります。
MergeCellsプロパティは、そのセル範囲が、結合されているセル範囲の一部であるかどうかを表します。
結合されていれば値はTrueになり、結合されていなければFalseです。
また、MergeAreaプロパティは、結合されているセル範囲全体を指すプロパティです。
これに対して「Offset(0,0)」のメソッドを実行すると、結合されているセル範囲の左上のセルを得ることができます。
これらのプロパティを使って、「MergeArea」という名前の関数を作ると、以下のようになります。
Function MergeValue(R As Range) If R.MergeCells Then MergeValue = R.MergeArea.Offset(0, 0).Value Else MergeValue = R.Value End If If TypeName(MergeValue) = "Empty" Then MergeValue = "" End If End Function
上記のコードを入力する手順は、以下のとおりです。
- Excel 2003以前なら、「ツール」→「マクロ」→「Visual Basic Editor」メニューを選びます。
- Excel 2007以降なら、「開発」リボンを表示して、「Visual Basic」のボタンをクリックします。
- Visual Basic Editorが起動しますので、「挿入」→「標準モジュール」メニューを選びます。
- 上記のコードを貼り付けます。
関数の入力が終わったら、ワークシート上で「MergeValue」という関数を使うことができます。
事例の場合だと、C1セルに「=MergeValue(A1)&B1」と入力し、それをC2セル以降にコピーすれば、目的の結果が得られます。