No.5ベストアンサー
- 回答日時:
横から失礼します。
入力する値が数字だけならば、こんな式でもいけそうです。
=SUBSTITUTE(TRIM(CONCATENATE(A1," ",B1," ",C1," ",D1))," ",",")
上記の式は、各セルの値を空白区切りでCONCATENATEして、それをTRIMしてから、空白をカンマに変換しています。
ただし、ひとつのセルに、”1 2”みたいな入力があると、その空白もカンマになってしまうのですが・・・。
No.6
- 回答日時:
こんにちは。
Office 365 には、
TEXTJOIN 関数がありますので、それを再現してみました。
https://dekiru.net/article/14504/
同じ名称にはしないように、[TXTJOIN関数]にしました。
TEXTJOIN (区切り記号[配列可能], 空の文字列を無視, 文字列1, 文字列2, ...,)
1.Event が走らないようにしましたが、第三引き数を、制限なしにすることに工夫しました。
添付図の2番めの式は、
=TXTJOIN({"+","="},FALSE,A3:D3)
区切り文字は、配列式が入ります。第三引き数は、ひとつずつ入れる必要がありません。範囲を選択すればよのですが、ひとつずつも入れることが可能です。セルの範囲だけでしたら、以下のコードは、半分で済みますが、これに個別に入れることを想定して処理機能を2つに分けました。私は、当該Office は持っておりませんから、どのぐらい近づけたか、少し気になります。
'//標準モジュールです。
Function TXTJOIN(ByRef delim As Variant, bln As Boolean, ParamArray arg())
''(区切り記号, 空の文字列を無視, 文字列1, 文字列2, ..., )
Dim buf As String
Dim a, c
Dim cnt As Long, i As Long
Dim dl()
Application.EnableEvents = False
If bln = True Then delim = ""
If InStr(1, TypeName(delim), "()") > 0 Then
cnt = UBound(delim)
dl = delim
Else
cnt = 0 'デリミタの種類の数なし
ReDim dl(1)
dl(1) = delim
End If
i = 1
For Each a In arg()
If TypeName(a) = "Range" Then
For Each c In a
If buf = "" And c.Value <> "" Then
buf = c.Value & dl(i)
i = i + 1
ElseIf c.Value <> "" Then
buf = buf & c.Value & dl(i)
i = i + 1
End If
If cnt = 0 Then
i = 0
dl(i) = delim
ElseIf i > cnt Then
dl(cnt) = ""
End If
Next
Else
If buf = "" And a <> "" Then
buf = a & dl(i)
i = i + 1
ElseIf a <> "" Then
buf = buf & a & dl(i)
i = i + 1
End If
If cnt = 0 Then
i = 0
dl(i) = delim
ElseIf i > cnt Then
dl(cnt) = ""
End If
End If
Next
'再加工
If cnt = 0 And Len(buf) > 1 Then
If Right(buf, 1) = delim Then
buf = Left(buf, Len(buf) - 1)
End If
End If
TXTJOIN = buf
Application.EnableEvents = True
End Function
丁寧なマクロを組んでいただき大変ありがとうございました。
マクロの意味はわかりませんが、今回は単純な「ママチャリ」さんにベストアンサーをささげたいと思います。
どうもありがとうございました。
No.4
- 回答日時:
No.2です。
エラーが出ちゃいましたか!
それでは
>For i = 1 To UsedRange.Rows.Count
をもう少し丁寧に
>For i = 1 To ActiveSheet.UsedRange.Rows.Count
にしたらどうなりますか?
前回のコードはシートモジュールであれば問題ないと思うのですが、
標準モジュールだとエラーになるかもしれません。m(_ _)m
No.3
- 回答日時:
すでに、回答が得られていますが、ちょっと補足します。
ご承知の通り、CONCATENATE関数を使うと空白があると余計な","が付きます。
No1さんの回答あるように、=TEXTJOIN(",",TRUE,A1:D1) と書けばよろしいのですが、これはExcelの2016版からできるもので、古いExcelでは対応していません。
そのため、Excel 2007では、ユーザ定義関数を利用することが考えられます。
https://www.excelspeedup.com/textjoin2/
TEXTJOINの関数をユーザ定義関数で書くと以下のようになります。
Function TEXTJOIN(Delim, Ignore As Boolean, ParamArray par())
Dim i As Integer
Dim tR As Range
TEXTJOIN = ""
For i = LBound(par) To UBound(par)
If TypeName(par(i)) = "Range" Then
For Each tR In par(i)
If tR.Value <> "" Or Ignore = False Then
TEXTJOIN = TEXTJOIN & Delim & tR.Value2
End If
Next
Else
If par(i) <> "" Or Ignore = False Then
TEXTJOIN = TEXTJOIN & Delim & par(i)
End If
End If
Next
TEXTJOIN = Mid(TEXTJOIN, Len(Delim) + 1)
End Function
ご連絡をありがとうございました。
さて、マクロに入れたのですが、
コンパイルエラー
End Sub が必要です。
と表示されてしまいうまくいきません。困りました。
ご助言をいただけると幸いです。
No.2
- 回答日時:
こんにちは!
VBAでの一例です。
Sub Sample1()
Dim i As Long, j As Long, myStr As String
Range("E:E").ClearContents
For i = 1 To UsedRange.Rows.Count
For j = 1 To 4
If Cells(i, j) <> "" Then
myStr = myStr & Cells(i, j) & ","
End If
Next j
If Len(myStr) > 0 Then
Cells(i, "E") = Left(myStr, Len(myStr) - 1)
End If
myStr = ""
Next i
End Sub
※ 本来であれば、最終行の取得方法など一工夫する必要があるのですが
そこまで考慮していません。m(_ _)m
ご回答をありがとうございました。
入力すると、デバックと表示され、以下の行が黄色くなります。
For i = 1 To UsedRange.Rows.Count
マクロに弱く、修正能力がありません。
追加で教えて下さるとありがたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- Excel(エクセル) ある範囲のセルに何を入力すると、別のセルに○を表示させる 3 2022/04/05 15:51
- Excel(エクセル) WORKDAY関数 4 2023/06/08 13:23
- Excel(エクセル) Excel 関数 数式 について 2 2022/09/02 21:45
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルの関数について教えてください。 A1=B1*C1*D1の時 C1D1のセルのどちらかがが空白 1 2022/05/07 23:01
- Excel(エクセル) エクセルの表で A1にデータの入力規則でリストを作って、 (リス、キリン、ゾウとします) リストを選 4 2022/07/15 09:29
- Excel(エクセル) エクセルマクロ セルをクリックするたびに記号を入力 1 2022/10/13 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
血糖値90mg/dlは何mmol/lか グ...
-
Video DownloadHelperのダウン...
-
アダルトサイトで動画や画像を...
-
Google Photoからダウンロード...
-
動画の早送りなどができない(...
-
YouTubeをMP3に
-
PCの萌え系壁紙集め、著作権...
-
私は、私が持っているノートパ...
-
YouTubeの曲をiPod shuffleに入...
-
ユーチューブの動画をウォーク...
-
インターネットから動画のダウ...
-
Real Playerで動画をDLするのは...
-
車のカーナビでYouTube等の動画...
-
ミラーダウンロードとは?
-
違法ダウンロード刑罰化、ボカロPV
-
Irvineでダウンロードした動画...
-
Google ChromeでのダウンロードNG
-
ニコニコはどこまでDLしたら違...
-
動画の結合が出来ない
-
動画共有サイトVeohの利用は違法?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
血糖値90mg/dlは何mmol/lか グ...
-
Video DownloadHelperのダウン...
-
Google Photoからダウンロード...
-
アダルトサイトで動画や画像を...
-
2時間以上の動画を、DVDーR...
-
サンプル動画も違法?
-
トムとジェリーダウンロード方法
-
ミラーダウンロードとは?
-
映像のビット深度について
-
車のカーナビでYouTube等の動画...
-
media player classicのフリー...
-
RealPlayerのダウンロードバー...
-
Real Playerで動画をDLするのは...
-
iTubeGoというアプリでの質問
-
アマレココの動画を変換
-
ボカロ曲をダウンロードしたい...
-
ソースネクスト株式会社からの...
-
X(twitter)からダウンロードし...
-
Any Video Converter フリー版
-
ストリーミング動画をDVDに焼く
おすすめ情報