• ベストアンサー

リンクさせた文字列を、任意の位置で,複数回数,折り返したい場合・・・

CONCATENATE+VLOOKUPでリンクさせている文字列を、任意の位置で折り返したい場合・・・ 知恵を貸してください!!! 折り返したい文字数目が毎回変わる場合・・・、 改行したい回数が決まっていない場合・・・、 どのように設定しますか? CONCATENATEで連結する文字列ごとに改行を加える・・・ かつ、VLOOKUPでリンクさせる文字列のみ、途中で何度改行するかが決まっていない・・・ そんなイメージです。 LEN関数を使って作ってみたのですが、 何度改行するかが決まっていないためだと思うのですが、どうしてもうまく作れません。 助けてくださーい。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

改行箇所を順不同に設定可能としてみました。同じ数値を設定することもできます。(空白行になります) =Orikaeshi3(A1,10,20,10,5,5) のようにします。 これだと、A1の文字を5個目で2回、10個目で2回、20個目1回で改行します。前回モジュールで設定値をソートしているだけです。 Public Function Orikaeshi3(Bunsyo As String, ParamArray aryNagasa() As Variant)   Dim L As Integer 'カウンタ   Dim mojisuu As Integer '1行文字数   Dim wkBunsyo As String '処理用変数   '改行位置指定を昇順にソートする   Dim num As Integer '入力値数(0から)   Dim j As Integer 'ソート用カウンタ   Dim wk As Variant 'スワップ用変数   num = UBound(aryNagasa())   While num > 0     For j = 1 To num '逆順なら交換する       If aryNagasa(j - 1) > aryNagasa(j) Then         wk = aryNagasa(j - 1)         aryNagasa(j - 1) = aryNagasa(j): aryNagasa(j) = wk       End If     Next     num = num - 1 'ソート対象を減らしていく   Wend   '改行を行う   For L = 0 To UBound(aryNagasa())     If L = 0 Then       mojisuu = aryNagasa(L) '改行が1回     Else       mojisuu = aryNagasa(L) - aryNagasa(L - 1) '改行が2回以上     End If     wkBunsyo = wkBunsyo & Left(Bunsyo, mojisuu) & vbLf     Bunsyo = Mid(Bunsyo, mojisuu + 1)   Next   wkBunsyo = wkBunsyo & Bunsyo   Orikaeshi3 = wkBunsyo End Function

iillyy
質問者

お礼

かなり感激しました。 本当に・・・「感激」としか言いようがないと言うか・・・。 何度もお返事をいただき、ありがとうございました。 これからもよろしくお願いします・・・。

その他の回答 (4)

  • trytrytry
  • ベストアンサー率37% (13/35)
回答No.4

散々質問した結果にしては、申し訳ないのですが、 式では難しい(私の知識ではお手上げ)です。 ごめんなさい。 幾つか試してみましたが、なかなか綺麗に行かなくて... マクロではいけないのでしょうか? そのBookにマクロを保存したくなければ、マクロ専用Bookを作るとか。 どうでしょ? それなら引き続きお手伝いできますが... 残念ですが、式だと私はお手上げです。

iillyy
質問者

補足

マクロで良いですよー。 と言うか、マクロの方がありがたかったです。 説明不足でした。ゴメンナサイ。 あと、NISHI6さまが記載の通り、実は以前にも知恵を拝借しています。 ですが、お礼欄のとおりで、指定が必ず昇順になるとは限らなかったので、いろいろ考えたのでした。 本当に・・・今度こそ帰りますので、また今度・・・。 ありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

