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で質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEntourageの文字列の改行について

Mac用のEntourage2004についてですが、下記の様なハイパーリンクをMac側から送信するとWindows側のメール(Outlook Express)では改行されてしまい見ることができないのですが、良い方法をご存知の方はいらっしゃいませんでしょうか。

http://www.carview.co.jp/ucm/default.asp?mode=1&kw=&mk=2&md=0®ion=0&trs=&yr=0&miles=0&prlo=0&prhi=500000&new=0&st=2&yrlo=0&yrhi=0

Aベストアンサー

こんにちは。

OE のメニューの、ツール-オプションの送信のテキスト形式の設定で、

 送信時に自動的に文字列を折り返す

にチェックが入っているわけですね。もし、改行コードが入っていたら、一言、断りを入れ、「万が一、改行コードが入っている場合は、メモ帳などで、つなげてお使いください」と入れれば済むと思いますし、事実、プロバイダからの連絡メールでも、そういう断りを見ます。

私自身も、ここの掲示板でも、そういう方法を取らせていただくこともあります。多少の不便は、お互いのやり取りの中では、勘弁していただくというのも1つかもしれません。

Qエクセル関数 VLOOKUP 範囲内に対象データが複数ある場合

こんばんは。いつもお世話になっております。
今日はエクセル2000での VLOOKUP について質問させて頂きたい事がございます。まずはデータですが

A列→氏名
B列→生年月日
C列→配属部署

で、範囲 A2:C6 として入力されております。そして

A3/A4/A5 には 斉藤

という名前が入っており、配属部署は

C3→秘書 C4→経理 C5→財務

となっています。この状況で A9に 斉藤 と入力されていた場合、=VLOOKUP(A9,A2:C6,3,0) で結果を見ると C3の 秘書 が返ってきます。
次に =VLOOKUP(A9,A2:C6,3) で結果を見ると C5の 財務 が返って来ます。
そこで、C4の 経理 を表示させたい場合はどのようにすれば宜しいのでしょうか。
※仕事が多忙で今は自宅から投稿しておりますが、業務でこれが必要ですので明日、会社からアクセスしてこちらのPAGEを拝見することになりますが、投稿するいは環境が厳しいので、補足やお礼がすぐに出来ない場合もあるかと存じます。が、どうぞ宜しくお願い致します。

こんばんは。いつもお世話になっております。
今日はエクセル2000での VLOOKUP について質問させて頂きたい事がございます。まずはデータですが

A列→氏名
B列→生年月日
C列→配属部署

で、範囲 A2:C6 として入力されております。そして

A3/A4/A5 には 斉藤

という名前が入っており、配属部署は

C3→秘書 C4→経理 C5→財務

