• ベストアンサー

エクセルで文字数を指定したい?

エクセル2003を使っています。 A列に商品名 B列に価格 C列に商品説明文 があったとします。 C列の商品説明文は短い物もあれば長い物もあります。 そこで質問ですが、c列を50文字以内に表示したいと思っています。 この場合、どのようにしたらいいのでしょうか?

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

  • ベストアンサー
noname#52504
noname#52504
回答No.6

ご質問やお礼を拝見した限りでは、 ・入力自体を規制したい ・メッセージを出したい ・C列を直接変更したい というご要望ではないように思われました。 素朴に =LEFT(C1,50)&IF(LEN(C1)>50,"…","") でいかが? “左から50文字取る。元の文が50文字より多ければ"…"をつける”

その他の回答 (5)

noname#140971
noname#140971
回答No.5

Public Function LeftH(ByVal Text As String, ByVal N As Integer) As String   Dim I As Integer   Dim L As Integer     L = Len(Text)   Do     Text = Left(Text, Len(Text) - 1)     If LenH(Text) <= N Then       Exit Do     End If   Loop Until Len(Text) = 0   LeftH = Text & "" End Function 試されるならば、こちらで!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>100文字をこえたら ・・・ が表示されるようにしたいです。 C列には表示はVBAを使わないと難しいです。 となりの空き列なら =IF(len(C1)>100,"100文字に簡略化してください,"") ーー >=LEFT(C1,100) これで解決しそうです。 これではブチ切りになりますよ。 -- 普通は、エクセルの入力規則でやると思いますが。 入力規則で 非常に、煩わしいですね になりますかね。 ーー VBAではキーインの都度、文字を捉えることが難しい。 テキストボックスはこれが捉えられる。 それ以外はAPIなど使って、技巧的になる。 ENTERナリを押して、確定した後に(100桁を越えた後に) 注意コメントなどを出すことになる。 関数でも同じ。 ですから、#3の方法ではあまり解決にならない。 この点初めからどうするのか、質問に書いておくべきだった。 (1)越えたら即座に指摘 (2)エンタ押した後でよい (A)全部やり直し (B)100文字は残す の組み合わせが考えられる。

noname#140971
noname#140971
回答No.3

入力規則を試してみましたが、非常に、煩わしいですね。 そこで、VBA で制御する方法を考えてみました。 まず、[イミディエイトウインドウ]での関数テストを参照されて下さい。 [イミディエイトウインドウ] ? LenH("1111全角") 6 ? LeftH("1111全角", 6) 1111全 ? LeftH("1111全角", 5) 1111 LenH(text)____________text のバイト数を求める関数。 LeftH(Text, n)_______Text の左から nバイトだけ切り取る関数。 <Sheet1 モジュール> Option Explicit Const conCHECK_COL_INDEX = 3 Const conCHECK_ROW_INDEX = 1 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Cells.Column = conCHECK_COL_INDEX And Target.Cells.Row > conCHECK_ROW_INDEX Then     If LenH(Target.Value) > 50 Then       MsgBox "50バイトに切り詰めます!"       Target.Value = LeftH(Target.Value, 50)     End If   End If End Sub 僅か6行のVBAコードを書けば、随分と操作性がアップします。 <標準モジュール> Public Function LenH(ByVal Text As String) As Integer   LenH = LenB(StrConv(Text, vbFromUnicode)) End Function Public Function LeftH(ByVal Text As String, ByVal N As Integer) As String   Dim I As Integer   Dim L As Integer      L = Len(Text)   For I = L To N Step -1     Text = Left(Text, Len(Text) - 1)     If LenH(Text) <= N Then       Exit For     End If   Next I   LeftH = Text End Function ※一度もエクセルは操作したことがない門外漢ですのでコードの最適性の自信はゼロです。

siraku
質問者

お礼

ご回答ありがとうございます。 こんなにたくさん書いていただいてすいません。 早速、試してみたいと思います。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

データ、入力規則、設定、で 文字列(長さ指定)で、50文字 で、どうでしょうか

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

http://xl-kobeya.seesaa.net/article/10227437.html が参考になりますよね。 但し、全角・半角文字で、文字数・バイト数で意味合いが 異なりますので、注意が必要です。

siraku
質問者

お礼

ご回答ありがとうございます。 今、いろいろと調べていて =LEFT(C1,100) これで解決しそうです。 それとすいません。 これだと説明文が100文字でぷっつり切れてしまうので100文字をこえたら ・・・ が表示されるようにしたいです。 例 この商品は○○○で~~なんとかで・・・ こんな感じにしたいのですが、できるでしょうか?

関連するQ&A