
Excel 「CONCATENATE」文字数に制限あり??
「B列からF列」までに入力された数字・文字・数式を、同じシート内の「H列」にて1行に表示させるため数式を入れていますが、文字数が255文字を(スペース含む)超えると【#VALUE!】(値のエラー)が出ます。
このエラーを回避し、正しく表示させる方法はありますでしょうか?
========================================================
*B列、D列、F列
数字、文字など、直接入力されています(空のセルあり)
*C列、E列(参照先のセルが空白の場合あり)
=IF(ISERROR(INDIRECT("'シート名'!D2")),"",INDIRECT("'シート名'!D2"))
*H列
=CONCATENATE(TEXT(B2,";;;@"),TEXT(C2,";;;@"),TEXT(D2,";;;@"),TEXT(E2,";;;@"),TEXT(F2,";;;@"))
========================================================
分かりにくい説明ですみません。
よろしくお願いいたします。
環境 Win XP /Excel 2003
No.6ベストアンサー
- 回答日時:
>調子に乗って追加で質問なのですが、この方法だと文字数制限はどれくらいなんでしょうか?
エクセルのヘルプで「仕様」と入力してワークシートとブックの仕様を調べてみてください。
セルの内容の長さ (文字列)は 32,767 文字。
ただし、セルに表示できるのは 1,024 文字まで。
数式バーでは 32,767 文字すべての表示が可能。
参考までに。
>また、エラーが表示されたH列のセルをダブルクリック後に確定するときちんと表示されます。
このパターンは、おそらく計算方法が「手動」になっているときの状態です。
「ツール」「オプション」の計算方法タブで「手動」になっていたら「自動」にチェックを入れてください。
何度もご回答頂きまして、本当にありがとうございます。
>エクセルのヘルプで「仕様」と入力してワークシートとブックの仕様を調べる
初めて見ました。なるほど!ありがとうございました。
いつも質問する前に今回こそは自力で!と決意の元に挑むのですが、無知すぎて何をどうすればいいのかも分からず…皆様にすがってばかりです(>_<;) 道のりは険しすぎますが、諦めずに頑張ります。
>また、エラーが表示されたH列のセルをダブルクリック後に確定すると表示可能
>このパターンは、おそらく計算方法が「手動」になっているときの状態です。
私も、もしや??と思い確認したのですが、ちゃんと「自動」なんですよね。かなり不思議です。
No.7
- 回答日時:
回答番号:No.4 の返事です。
昨日来、こちらのPCのトラブルより復旧するまで時間が掛かり、書きこもうとした時には、すでに締められてしまいましたが、回答を付けさせていただきます。
なお、私以外の人が作られたマクロや私の考えたものとはまったく違うマクロについては、必ずしもサポートするものではありませんから、予めご了承ください。
直接の回答とは言えませんが、
>B列からF列全てに何も入力(表示)されていない場合は「#VALUE!」エラーが表示されていません。
これに関しては、ユーザー定義関数では、そのような条件の元では関数は作らないようにしています。私の作るものには、リクエストをいただかないと、そのような関数はつくりません。
>エラーが表示されたH列のセルをダブルクリック後に確定するときちんと表示されます。
そのような仕様というものは、いわゆる「揮発性関数」といいますが、VBAで作るユーザー定義関数では、引数を再定義しない限りは、再計算しません。ダブルクリックしないでもセル内容を変更することで、それに反映させることは可能ですが、今回は、すでに解決したものとして、見送りさせていただきます。
なお、私は、VBAを中心として回答している者で、既存の組み込み関数で解決しているものに関しては、特に注意を払うことはいたしておりません。組み込み関数で解決しない場合には、また相談に乗らせていただきます。また、本格的に関数を作るには、コンパイラーやレジストリ登録が必要になりますので、ここの場で提供するようにはできていません。
No.5
- 回答日時:
>>IF(ISTEXT(A2),A2,"")
>試してみましたがダメでした。
>セルを繋ぐとエラーが…なぜでしょうか(>_<)/
B2からF2セルに文字列が表示(または入力)されているなら、以下の式でエラーがでないと思うのですが本当にH列だけエラーが出ているのでしょうか?
=IF(ISTEXT(B2),B2,"")&IF(ISTEXT(C2),C2,"")&IF(ISTEXT(D2),D2,"")&IF(ISTEXT(E2),E2,"")
&IF(ISTEXT(F2),F2,"")
念のため、数式バーで上記の数式の一部(例えばIF(ISTEXT(B2),B2,"")の部分)をドラッグして選択してF9キーを押して、どの部分でエラーとなるか調べてみてください(計算結果の解除はEscキー)。
引き続きご回答本当にありがとうございます。
出来ました!
すみません。完全に私が原因でした。
途中「IF」が1つ抜けてました。(かなりアホですね。すみません。)
マクロを動かしても、セルに1,000字ほど文字を入れても問題ありませんでした。本当にありがとうございます。調子に乗って追加で質問なのですが、この方法だと文字数制限はどれくらいなんでしょうか?そんなに長文は入力しないのですが、今後の参考にご存知でしたらお教え下さい。
No.4
- 回答日時:
>「CONCATENATE」を使用するのは「H列」に「0」(ゼロ)を表示させないためです。
>(&(アンパサンド)では表示されてしまうので)
0を表示させないのは、CONCATENATE関数ではなくて、TEXT関数ですね。CONCATENATEには、0を省くような機能はないはずです。数値を抜く関数は、同じくLotus123共有関数のT()ぐらいしかありませんが、256文字の壁を超えることはありません。
例 = T(H2) ....H2 が数字なら、空白になります。
しかし、「&」でも、CONCATANATEでも、H列に0が入っていなくて、Emptyなら、どちらも「0」は表示しません。しかし、ここではそうではないようです。
こんな方法があります。256語の壁を超えるのは、テキスト系関数を使うしかありません。
=LEFT(B2,LEN(B2)*(1-COUNT(B2)))&LEFT(C2,LEN(C2)*(1-COUNT(C2)))&LEFT(D2,LEN(D2)*(1-COUNT(D2)))&LEFT(E2,LEN(E2)*(1-COUNT(E2)))&LEFT(F2,LEN(F2)*(1-COUNT(F2)))&LEFT(G2,LEN(G2)*(1-COUNT(G2)))&LEFT(H2,LEN(H2)*(1-COUNT(H2)))
私自身なら、関数を作ってしまいますが、それは、万民向けとは言えません。
'//標準モジュールへ
Function cat(rng As Range) As String
Dim buf As String * 32767 '32,767文字まで
Dim c As Variant
Dim i As Long
i = 1
For Each c In rng
If Not IsNumeric(c.Value) And VarType(c) = vbString Then
Mid(buf, i, Len(c.Text)) = c.Text
i = i + Len(c.Text)
End If
Next
cat = Left(buf, InStr(buf, vbNullChar) - 1)
End Function
入力例:
=cat(B2:H2)
ただし、32,767文字が必ずしも表示出きるわけではありません。シートの表示は、セルひとつに対して、1,024文字までのはずです。つまり、セルが5個なら、5,120文字までです。
この回答への補足
追加補足
よくみて見ると、B列からF列全てに何も入力(表示)されていない場合は「#VALUE!」エラーが表示されていません。また、エラーが表示されたH列のセルをダブルクリック後に確定するときちんと表示されます。(以下のセルは上からコピーして表示させるようにしました。)
これは毎回しなければならないのでしょうか?
まったく素人の私よりビギナーさんが使用するので出来たら回避したいのですが…(>_<;)
オタスケ下さい。
再びありがとうございます。
>0を表示させないのは、CONCATENATE関数ではなくて、TEXT関数ですね。
>CONCATENATEには、0を省くような機能はないはずです。
&(アンパサンド)を使用すると表示された「0」が、CONCATENATE関数使用で回避されたので、CONCATENATE関数のおかげかと思ってました。違うのですね (>_<;)/ 失礼しました。
>'//標準モジュールへ(以下省略)
>入力例:=cat(B2:F2)
教えていただいた上記を実行し、全ての行において表示できるようになりました。
(使用セルは最大でも2列、100行以内、1セル10~500文字以内なので問題ないと思います)
ですが、下記の質問で教えていただいたマクロを実行すると、全て「#VALUE!」エラーになります。二つのマクロは共存できないのでしょうか?
過去の質問⇒Excel 入力して置換するマクロ
<http://questionbox.jp.msn.com/qa6278534.html>
No.3
- 回答日時:
素朴な疑問ですが、なぜ、CONCATENATE を使うのでしょうか?
CONCATENATE って、Lotus123との互換性を持たせるための関数で、Excelでは、&(アンパサンド)でよかったはずです。
TEXT(B2,";;;@")、それに、テキスト化する意味って、数値を排除する目的ですか?
お話の様子なら必要性がないと思います。「&」でつなげば、そのままテキスト化してしまいます。ブランクセルがあっても、関係ないはずです。
=B2&C2&D2&E2&F2
例えば、書式を変更するというならわかりますが、必要ありますか?
この回答への補足
ご回答ありがとうございます。
>素朴な疑問ですが、なぜ、CONCATENATE を使うのでしょうか?
「CONCATENATE」を使用するのは「H列」に「0」(ゼロ)を表示させないためです。
(&(アンパサンド)では表示されてしまうので)
「Lotus123」との互換性の話ははじめて聞きました。ありがとうございます。
No.2
- 回答日時:
>上記の点から文字数??と思い、エラーが出ていないセル(仮にA)の文章をコピーし、そのAセルの文章のお尻にコピーし文字数を増やすと同じエラーがでました
CONCATENATE関数の制限ではなく、TEXT関数の制限です。
すなわち、TEXT関数では最大256文字までの文字列しか返すことができません。
したがって、1つのセルで256文字を超えるセルを参照する場合には、TEXT関数ではなく、以下のようなIF関数で文字列のみ連結するようにしてください(もちろん「&」で結合してもOKです)。
IF(ISTEXT(A2),A2,"")
この回答への補足
報告
>IF(ISTEXT(A2),A2,"")
試してみましたがダメでした。
セルを繋ぐとエラーが…なぜでしょうか(>_<)/
ご回答ありがとうございます。
やはり制限があったのですね!また、ひとつ勉強になりました。
>IF(ISTEXT(A2),A2,"")
明日朝一番に試してみます。
「文字列かどうかをチェック」にしか使用したことがなかったので盲点でした。
本当にありがとうございます。
No.1
- 回答日時:
H列に入力されている数式は、256文字の文字数に関係なく連結することをができますので、#VALUE!エラーが出るのは別の原因です。
すなわち「=CONCATENATE(TEXT(B2,";;;@"),TEXT(C2,";;;@"),TEXT(D2,";;;@"),TEXT(E2,";;;@"),TEXT(F2,";;;@"))」のいずれかのテキスト関数がVALUEエラーとなっていることを示しています。
今回のケースでエラーが表示されるとしたら、数式を含むC列とE列のINDIRECT関数でエラーを返す可能性がありますが、エラーが出ている行には正常な文字列または数値が表示されているのでしょうか?
この回答への補足
早々のご回答ありがとうございます。
私も何か入っているの??と思い確認してみましたが、エラーが出る行の、C列とE列が参照しているセルのにはテキストのみでした。
*拡大しましたが文字のみでした(ちなみにドイツ語です。)
*エラーが出ているのは2行で、どちらもテキスト数が多い
*Excel以外のソフトにコピーしテキストをチェックしても文字のみでした。
*テキストエディタに該当するテキストをコピー後、セルを空にして
再度エディタより貼り付けましたが結果は同じでした
上記の点から文字数??と思い、エラーが出ていないセル(仮にA)の文章をコピーし、そのAセルの文章のお尻にコピーし文字数を増やすと同じエラーがでました。
とても混乱しています。(>_<;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) 【関数】選択した文字列にしたがって、文字を選んで表示する 2 2023/07/13 22:44
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) AVERAGE関数とINDIRECT関数を使ってのオートフィル 3 2023/01/12 12:00
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) エクセルの数式について ブック内の別シートの値の含まれたセルの個数を集計したい 全シート一覧のシート 1 2022/07/21 19:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数式が入ったセルを含めて、数...
-
Excelの入力規則で2列表示したい
-
Excelでの検索結果を含む行だけ...
-
複数の文字列のいずれかが含ま...
-
エクセルである文字の並びの入...
-
エクセルで、毎日の走行距離(...
-
エクセルで数値の1の位が[1]...
-
エクセルで質問です。
-
エクセル表のカウントの仕方に...
-
エクセル セル幅
-
VLOOKUP関数とIF関数の組み合わせ
-
エクセルについて
-
エクセル関数、コード入力で、...
-
Excelや、ややこしい関数につい...
-
エクセルのセルのカウント方法...
-
エクセルで教えて頂きたい事が...
-
SUMに含まれる範囲から特定のセ...
-
[関数について]わかる方教えて...
-
入力済みなら自動でインデント
-
エクセル2003か、エクセル2007...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
Excelでの検索結果を含む行だけ...
-
エクセルで曜日に応じた文字を...
-
「エクセル」特定の行(セル)...
-
エクセル:横長の表を改行して...
-
エクセルでセルの値分の個数の...
-
エクセルで表示されている数字...
-
スペースとスペースの間の文字...
-
列の数字に100をかけたい
-
エクセルで、毎日の走行距離(...
-
エクセルのsumifでかけ算してか...
-
時間を「昼間」と「夜間」に分...
-
エクセルのVLOOKUP関数について
-
Excelのセル内文字の並び替えに...
-
エクセルにデータを入力すると...
-
別のセルに値が入力されたら、...
おすすめ情報