アプリ版:「スタンプのみでお礼する」機能のリリースについて

A1~A20までのセルにそれぞれ文字が入っています。
=A1&A2&A3&…&A20
で、A1~A20までの内容を結合できると思います。
これ以外で、もっと簡単な式で同じ結果を出す方法は無いでしょうか?

A 回答 (5件)

こんにちは。



>もっと簡単な式で同じ結果を出す方法は無いでしょうか?

「&」演算子を使う以外には、基本的にはないと思います。

領域を統合するという関数は、ワークシートには用意されていません。名前は、たぶん、JOINという名が付けられるはずですが、それは未だ採用されていません。

Concatenate関数は、別にExcel用にあるのではなく、他機種が、「&」演算子が使えないためにあるだけに過ぎません。

そこで、myJoin というユーザー定義関数を考えてみました。

設定の仕方
Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。
次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、このコードを貼り付けて、再び、Alt + F11 で、画面を閉じます。

ただし、登録したブックのみの有効です。

'<標準モジュール>
Function myJoin(範囲 As Range, Optional 区切り文字 As String) As Variant
Dim c As Range, buf As String
  If 範囲.Rows.Count = 1 Or 範囲.Columns.Count = 1 Then
   For Each c In 範囲
     buf = buf & 区切り文字 & c.Value
   Next c
   If 区切り文字 <> "" Then
     myJoin = Mid$(buf, 2)
     Else
     myJoin = buf
   End If
   Else
   myJoin = CVErr(xlErrRef) 'エラー値
  End If
End Function

使い方:

=MYJOIN(A1:A20)

=MYJOIN(A1:A20,",")
とすると、「,」区切りで出てきます。

必ず、縦1列か横1行の範囲を指定してください。
どちらか一方が2列か2行以上の場合は、エラーが出ます。

汎用的にどこにでも使いたい場合は、アドイン化しなければなりません。マクロが少し分る方の、Public ステートメントをつけるというのは良くある誤解です。
    • good
    • 3
この回答へのお礼

ありがとうございます。
マクロ試してみましたが、思った通りの結果が得られました。
区切り文字の指定など、気を利かせて頂きとても便利です。

お礼日時:2005/08/30 12:35

取り敢えずの結果が欲しい時なんかに良くやるのは、



B1=A1
B2=B1&A2
B3=B2&A3

B3以降はB2をコピペ。

で、B20に結合結果を出し、コピー、値として貼り付けとか。
    • good
    • 7
この回答へのお礼

ありがとうございます。
思えば私もそのやり方をしていた事があります!
気付かなかった私は頭が固くなってしまったのでしょうか…。

お礼日時:2005/08/30 12:31

ユーザー定義の関数を作れば可能ですが...


Alt+F11でVisualBasicEditorを起動して
「挿入」「モジュール」でモジュールを作成(既に有る場合はこの作業は不要)
モジュールに下記のコードを作成
Function concat(HANI As Range)
Dim Sx, Sy, Ex, Ey As Long, WKS As String
Sx = HANI.Columns.Column
Sy = HANI.Rows.Row
Ex = HANI.Columns.Count - Sx + 1
Ey = HANI.Rows.Count - Sy + 1
For Hx = Sx To Ex
For Hy = Sy To Ey
WKS = WKS & Cells(Hy, Hx)
Next Hy
Next Hx
concat = WKS
End Function

=concat(A1:A20)
で結果を出せます。
※複数列の場合は行方向を先に連結します。
逆がいい場合はFor..to..Next文の順番を変えてください。
    • good
    • 4
この回答へのお礼

ありがとうございます。
シンプルでわかりやすいマクロですね。参考になります。

お礼日時:2005/08/30 12:37

VBAですがこんな感じと思います。


結合した値はB1セルに書き出します。


Sub 結合()

Dim str As String

For i = 1 To 20

str = str & Cells(i, 1).Value
Next

Cells(1, 2).Value = str

End Sub
    • good
    • 4
この回答へのお礼

ありがとうございます。
やっぱりVBAを使うことになるのですね。

お礼日時:2005/08/30 11:17

concatenate関数はいかがでしょうか。



参考URL:http://www.morgan.co.jp/kiso/4excel-6.htm

この回答への補足

ありがとうございます。
「&」の入力から「,」の入力になって、入力しやすくはなるのですが…
例えば、A1:A20で指定すると文字列を繋げる、というようなモノを求めているのですが、無いでしょうか…

補足日時:2005/08/30 08:07
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!