- ベストアンサー
リンクさせた文字列を、任意の位置で,複数回数,折り返したい場合・・・
CONCATENATE+VLOOKUPでリンクさせている文字列を、任意の位置で折り返したい場合・・・ 知恵を貸してください!!! 折り返したい文字数目が毎回変わる場合・・・、 改行したい回数が決まっていない場合・・・、 どのように設定しますか? CONCATENATEで連結する文字列ごとに改行を加える・・・ かつ、VLOOKUPでリンクさせる文字列のみ、途中で何度改行するかが決まっていない・・・ そんなイメージです。 LEN関数を使って作ってみたのですが、 何度改行するかが決まっていないためだと思うのですが、どうしてもうまく作れません。 助けてくださーい。
- みんなの回答 (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
その他の回答 (4)
- trytrytry
- ベストアンサー率37% (13/35)
散々質問した結果にしては、申し訳ないのですが、 式では難しい(私の知識ではお手上げ)です。 ごめんなさい。 幾つか試してみましたが、なかなか綺麗に行かなくて... マクロではいけないのでしょうか? そのBookにマクロを保存したくなければ、マクロ専用Bookを作るとか。 どうでしょ? それなら引き続きお手伝いできますが... 残念ですが、式だと私はお手上げです。
補足
マクロで良いですよー。 と言うか、マクロの方がありがたかったです。 説明不足でした。ゴメンナサイ。 あと、NISHI6さまが記載の通り、実は以前にも知恵を拝借しています。 ですが、お礼欄のとおりで、指定が必ず昇順になるとは限らなかったので、いろいろ考えたのでした。 本当に・・・今度こそ帰りますので、また今度・・・。 ありがとうございました。
- nishi6
- ベストアンサー率67% (869/1280)
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
お礼
お久しぶりです。 またお会いできて、感激です。 今後もお世話してください。 ところで・・・ 以前に作っていただいたものは、指定が昇順でないと・・・ということで、LEN関数を使ってみたのでした。 かなり単純に・・・3行くらいで(笑)。 もう1回、作っていただいたものを勉強し直してみます。 目に留めていただけて、感謝感激。 そろそろ帰りますので、また後日、この場所を見てください。 ではー。
- trytrytry
- ベストアンサー率37% (13/35)
1行の文字数には何か決まりがあるのですか? また、1つのセル内で、1行の文字数が統一されない といったことは有るのでしょうか? またまた補足要求で申し訳ないですけど、お願いします。
お礼
お礼ではないのですが・・・ NO.2のお返事を何度も読み返してみて・・・何となく・・・ おっしゃりたいことが分ったような気がしたので、再び。 私の思い違いでなければ、1行の文字数には決まりがありません。 =CONCATENATE(”mmm”,VLOOKUP(・・・FALSE))となっていて、 同じ文字列をリンクしてくる場合でも、表示1では、 mmm(改行) あいうえお(改行) かきくけこ(改行) さしすせそ としたくて、 表示2では、 mmm(改行) あいうえおかきくけこ(改行) さしすせそ としたい・・・ という感じで、その都度,改行位置を決めたいイメージでしょうか・・・。 うまく説明できずに申し訳ありません。 カフェから返信させていただいているので、次にいつ読むか分りません。 そろそろ帰宅しますー。 ご親切にありがとうございました。(←やっぱりお礼かな???)
補足
ごめんなさい・・・。 知識不足で、おっしゃっていることが・・・理解できません・・・。 あいうえお かきくけこ なら見栄えが良いですが、 あいうえおか きくけこ となると見栄えが悪いので、改行位置を決めたい・・・というイメージ??? リンクしてくるデータが、「あいうえおかきくけこさしすせそ」かもしれないし、「あいうえおかきくけこ」かもしれない・・・そんなイメージでしょうか??? おっしゃっていること自体が、知識不足で答えられません・・・。 具体的にこれは?あれは?と書いていただけると、お答えできるかもしれないです。 お手数をおかけしますが、またご連絡ください。
- trytrytry
- ベストアンサー率37% (13/35)
任意の位置は文字数ですか?それとも特定の文字列? Lenを使っているなら文字数のような気がしますが、 セルのプロパティの折り返して表示ではだめなのでしょうか? でも、セル内に改行を入れると自動的になったような気が... そうすると、それも駄目なんでしょうね。 特定の文字で改行なら出来そうな気はしますが。 もう少し詳しい情報を下さい。
補足
特定の文字列ではありません。 今回は10文字目と20文字目・・・とか 次は5文字目と10文字目と15文字目・・・と言うように、 毎回,改行したい位置が違って、かつ改行する回数も決まっていません。 知恵をお貸しくださーい。
お礼
かなり感激しました。 本当に・・・「感激」としか言いようがないと言うか・・・。 何度もお返事をいただき、ありがとうございました。 これからもよろしくお願いします・・・。