• ベストアンサー

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

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

  • Excelの文字列と文字列の連結

    A1のセルにはj50 C1のセルには01(ユーザ定義で00の書式) この二つの数値をCONCATENATE()関数を用いて文字列を 連結するとj501となってしまいます。 C1のセルを文字列の書式にするとうまくj5001と表示されますがそれ以外に方法はないでしょうか?

  • リンクしてきたデータの文字列を折り返すには…???

    リンクして引っ張ってきたデータを、 何文字目で改行するか,その都度決めることはできますか? リンクしてくるデータが、毎回同じ文字数目で改行したいわけではなくて、 今回は8文字目と16文字目で折り返したい… 今回は9文字目と20文字目で折り返したい…など。 ついでに!!! 折り返した文字列の頭に1文字空白を挿入したいのですが。 そんな贅沢でワガママなことはできますか? もしかして、申し上げている意味自体が不明でしょうか?

  • Excelにて任意の位置の文字列を抽出したい

    Excelにて任意の位置の文字列を抽出したい セルA1に、あたい1(837,1077,132) セルA2に、あたい2(657,100,32) セルA3に、あたい3(20,10000,888) のような値が入っています。 ここから、132、32、888を取り出したいのですが、どのような式を入れたら良いでしょうか? Right関数だと上記のように桁数が2桁と3桁と混在している場合に抽出できませんでした。

  • EXCELで文字列の特定の文字の位置を知る方法

    EXCELで文字列の特定の文字の位置を知る方法 EXCELでセル中の文字列、例えば、"abc 4/3 5/5 6/4" の最後の"/"の位置を知る方法を関数の組み合わせで出来ますか? 教えてください。"/"の数は任意で最後の"/"の位置を知りたいのですが??? どうかよろしくお願いします。VBAでなく関数の組み合わせでお願いします。

  • 文字列中の任意の位置の文字取得

    VB6の勉強をしております。 OSはWindowsXPです。 すごく簡単な質問なんですが、C言語のように、文字列中の任意の位置を指定する方法はVB6には無いのでしょうか? 例) C言語:str[1] 添え字で指定出来る VB6:???  思いつく方法はMidを利用し、任意の位置の文字を取得する方法なんですが、それしか無いのでしょうか? 以上、よろしくお願いいたします。

  • エクセルVBA 文字列複数行・列連続連結

    エクセルVBA 文字列複数行・列連続連結でお教え下さい A列に基本文字(縦順) B列~F列に複数行データー(文字・時間) 文字結合時に改行 例 A2&B2&改行&A3&C2&改行&A4&D2&改行・・・・・ 次のデーター行 A&B3&改行&A3&C3&改行&A4&D3&改行・・・・・ データーの最終行まで連続で このような複数行あるデーターの連続文字列連結をしたいのですが・・・ 文字列連結後は 1.指定セルに貼り付け 2.クリップボードに貼り付け 3.テキストファイルに保存 よろしくお願い致します

  • エクセルで0表示以外のセルの文字列を結合する方法

    エクセル(2003)で文字列の結合を「&」や「CONCATENATE関数」を使っておこなっていますが、文字列の空白または0表示の箇所のセルがあると「文字列000文字列00」のように「0」が表示されてしまいます。IF関数を併用してやっても「0」が表示されます。どのようにしたら「文字列 文字列」のように0表示なしで結合できるでしょうか。教えて下さい。現在、約180のセルにある文字列を1つに結合しようとしています。そのうちの結合文字列は多くて20ぐらいです。また、各セルの文字列はVLOOKUP関数により返しています。よろしくお願いします。

  • VLOOKUP で文字列の検索値の場合

    検索値が値でなく文字列で2種類ある場合、AND関数をいれたらと思うのですが、うまくいきません。 VLOOKUPでは無理なのでしょうか?

  • 文字列を取り出す

    A列に[ No.××× ] あああああ・・・と入力されています。 毎回入力される行数が違います(100~300行) B列にNo.×××という文字列だけ取り出すために下記の関数が入っているのですが A列に入力のあった分だけをマクロで処理できませんか。 =LEFT(RIGHT(A2,LEN(A2)-FIND("[ No",A2,1)),8) 現在は300行目までこの関数が入った状態で、エクセルが重い気がします。

  • Accessで文字列検索

    Accessであるテキストボックスに入ってるデータから任意の文字列の位置を知りたくて、 関数を使ってみました。 使った関数はFINDとSEARCHですがどちらもダメでした。 Accessで使える文字列検索関数はないのでしょうか?

専門家に質問してみよう