
No.5ベストアンサー
- 回答日時:
#4です。
若干手直しさせていただきました。下記は20文字に設定した時の実行例です。半角全角混在の時は、やはり見苦しいですね。下記の通りマクロを登録した後、ワークシートの画面に戻って(再度ALT+F11)、Sheet1の任意のセルに、20文字以上の文を入力してみてください。
A列
1 数値入力の時におかしくなるので若干修正し
2 ました。下記は20文字区切りに設定した時
3 の実行例です。例えば、A1セルにズラズラ
4 と入力すると、20文字毎に区切って下のセ
5 ルに書込み、最終セルを編集状態にします。
6 マクロの登録の仕方を念のために説明すると
7 、ALT+F11を押すと、VBEdito
8 r画面に切り替わります。画面左下に、プロ
9 ジェクト VBA projectというフ
10 レーム?が表示されていてその中に、She
11 et1(Sheet1)とあるので、そこに
12 マウスカーソルを当てて右クリックし、コー
13 ドの表示を実行すると、広いフレームにカー
14 ソルが移動しますので、下記のコードを貼り
15 付けてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim targetString As String
Dim divResult As Long
Dim remain As Long
Dim i As Long
Const limitLength As Long = 20
If TypeName(Target.Value) <> "String" Then Exit Sub
Application.EnableEvents = False
targetString = Target.Value
If Len(targetString) > limitLength Then
divResult = Len(targetString) \ limitLength
remain = Len(targetString) Mod limitLength
For i = 1 To divResult
If i = 1 Then
Target.Value = Left(targetString, limitLength)
Else
Target.Offset(i - 1, 0).Value = Mid(targetString, limitLength * (i - 1) + 1, limitLength)
End If
Next i
If remain > 0 Then
Target.Offset(divResult, 0).Value = Mid(targetString, limitLength * divResult + 1, limitLength)
Target.Offset(divResult, 0).Activate
Else
Target.Offset(divResult, 0).Activate
End If
SendKeys "{F2}"
End If
Application.EnableEvents = True
End Sub
#4 mitarashi様
本日無事実行できました!うれしい!
ありがとうございます。
また丁寧な作業方法までレクチャしていただきまして
お礼の言葉もありません。
多くの方々のご指導により
作業時間が大幅に縮小できそうです。
また新しいメニューコマンドも知ることができました。
この場をお借りして質問の回答を下さいました方々に
心よりお礼申し上げます。
No.4
- 回答日時:
Excelに多くを望みすぎる発想が面白かったので、試しに作ってみました。
10文字単位に分割して、余りの文字のセルに移動し、編集状態にします。
全角も半角も一文字扱いですので、実用的ではないと思います。
また、新規入力の場合に限ります。既存の文字まで考慮しようとすると、エディターを開発(大げさ)することになってしまいそうです。
Excel2000のコードですので、上位バージョンでの動作は?です。
シートモジュールに記述してください。
エラーが発生したらとにかく抜けるいい加減な作りです(^^;)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim targetString As String
Dim divResult As Long
Dim remain As Long
Dim i As Long
Const limitLength As Long = 10
Application.EnableEvents = False
On Error GoTo ErrorHandle:
targetString = Target.Value
If Len(targetString) > limitLength Then
divResult = Len(targetString) \ limitLength
remain = Len(targetString) Mod limitLength
For i = 1 To divResult
If i = 1 Then
Target.Value = Left(targetString, limitLength)
Else
Target.Offset(i - 1, 0).Value = Mid(targetString, limitLength * (i - 1) + 1, limitLength)
End If
Next i
If remain > 0 Then
Target.Offset(divResult, 0).Value = Mid(targetString, limitLength * divResult + 1, limitLength)
Target.Offset(divResult, 0).Activate
Else
Target.Offset(divResult, 0).Activate
End If
SendKeys "{F2}"
End If
ErrorHandle:
Application.EnableEvents = True
End Sub
まったくもって素人の思いつきでお恥ずかしい限りです(^^;)
入力しながら改セルができると、文字数を意識しながら作業できそうなので便利そうです。
しかし、関数といえば「合計」しか使ったことがないものですから、
結果はもうしばらくお待ち下さい。必ず結果を報告させていただきます。
とりいそぎ、回答のお礼まで。
ありがとうございます。
No.3
- 回答日時:
#1です。
作業列が必要ですが、関数でのやり方もあります。
A1に該当の文字列があるとして、例えば10文字単位で区切りたい場合。
=MID($A$1,10*(ROW(A1)-1)+1,10)
これを下にフィルすると10文字単位で区切れるはずです。
#1の回答のお礼につけてくださった、「1ラインずつ…」という意味がちょっと分からなかったのですが、区切り位置は列に対して有効です。
※A1:A5を選択で区切り位置の指定は可能という意味です。
10文字単位で区切る場合は、区切り位置を10,20の場所に入れればOKです。
フォローありがとうございます。
ご推察の通りの問題で躓いておりましたが、
区切り位置は複数指定できたんですね。
まったくもって頭が固かったです。
また、関数ですが、関数を使ったことがないので現在トライしております。取り急ぎお礼まで。
No.2
- 回答日時:
データー入力規則ー文字列(身次数指定)
でより小さいー文字数
でセルの文字数のオーバーを監視できます。
これ以上は、質問のニーズは特殊すぎて適応した操作設定はありません。
エクセルは文章作成ソフトではないのでやむをえないでしょう。
入力文字数を入力の瞬間に捉えるのもVBA(APIを使わぬ範囲)などでは難しいと思う。
早速の回答、ありがとうございます。
質問しておいてなんですが、やはりおっしゃるとおり、文章作成ソフトの仕事ですね。
しかし、エクセルをスケジュールと既存の見積書にしか使わない者にとって、「データ」というメニューコマンドは大変勉強になりました。
本当にありがとうございます。
No.1
- 回答日時:
入力文字に対して、自動的に下セルへ…というのは残念ながら不可能だと思います。
マクロを組めば何とかなるかもしれませんが。
少し手間はかかりますが、何回か作業工程が分かれてもいいなら
データ→区切り位置で、
「スペースによって…」を選択して、固定長でセルを分割した後、
該当のセルを選択→編集→切り取り→形式を選択して貼り付け→
「行列を入れ替える」にチェックを入れて貼り付け
とかはどうでしょう?
早速の回答本当にありがとうございます。
そうですね、文字送りが必要ならば、ワードを使うべきですよね。
しかし、固定長でセルを分割 というコマンドは非常に興味深いもので、今後に応用がききそうですね。
残念ながらこの方法だと1ラインごとにやらないといけないようですが(エクセル2002だからでしょうか?)、応用できるかどうか検討させていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
if関数の複数条件について
-
excel
-
同じ名前(重複)かつ 日本 ア...
-
【マクロ】数式を入力したい。...
-
【画像あり】オートフィルター...
-
【マクロ】実行時エラー '424':...
-
Office2021のエクセルで米国株...
-
エクセルのVBAで集計をしたい
-
エクセルシートの見出しの文字...
-
VLOOKUP FALSEのこと
-
エクセルでフィルターした値を...
-
【マクロ】【画像あり】4つの...
-
エクセル GROUPBY関数について...
-
エクセルに写真が貼れない(フ...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【画像あり】【関数】指定した...
-
【関数】3つのセルの中で最新...
-
エクセルの文字数列関数と競馬...
-
表計算ソフトでの様式の呼称
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報