QNo.104176『リンクしてきたデータの文字列を折り返すには・・・???』で回答した下記モジュールでできませんか? 例えば、A1の文字を5文字目と10文字目で折り返す時は、   =Orikaeshi2(A1,5,10)  ですが 5文字目で3回改行したい時は   =Orikaeshi2(A1,5,5,5,10)  とします。 動作確認済みですが、別の意味でした???当然、文字列があるセルとは別のセルに書くことになります。 標準モジュールに貼り付けます。(再掲)ユーザー定義関数名はOrikaeshi2に変えています。 Public Function Orikaeshi2(Bunsyo As String, ParamArray aryNagasa() As Variant)   Dim L As Integer 'カウンタ   Dim mojisuu As Integer '1行文字数   Dim wkBunsyo As String '処理用変数   'Bunsyo = " " & Bunsyo '先頭に空白   For L = 0 To UBound(aryNagasa())     If L = 0 Then '改行は1回しかない場合       mojisuu = aryNagasa(L)     Else '改行が2回以上ある場合       mojisuu = aryNagasa(L) - aryNagasa(L - 1) '1行の文字数     End If     'wkBunsyo = wkBunsyo & Left(Bunsyo, mojisuu) & vbLf & " "     wkBunsyo = wkBunsyo & Left(Bunsyo, mojisuu) & vbLf     Bunsyo = Mid(Bunsyo, mojisuu + 1) ’改行より右の文字部分   Next   wkBunsyo = wkBunsyo & Bunsyo '残りの文字部分   Orikaeshi2 = wkBunsyo End Function

iillyy
質問者

お礼

お久しぶりです。 またお会いできて、感激です。 今後もお世話してください。 ところで・・・ 以前に作っていただいたものは、指定が昇順でないと・・・ということで、LEN関数を使ってみたのでした。 かなり単純に・・・3行くらいで(笑)。 もう1回、作っていただいたものを勉強し直してみます。 目に留めていただけて、感謝感激。 そろそろ帰りますので、また後日、この場所を見てください。 ではー。

  • trytrytry
  • ベストアンサー率37% (13/35)
回答No.2

1行の文字数には何か決まりがあるのですか? また、1つのセル内で、1行の文字数が統一されない といったことは有るのでしょうか? またまた補足要求で申し訳ないですけど、お願いします。

iillyy
質問者

お礼

お礼ではないのですが・・・ NO.2のお返事を何度も読み返してみて・・・何となく・・・ おっしゃりたいことが分ったような気がしたので、再び。 私の思い違いでなければ、1行の文字数には決まりがありません。 =CONCATENATE(”mmm”,VLOOKUP(・・・FALSE))となっていて、 同じ文字列をリンクしてくる場合でも、表示1では、 mmm(改行) あいうえお(改行) かきくけこ(改行) さしすせそ としたくて、 表示2では、 mmm(改行) あいうえおかきくけこ(改行) さしすせそ としたい・・・ という感じで、その都度,改行位置を決めたいイメージでしょうか・・・。 うまく説明できずに申し訳ありません。 カフェから返信させていただいているので、次にいつ読むか分りません。 そろそろ帰宅しますー。 ご親切にありがとうございました。(←やっぱりお礼かな???)

iillyy
質問者

補足

ごめんなさい・・・。 知識不足で、おっしゃっていることが・・・理解できません・・・。  あいうえお  かきくけこ   なら見栄えが良いですが、  あいうえおか  きくけこ    となると見栄えが悪いので、改行位置を決めたい・・・というイメージ??? リンクしてくるデータが、「あいうえおかきくけこさしすせそ」かもしれないし、「あいうえおかきくけこ」かもしれない・・・そんなイメージでしょうか??? おっしゃっていること自体が、知識不足で答えられません・・・。 具体的にこれは?あれは?と書いていただけると、お答えできるかもしれないです。 お手数をおかけしますが、またご連絡ください。

  • trytrytry
  • ベストアンサー率37% (13/35)
回答No.1

任意の位置は文字数ですか?それとも特定の文字列? Lenを使っているなら文字数のような気がしますが、 セルのプロパティの折り返して表示ではだめなのでしょうか? でも、セル内に改行を入れると自動的になったような気が... そうすると、それも駄目なんでしょうね。 特定の文字で改行なら出来そうな気はしますが。 もう少し詳しい情報を下さい。

iillyy
質問者

補足

特定の文字列ではありません。 今回は10文字目と20文字目・・・とか 次は5文字目と10文字目と15文字目・・・と言うように、 毎回,改行したい位置が違って、かつ改行する回数も決まっていません。 知恵をお貸しくださーい。

関連するQ&A