プロが教えるわが家の防犯対策術!

CONCATENATE+VLOOKUPでリンクさせている文字列を、任意の位置で折り返したい場合・・・

知恵を貸してください!!!

折り返したい文字数目が毎回変わる場合・・・、
改行したい回数が決まっていない場合・・・、
どのように設定しますか?

CONCATENATEで連結する文字列ごとに改行を加える・・・
かつ、VLOOKUPでリンクさせる文字列のみ、途中で何度改行するかが決まっていない・・・
そんなイメージです。

LEN関数を使って作ってみたのですが、
何度改行するかが決まっていないためだと思うのですが、どうしてもうまく作れません。

助けてくださーい。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/22 10:27

散々質問した結果にしては、申し訳ないのですが、


式では難しい(私の知識ではお手上げ)です。
ごめんなさい。

幾つか試してみましたが、なかなか綺麗に行かなくて...

マクロではいけないのでしょうか?
そのBookにマクロを保存したくなければ、マクロ専用Bookを作るとか。
どうでしょ?
それなら引き続きお手伝いできますが...
残念ですが、式だと私はお手上げです。

この回答への補足

マクロで良いですよー。
と言うか、マクロの方がありがたかったです。
説明不足でした。ゴメンナサイ。

あと、NISHI6さまが記載の通り、実は以前にも知恵を拝借しています。
ですが、お礼欄のとおりで、指定が必ず昇順になるとは限らなかったので、いろいろ考えたのでした。
本当に・・・今度こそ帰りますので、また今度・・・。
ありがとうございました。

補足日時:2001/08/15 16:18
    • good
    • 0

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
    • good
    • 0
この回答へのお礼

お久しぶりです。
またお会いできて、感激です。
今後もお世話してください。

ところで・・・
以前に作っていただいたものは、指定が昇順でないと・・・ということで、LEN関数を使ってみたのでした。
かなり単純に・・・3行くらいで(笑)。

もう1回、作っていただいたものを勉強し直してみます。
目に留めていただけて、感謝感激。

そろそろ帰りますので、また後日、この場所を見てください。
ではー。

お礼日時:2001/08/15 16:17

1行の文字数には何か決まりがあるのですか?


また、1つのセル内で、1行の文字数が統一されない
といったことは有るのでしょうか?

またまた補足要求で申し訳ないですけど、お願いします。

この回答への補足

ごめんなさい・・・。
知識不足で、おっしゃっていることが・・・理解できません・・・。

 あいうえお
 かきくけこ   なら見栄えが良いですが、

 あいうえおか
 きくけこ    となると見栄えが悪いので、改行位置を決めたい・・・というイメージ???

リンクしてくるデータが、「あいうえおかきくけこさしすせそ」かもしれないし、「あいうえおかきくけこ」かもしれない・・・そんなイメージでしょうか???

おっしゃっていること自体が、知識不足で答えられません・・・。
具体的にこれは?あれは?と書いていただけると、お答えできるかもしれないです。
お手数をおかけしますが、またご連絡ください。

補足日時:2001/08/15 15:30
    • good
    • 0
この回答へのお礼

お礼ではないのですが・・・
NO.2のお返事を何度も読み返してみて・・・何となく・・・
おっしゃりたいことが分ったような気がしたので、再び。

私の思い違いでなければ、1行の文字数には決まりがありません。

=CONCATENATE(”mmm”,VLOOKUP(・・・FALSE))となっていて、

同じ文字列をリンクしてくる場合でも、表示1では、
mmm(改行)
あいうえお(改行)
かきくけこ(改行)
さしすせそ
としたくて、

表示2では、
mmm(改行)
あいうえおかきくけこ(改行)
さしすせそ
としたい・・・

という感じで、その都度,改行位置を決めたいイメージでしょうか・・・。

うまく説明できずに申し訳ありません。
カフェから返信させていただいているので、次にいつ読むか分りません。
そろそろ帰宅しますー。
ご親切にありがとうございました。(←やっぱりお礼かな???)

お礼日時:2001/08/15 16:05

任意の位置は文字数ですか?それとも特定の文字列?


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

もう少し詳しい情報を下さい。

この回答への補足

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

補足日時:2001/08/15 15:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!