[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数セルの文字列を指定の文字列を挟みながら連結する』(スカボロー)
A1〜A10に文字列を入力し、
B1=A1
B2=B1&","&A2
としてB2をB10までコピーしたらA1〜A10の文字列が","を挟んで連結されます。
また、ユーザー定義関数で
Function myconc(ByVal r As Range, mystr As String) As String
Dim c As Range myconc = "" For Each c In r If myconc <> "" Then myconc = myconc & mystr myconc = myconc & c.Value Next c End Function
とし、セルに
=myconc(A1:A10,",")
で作業列を使った方法と同じ結果が得られます。
いま調べているのは、これを作業列やユーザー定義関数を使わず、配列数式
で出来ないか、ということです。
作業列を使ってもさほど手間は掛からないのですが、もし一つのセルを使って
数式で出来る方法があればと思い質問させていただきました。
方法がありましたらご教示お願いいたします。
< 使用 Excel:Excel2007、使用 OS:WindowsVista >
>CONCATENATE関数で指定する引数は、SUM関数などと似ているので、 >「=CONCATENATE(A1:A5)」 >のように「:」(コロン)を使ってセル範囲を指定してその文字列を全部結合できるとお考えになる方もいらっしゃるようですが、残念ながらこれはできません。
このページでユーザー定義関数が紹介されてました。
ということはやはりエクセルの一般機能ではできなさそうです。
通常は作業列を使うことで対処したいと思います。
お騒がせしました。
(スカボロー) 2015/06/20(土) 22:26
・ユーザー定義関数を使いたくない(どのPCでも使えないと困る) ・作業列を使いたくない ・一つのセルに長い数式を入力するのは面倒だ
少しでも入力の手間を省きたいというのであれば、 値でなく、アドレスを連結するマクロ(数式を作成するマクロ) にしてはどうでしょうか。 マクロは使うけど、入力のためだけ。
ただ汎用性のあるマクロではないので 使用頻度が少ないと、本末転倒かもしれません。
今回のケースとちょっと違いますが、 規則性はあって、 単純な式なんだけど、 でもフィルコピーが使えないといった場合など マクロで数式入力すると簡単なことがあります。
↓は、アクティブセルに、指定したセルを指定の文字で連結する数式が入ります。
Sub test() Dim r As Range Dim d As String Dim c As Range Dim s As String
If Not IsEmpty(ActiveCell) Then If MsgBox("Overwrite OK?", vbOKCancel) = vbCancel Then Exit Sub End If
On Error Resume Next Set r = Application.InputBox("Select cells", Type:=8) On Error GoTo 0 If r Is Nothing Then Exit Sub If r.Count = 1 Then Exit Sub
d = Application.InputBox("Input delimiter", Type:=2)
If d = "False" Or d = "" Then d = "," Else d = ",""" & d & """," End If
For Each c In r s = s & d & c.Address(0, 0) Next
s = Mid(s, 1 + Len(d)) s = "=concatenate(" & s & ")"
ActiveCell.Formula = s
End Sub
(マナ) 2015/06/21(日) 16:18
マナさん、ご回答ありがとうございます。
たとえば、PDF編集アプリケーションで一つのPDFファイルを複数のPDF ファイルに切り分けるとき、InputBoxに切り分けるポイントをページ番号で
2,5,6,11,15
というように入力するものがあります。 こういう場合にエクセルでセルにページ番号を入れていって最後に「,」で 挟んでInputBoxに入力する文字列を生成する、としたいときに今回の質問の ようなことが簡単にできたらいいな、と思うことがあります。
頻繁に使うようなものでしたらエクセルで専用のブックを作っておいたり ユーザー定義関数やアドインなどで作っておく、とすればいいのですが、 作っておいても存在を忘れたり操作方法を忘れたりします。
エクセルの標準機能で出来ても手順を忘れたら同じことですのでだったら 何で質問したのだ?ということになってしまいますが・・・
マナさんにご教示いただきましたInputBoxを使った方法も試させていただ きました。
これでしたら結合対象セルや区切り文字を機動的に設定できますね。
最初の質問の意図からは本末転倒ですが、下記のような方法でも行けました。
選択セル範囲の内容をクリップボードに格納し、クリップボードの内容の タブや改行を区切り文字に変換、というものです。
'参照設定:Microsoft Forms ** Object Library
Sub test() Dim ndt As New DataObject Dim mycb As String Dim mystr As String Selection.Copy Set ndt = New DataObject With ndt .GetFromClipboard mycb = .GetText End With mystr = Replace(cbstr, vbTab, ",") mystr = Replace(mystr, vbLf, ",") Range("A1").Value = mystr End Sub
配列数式などの一般機能に拘らずに場面場面にあった方法で対処していき ます。
ありがとうございました。 (スカボロー) 2015/06/22(月) 01:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.