ここから本文です

エクセル 条件つきで任意の文字数のところで改行を行いたいです。 A1セルに「AB...

hal********さん

2017/1/2310:50:31

エクセル 条件つきで任意の文字数のところで改行を行いたいです。

A1セルに「AB01,AB05,BC01,AA121,AC01」という文字列があります。

この文字列は
・前はアルファベット2ケタ、後ろは数字2ケタor3ケタ,
つまり計4ケタもしくは5ケタのアルファベットと数字の組み合わせが「,」で区切られています。

このデータに
A2セルに仮に「13」というデータを入力すると
A1セルの頭から数えて、13文字目、ただし、「,」の区切り位置単位でセル内改行をさせA3セルに表示させたいです。

例えば上記の場合A3セルに表示する結果としては

AB01,AB05,
BC01,AA121,AC01

とさせたいです。

もしA2セルに「16」というデータが入るとA3セルの計算結果は

AB01,AB05,
BC01,AA121,AC01

となります。

ただ単にA2セルの文字数でセル内改行させるならA3セルの計算式は
=MID(A1,1,A2)&CHAR(10)&MID(A1,A2+1,LEN(A1))

でいいと思うのですが、、「,」の区切り位置単位という条件が入った場合の対処方法に悩んでいます。
よろしくお願いいたします。

閲覧数:
120
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

webnaveさん

2017/1/2313:58:41

=SUBSTITUTE(A1,",",","&CHAR(10),LEN(LEFT(A1,A2))-LEN(SUBSTITUTE(LEFT(A1,A2),",","")))

解説
LEN(LEFT(A1,A2))-LEN(SUBSTITUTE(LEFT(A1,A2),",",""))

A1セルの文字列先頭からA2数迄の中の "," の個数

=SUBSTITUTE(A1,",",","&CHAR(10),個数)

個数目の "," を ","&改行 に変換

質問した人からのコメント

2017/1/23 14:38:26

できました!!
なるほど・・・","の個数を数えて、その指定の","の部分を改行コードに文字変換させるんですね!

ありがとうございます。
助かりました~
ベストアンサーとさせて頂きます。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

mit********さん

2017/1/2312:58:58

作業列を作って対応します。
例えばE列は空白の列としてF1セルには次の式を入力します。

=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",100)),COLUMN(A1)*100-99,100))

F2セルには次の式を入力します。

=IF(F1="","",E2+LEN(F1)+1)

F3セルには次の式を入力します。

=IF(OR($A2="",F2=""),"",IF(F2<=$A2,IF(E3="",F1&",",E3&F1&","),""))

F4セルには次の式を入力します。

=IF(OR($A2="",F2="",COUNTIF(F3,"*?")),"",IF(F2>=$A2,IF(E4="",F1&",",E4&F1&IF(G2="","",",")),""))

F1セルからF4セルを選択してから含まれるそれらの式を右横方向にドラッグコピーします。
答えのA3セルには次の式を入力してからセルの表示形式で「配置」のタブから折り返して表示する」にチェックをしてOKすればよいでしょう。

=INDEX(F3:P3,MATCH(A2,F2:P2,1))&CHAR(10)&INDEX(F4:P4,COUNT(F2:P2))

なお、作業列が目障りでしたらそれらの列を選んで右クリックし「非表示」を選択すればよいでしょう。

プロフィール画像

カテゴリマスター

kky********さん

2017/1/2311:42:45

マクロの回答ですが。

A2セルが「16」の場合は
AB01,AB05, BC01
AA121,AC01
ですよね?


Sub Sample()
Dim tmp As Variant
Dim i As Integer
Dim wklen As Integer
Dim otmp As String
tmp = Split(Range("A1").Value, ",")
otmp = tmp(0)
wklen = Len(tmp(0))
For i = 1 To UBound(tmp)
wklen = wklen + Len(tmp(i)) + 1
If wklen > Range("A2").Value Then
otmp = otmp & Chr(10) & tmp(i)
wklen = 0
Else
otmp = otmp & "," & tmp(i)
End If
Next i
Range("A3").Value = otmp
Range("A3").WrapText = True
End Sub

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる