エクセルの関数を使い、ランダム文章を作成しているのですが、改行のことで質問します。
セルA2には
=CONCAT(B2:B200)
があるとします。
セルB2には
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))&CHAR(10)," ")
セルB3には
=IFERROR(INDEX(3:3,AGGREGATE(15,6,COLUMN(C3:I3)/(C3:I3<>""),RANDBETWEEN(1,COUNTA(C3:I3))))&CHAR(10)," ")
同じようにセルB4~B200まで同じように続くとします。
CからIの行には各データ(文章)が入っています。
ただし、行によって、C~Iにデータのない空白行もあります。
そこで質問ですが、空白行に改行を入れるにはどうすればいいのでしょうか?
今のままでは、セルB2を見てみると・・・・
今日は、雨が降っています。
明日は、晴れるといいですね。
では、さようなら
こんな感じとなります。
これを・・・
今日は、雨が降っています。
明日は、晴れるといいですね。
では、さようなら
このような感じで空白行には、改行を入れて表示させたいのですが、どうすればいいか分かりません。
どなたか教えていただけないでしょうか?
よろしくお願いします。
No.10ベストアンサー
- 回答日時:
No.9です。
>=TEXTJOIN(CHAR(10),FALSE,B2:B200)
>こちらのやり方で最後の改行を削除するにはどうすればいいか
とのお尋ねですが、d-q-t-pさんからの回答がないようなので、このご質問がクローズになる前に、稚拙ではありますが私のアイディアを投稿しておきます。
B2の数式が
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))," ")
で下方向にコピーされているとして、
A2の数式を以下のように修正すればよいと思います。
=TEXTJOIN(CHAR(10),FALSE,INDIRECT("B2:B"& MAX(INDEX(ROW(B2:B200)*(B2:B200<>" "),0))))
No.9
- 回答日時:
No.8です。
>「λ」が入るのでB列を見ているとなんか違和感を感じます。
>「λ」が入らない方法があったら教えてください。
方法を二つほど考えてみました。
まず一つ目は「λ」を別の文字にする方法です。例えば「♪」に変更すれば各センテンスが以下のように少し楽しげな感じになり、λよりはましになると思います。
「今日は、雨が降っています。♪」
「明日は、晴れるといいですね。♪」
「では、さようなら♪」
この場合、複数ある数式の中の「λ」を全て「♪」に変更すればOKです。
通常のセンテンスに登場しないという理由で「♪」を選択したのですが、お遊び半分に見えてしまいます。
お勧めは、「センテンス中には全角スペースは存在しない」という前提が付きますが、「λ」を「全角スペース」に変更する方法です。
この方法だと、B列には見かけ上センテンスの末尾には何も表示されません。この場合も数式中の「”λ”」を全て「" "(全角スぺース)」に変更すればOKです。つまり、B2に
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))&" "&CHAR(10)," ")
下方向へコピー
A2に
=SUBSTITUTE(SUBSTITUTE(LEFT(CONCAT(B2:B200),FIND("Ω",SUBSTITUTE(CONCAT(B2:B200)," ","Ω",COUNTIF(B2:B200,"* *"))))," ",CHAR(10))," ","")
となります。
二つ目は
C列~I列からランダムに選択されてB列に表示されるセンテンスに一定のルールを設ける方法です。
そのルールは以下の2つです。
(1)B列に表示されたセンテンスの末尾に必ず「。」があること
(2)B列に表示されたセンテンスの中に末尾以外には「。」がないこと。
従って、ご質問者がお示しになった例でいうと、
「今日は、雨が降っています。」→OK
「明日は、晴れるといいですね。」→OK
「では、さようなら」→NG これを、「では、さようなら。」に修正する必要があります。
この場合、B2に記述する数式は
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))&CHAR(10)," ")
となり、最初にご質問者が示されたものと変わりありません。
これを下方向にコピーするものとします。
A2に記述する数式は
=SUBSTITUTE(LEFT(CONCAT(B2:B200),FIND("Ω",SUBSTITUTE(CONCAT(B2:B200),"。","Ω",COUNTIF(B2:B200,"*。*"))))," ",CHAR(10))
となり、B列にルールを設定したので数式は前回回答より若干短くなります。
No.8
- 回答日時:
No.6です。
>goomaniaさんの方法を試したのですが #VALUE!とエラーがでるようで
>す。これで解決できればよかったのすが・・・。
数式の記述に何等かの誤りがあるものと推測されます。
FIND関数で検索文字が見つからないのではないでしょうか?
FIND関数の記述は正しく記述されていますか?
B列に表示されているセンテンスの末尾に「λ」が表示されていますか?
添付画像をご覧ください。
添付画像①ではB2に
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))&"λ"&CHAR(10)," ")
を記述し、
添付画像➁ではA2に
=SUBSTITUTE(SUBSTITUTE(LEFT(CONCAT(B2:B200),FIND("Ω",SUBSTITUTE(CONCAT(B2:B200),"λ","Ω",COUNTIF(B2:B200,"*λ*"))))," ",CHAR(10)),"λ","")
を記述しています。
当方では#VALUE!は再現されません。
お書きになった数式をコピペして、補足コメントにアップできませんか?
No.7
- 回答日時:
結局バージョンは秘密ですか。
> B200まで行かない場合は、最後に空のセルが続くと改行だらけとなります。
そんなものは何とでもなるでしょう。提示した数式にしか反応しないの
はいかがなものかと思います。
私はこれ以上回答しないことにします。
No.6
- 回答日時:
ご質問の真意が伝わらないため、一部の回答者さんが回答に苦慮している様子が見て取れます。
一応、「空白行があったら、生成される文章の空白行の位置に行数分の改行を入れたい」というのが真意だと推測しました。
従って、No.5さんがお示しになった方法で解決できると思います。
ただし、C列~I列のデータが200行目までフルにある場合は問題ないのですが、例えば150行目でデータが終わっている場合、B151セル~B200セルは空白セルになるので、50行の連続改行が文章の末尾につくことになります。
「文章中の改行はOKだが、末尾の連続改行は不要」というケースもあるかも知れません。
これを実現する方法を記します。
B2セルの数式は、
=IFERROR(INDEX(2:2,AGGREGATE(15,6,COLUMN(C2:I2)/(C2:I2<>""),RANDBETWEEN(1,COUNTA(C2:I2))))&"λ"&CHAR(10)," ")
に修正し、これを下方向へコピーしているものとします。
A2に以下の数式を記述するということになります。
=SUBSTITUTE(SUBSTITUTE(LEFT(CONCAT(B2:B200),FIND("Ω",SUBSTITUTE(CONCAT(B2:B200),"λ","Ω",COUNTIF(B2:B200,"*λ*"))))," ",CHAR(10)),"λ","")
※上記数式に登場する「λ」「Ω」は通常の日本語センテンスに登場しない文字を意味しているだけで、「これでなくてはいけない」というものではありません。
No.4
- 回答日時:
Excelのバージョンはいくつなのですか? CONCATを使っていると
いうことは Excel2019か Excel for365なんでしょうけど だったら
今更 AGGREGATEなんて使う意味がありません。
数式だけでなく やろうとしていることを一から説明し直された方が
いいかと思います。
No.3
- 回答日時:
どのように「ちょっと言葉が足らず」だけだったンですか?
質問文の
》 今のままでは、セルB2を見てみると・・・・
のときの、B2に空白行が無かったことが「ちょっと言葉が足らず」?
私は此処でサヨナラします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) Excelでハイパーリンクが変化する表を作りたい 6 2023/05/03 07:54
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) エクセル関数のことで質問です。 別シートセルから値をもってくるように関数を設定しているときに、 別シ 3 2023/01/31 14:10
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Excel(エクセル) 【エクセル】複雑な関数を教えてください 1 2023/06/05 18:09
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
アクティブになっている行をマ...
-
特定の文字がある行以外を削除...
-
AのセルとB行を比較して、一致...
-
Excel グラフのプロットからデ...
-
EXCELで最後の行を固定
-
セルの色によって条件文をつけ...
-
エクセル マクロ等を利用した各...
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロで数値が変っ...
-
Excelマクロ 期間を指定してデ...
-
貼り付けた数式を最終行まで繰...
-
Excel VBA アクティブセルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報
回答ありがとうございます。
この場合、改行はできるのですが、2行続けて空白が続いた場合でも同じように表示されてしまいます。
-----------------------------
B2 今日は、雨が降っています。
B3
B4
B5 明日は、晴れるといいですね。
B6
B7 では、さようなら
-----------------------------
このように2行続けて空白がある場合は以下のように表示させたいです。
-----------------------------
今日は、雨が降っています。
明日は、晴れるといいですね。
では、さようなら
-----------------------------
ちょっと言葉が足らずすいませんでした。
回答ありがとうございます。確かにNo.5さんの方法で出来るのですが、B200まで行かない場合は、最後に空のセルが続くと改行だらけとなります。goomaniaさんの方法を試したのですが #VALUE!とエラーがでるようです。これで解決できればよかったのすが・・・。
d-q-t-p様
なんか教えてもらっているのにすいません。
自分は、エクセルの関数とかよくわからなくて、質問しようにも上手く伝える事が出来ずなさけないです。
気を悪くしたら本当にごめんなさい。
今さらですが、エクセルのバージョンを確認したんですが、2016となっていました。
=TEXTJOIN(CHAR(10),FALSE,B2:B200)
もし、よろしかったら、こちらのやり方で最後の改行を削除するにはどうすればいいか教えていただけないでしょうか?
goomania様
教えてもらった方法でできました。
ただ、「λ」が入るのでB列を見ているとなんか違和感を感じます。
「λ」が入らない方法があったら教えてください。