[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字数制限による自動改行させるマクロについて』(右近)
お尋ねします。
以下のマクロを参考に次のような動作を可能にできればと思っています。
前提としまして、
C列からV列を結合させて一行としています。
C23:C35、C38:C68、C71:C101に全角35文字(半角70文字)、全角の中に半角が混在したとしても半角2文字で全角1文字として、
入力するとします。
例えば、C23行目に文章を上記の文字数を超えて入力した場合、その上限を超えた文字は、次の行であるC24に入力されるようにしたいのです。
C35行目に同様に入力した場合は、C38行目に入るようにしたいのです。C68行目の場合もC71行目に入るようにしたいのです。
このように入るようにするには、どのように修正が必要でしょうか。
以下のマクロは、ネットから参照させていただいています。
よろしくお願いします。
Const RanVal As String = "A1" 'セルの個所を設定
Const MaxSt As Long = 44 '切り分ける文字数を設定
Dim Flag As Boolean
Dim StVal As String, ICon As Integer
Dim Start_M As Integer, Last_M As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
If Flag = True Then Exit Sub
If Range(RanVal).Address = Target.Address Then
Flag = True
StVal = Range(RanVal)
ICon = S_LCON(Len(StVal))
Start_M = 1
For i = 1 To ICon
Target.Offset(i - 1, 0).Value = Mid(StVal, Start_M, MaxSt)
Start_M = Start_M + MaxSt
Next i
Flag = False
End If
End Sub
Function S_LCON(A As Integer) As Integer
If (A Mod MaxSt) <> 0 Then
S_LCON = Application.WorksheetFunction.RoundUp(A / MaxSt, 0)
Else
S_LCON = A / MaxSt
End If
End Function
< 使用 Excel:Excel2013、使用 OS:Windows7 >
おはようございます ^^ エクセルで全角、半角を調べるのはかんたんそぉ〜で実は文字コード泥沼 にはまる手前だったりして、 ← わたしだけかも^^; 濁点の半角カタカナ、とか ^^;)セルとVBAの文字コードが違ったりとか 出来なくは無いのでしょうが、かなり専門的なスキルが無ければ難しいか もですね。文字数で良ければ比較的簡単だとは思うのですが。目的は文字の 整形でしょうか?全て全角で等幅フォント使用ならOKかもですね。← なかなか 環境(上司様等)が許してくれなかったりしますね。 賛否両論ですが。。。←どこかで聞いたような^^、エクセル方眼紙方式だと セル内に収まれば綺麗に揃いますよ。 (隠居じーさん) 2019/06/27(木) 09:00
Wに=LEFTB(C23,70)
Xに=MIDB(C23,71-LENB(LEFT(C23,LEN(W23)))+LENB(W23),LENB(C23))
を入力して
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 列 As Variant
Dim 補正 As Variant
Dim 判定 As Variant
Dim 文字 As Variant
Dim 残 As Variant
列 = ActiveCell.Row - 1
判定 = LenB(StrConv(Cells(列, 3), vbFromUnicode))
文字 = Cells(列, 23).Value
残 = Replace(Cells(列, 24).Value, " ", "")
If 判定 >= 71 Then
If 列 = 35 Or 列 = 68 Then
補正 = 3
Else
補正 = 1
End If
Cells(列 + 補正, 3) = 残
Cells(列, 3) = 文字
End If
End Sub
上記で望んだ結果になるかと思います。
(名無し) 2019/06/27(木) 10:54
簡単なのは作業列を2つ作る事でしょうね
Wに=LEFTB(C23,70)
Xに=MIDB(C23,71-LENB(LEFT(C23,LEN(W23)))+LENB(W23),LENB(C23))
を入力して
とは、具体的にどういうことでしょうか?今一度、詳しくお教えください。
よろしくお願いします。
(右近) 2019/06/27(木) 15:37
W23=LEFTB(C23,70)
X23=MIDB(C23,71-LENB(LEFT(C23,LEN(W23)))+LENB(W23),LENB(C23))
上記式を入れると
W列では70バイトまでの文字列が、
X列では71バイト以降の文字が表示されているはずですので、
あとはデータ範囲の分コピペしてやれば上記のマクロが動くはずです。
作業列の場所を変えたい場合はマクロ内の参照箇所を自分で弄ってください。
(名無し) 2019/06/27(木) 16:18
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 列 As Variant
Dim 補正 As Variant
Dim 判定 As Variant
Dim 文字 As Variant
Dim 残 As Variant
列 = ActiveCell.Row - 1
判定 = LenB(StrConv(Cells(列, 3), vbFromUnicode))
文字 = Cells(列, 25).Value
残 = Replace(Cells(列, 26).Value, " ", "")
If 判定 >= 71 Then
If 列 = 35 Or 列 = 68 Then
補正 = 3
Else
補正 = 1
End If
Cells(列 + 補正, 3) = 残
Cells(列, 3) = 文字
End If
End Sub
(右近) 2019/06/27(木) 23:28
ちなみに名前を以下のように修正しました。同じシートに別のマクロがあるためです。
↑により自ら台無しにした為です。
VBA Changeイベント というキーワードでネット検索することをオススメします。
(もこな2) 2019/06/28(金) 08:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.