となっています。この状況で A9に 斉藤 と入力されていた場合、=VLOOKUP(A9,A2:C6,3,0) で結果を見ると C3の 秘書 が返ってきます。
次に =VLOOKUP(A9,A2:C6,...続きを読む

Aベストアンサー

補足に気づくのが遅くなりました。失礼しました。

今ひとつやりたい事が飲み込めません。
例えばSheet2のA列に部番コードのありったけ(800種類)を書き出し、
それに対応した機種、開発名称を全部表示させるのでしたら、
VLOOKUPで引っ張ってこずとも、
A列をキーにして並べ替えればすべて揃います。
ただし任意の順番通りに並べ替えるには
ツール→オプション→ユーザー設定リストで登録する必要があります。
Sheet1に重複するデータがなければ、Sheet2の結果は当然10000行になるでしょう。

また、
部番ごとにオートフィルタで手作業で絞り込む方法もあります。
Excel2000であれば、絞り込んだ結果を、可視セルのみコピーしなおす作業が必要です。
絞り込んだ結果を別シートに手作業で貼り付けることになります。
(ただしA列ドロップダウンリストに
 入力データが表示されるのは1000件までなので
 部番の1001種類目からは表示されない事があります。
 部番が800種類であればOKですね)

また、余談になりますが、それぞれの列には文字列と数値が入り乱れて入力されています。
VLOOKUPで探されるのならSheet1のA:B列と、Sheet2のA列を文字列に統一されておくと宜しいかと思います。
VLOOKUPでは、文字列をもって数値を探したり、数値でもって文字列を探したりすると、
戻り値がエラーになりますから。

こちらも忙しくしていて申し訳ありません。

補足に気づくのが遅くなりました。失礼しました。

今ひとつやりたい事が飲み込めません。
例えばSheet2のA列に部番コードのありったけ(800種類)を書き出し、
それに対応した機種、開発名称を全部表示させるのでしたら、
VLOOKUPで引っ張ってこずとも、
A列をキーにして並べ替えればすべて揃います。
ただし任意の順番通りに並べ替えるには
ツール→オプション→ユーザー設定リストで登録する必要があります。
Sheet1に重複するデータがなければ、Sheet2の結果は当然10000行になるでしょう。

また、
...続きを読む

Qif 文などで「""」を返した場合の空白文字列をブランクにしたい

if 文などで「""」を返した場合の空白文字列をブランクにしたい


if 文などで「""」を返した場合は、空の文字列を返しているのであって、ブランクが返ってきているわけではありません。

コピーして貼り付け(値のみ)をしても、空の文字列は空の文字列、ブランクはブランクです。

コピーして貼り付け後(値のみ)の空の文字列をブランクにするには、delete が一番簡単です。

上記の様に記載されているのを見つけました。ここでご質問が御座います




任意の範囲(今回はB1:D50)で空の文字列をブランクに変えるVBAに困っております。

どなたか、教えていただけないでしょうか?

よろしくお願い致します。

使用環境:Windows7x64 Office 2007

Aベストアンサー

下記を試してみてください。

With Range("B1:D50")
.Value = .Value
End With

Qエクセルで隔行をリンクさせる場合のドラッグ&ドロップについて

  | A | B | C |   D   |  E  |
────────────────────────
1 | あ |   |   | あ(=A1) |      |
────────────────────────
2 |    |   |   | い(=A3) |      |
────────────────────────
3 | い |   |   |   ★   |      |
────────────────────────
4 |    |   |   |   ★   |      |
────────────────────────
5 | う  |   |   |   ★   |      |
────────────────────────
6 |    |   |   |        |      |
────────────────────────
7 | え  |   |   |        |      |
────────────────────────
8 |     |   |   |        |      |
────────────────────────
9 | お  |   |   |        |      |


上記のように,A列の1行目から隔行に「あ」「い」「う」「え」「お」と入力していて,D列にそれを詰めて表示させたい場合の質問です。
上記は9行しか記入していませんが,実際に作らなければならない物は千行程度あります。
そのため,D列の1行目に=A1,2行目に=A3と打ち込んで,その二つのセルを★印へとドラッグ&ドロップしたのですが,結果,計算式は上から=A1,=A3,=A3,=A5,=A5。表示はあ,い,い,う,う,となります。
データを上手く作成して活用することがエクセルの基本であることは承知しておりますが,既に出来上がった頂いたものからデータを求めるような逆のことをする羽目になっています。
方法がありましたら回答よろしくお願いします。

  | A | B | C |   D   |  E  |
────────────────────────
1 | あ |   |   | あ(=A1) |      |
────────────────────────
2 |    |   |   | い(=A3) |      |
────────────────────────
3 | い |   |   |   ★   |      |
────────────────────────
4 |    |   |   |   ★   |      |
────────────────────────
5 | う  |   |   |   ★   | ...続きを読む

Aベストアンサー

D1セルに '=a1
D2セルに '=a3
下へオートフィル
D列を選択して データ - 区切り位置 [完了]

数式なら
D1セルに =INDEX(A:A,ROW(A1)*2-1)
下へオートフィル

Qハイパーリンクのリンク先を一括変換したい

OSはXP, Officeは2000を使用しています
ハイパーリンクでリンクされているアクセス先のファイルを別フォルダに移動させ、新たにリンクをさせたいのです。
変更前 c:\111 -> 変更先 c:\222

マクロなどで一括変換することはできますでしょうか?
よろしくお願いいたします。

Aベストアンサー

いまさらかもしれませんが以下のような方法を使えば可能かと考えられます。
ご参考ください。

<ハイパーリンク先変更方法>
前提条件
1. シート内に設定された数式にエラー表示がないこと
2. 表示文字列(AAA)とまったく同じ文字が入ったセルが他にないこと
3. 作業前にファイルのコピーをとってください(最悪の事態を避けるためです)

<作業手順>

1. リンクの設定されたセルをコピーして同じシート内の別のところに貼り付けます
2. 上記1.でコピーしたセルのリンク先を正しいリンク先に変更し、表示文字列を別の文字列(例:BBB)に変更します。
3. 【編集】→【置換】をクリックします。
4. 「検索する文字列」に「AAA」、「置換後の文字列」に「=1/0」と入力し、【完全に同一のセルだけを検索する】にチェックを入れて【すべて置換】をクリックします。(この時点で表示文字列「AAA」のものは「#DIV/0!」と表示されると思います)
5. 手順1.でコピーしたセルの表示文字列を「AAA」の戻します。
6. 上記セルをコピーします。
7. 【編集】→【ジャンプ】をクリックします。
8. 【セル選択】をクリックし、【数式】を選択し、【エラー値】以外のチェックをはずして【OK】をクリックします。(この時点でエラー表示になっていたすべてのセルが選択された状態になると思います)
9. 【Ctrl】+【V】を押して貼り付けます。
10. 手順1.でコピーしたセルを削除します。

<作業はここまでです>

Excel2002以降ですと置換を行なうときに候補の一覧が表示されるので、その時点ですべてを指定できるのですが。。。

簡単なサンプルでは正常にできました。
ご不明な点がありましたらご質問いただければと思います。
がんばってくださいね。

いまさらかもしれませんが以下のような方法を使えば可能かと考えられます。
ご参考ください。

<ハイパーリンク先変更方法>
前提条件
1. シート内に設定された数式にエラー表示がないこと
2. 表示文字列(AAA)とまったく同じ文字が入ったセルが他にないこと
3. 作業前にファイルのコピーをとってください(最悪の事態を避けるためです)

<作業手順>

1. リンクの設定されたセルをコピーして同じシート内の別のところに貼り付けます
2. 上記1.でコピーしたセルのリンク先を正しいリンク先に変更...続きを読む


人気Q&Aランキング

おすすめ情報