OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.119002
  • 閲覧数114
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 67% (35/52)

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

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

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

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

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

助けてくださーい。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル13

ベストアンサー率 68% (791/1163)

改行箇所を順不同に設定可能としてみました。同じ数値を設定することもできます。(空白行になります)
=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

お礼率 67% (35/52)

かなり感激しました。
本当に・・・「感激」としか言いようがないと言うか・・・。
何度もお返事をいただき、ありがとうございました。
これからもよろしくお願いします・・・。
投稿日時 - 2001-08-22 10:27:23
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル8

ベストアンサー率 37% (13/35)

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

もう少し詳しい情報を下さい。
補足コメント
iillyy

お礼率 67% (35/52)

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

  • 回答No.2
レベル8

ベストアンサー率 37% (13/35)

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

またまた補足要求で申し訳ないですけど、お願いします。
補足コメント
iillyy

お礼率 67% (35/52)

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

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

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

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

おっしゃっていること自体が、知識不足で答えられません・・・。
具体的にこれは?あれは?と書いていただけると、お答えできるかもしれないです。
お手数をおかけしますが、またご連絡ください。
投稿日時 - 2001-08-15 15:30:43
お礼コメント
iillyy

お礼率 67% (35/52)

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

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

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

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

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

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

うまく説明できずに申し訳ありません。
カフェから返信させていただいているので、次にいつ読むか分りません。
そろそろ帰宅しますー。
ご親切にありがとうございました。(←やっぱりお礼かな???)
投稿日時 - 2001-08-15 16:05:12
  • 回答No.3
レベル13

ベストアンサー率 68% (791/1163)

QNo.104176『リンクしてきたデータの文字列を折り返すには・・・???』で回答した下記モジュールでできませんか? 例えば、A1の文字を5文字目と10文字目で折り返す時は、   =Orikaeshi2(A1,5,10)  ですが 5文字目で3回改行したい時は   =Orikaeshi2(A1,5,5,5,10)  とします。 動作確認済みですが、別の意味でした???当然、文字列があるセル ...続きを読む
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

お礼率 67% (35/52)

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

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

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

そろそろ帰りますので、また後日、この場所を見てください。
ではー。
投稿日時 - 2001-08-15 16:17:46
  • 回答No.4
レベル8

ベストアンサー率 37% (13/35)

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

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

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

お礼率 67% (35/52)

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

あと、NISHI6さまが記載の通り、実は以前にも知恵を拝借しています。
ですが、お礼欄のとおりで、指定が必ず昇順になるとは限らなかったので、いろいろ考えたのでした。
本当に・・・今度こそ帰りますので、また今度・・・。
ありがとうございました。
投稿日時 - 2001-08-15 16:18:16
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