No.3ベストアンサー
- 回答日時:
5バイト取得という事でガチガチに作っていますが、
必要なら引数を調整して汎用的にして下さい。
Sub TEST()
Dim pos As Integer
Dim s As String
s = "123あいう"
pos = Left5(s)
Debug.Print StrConv(MidB$(StrConv(s, vbFromUnicode), 1, pos), vbUnicode), StrConv(MidB$(StrConv(s, vbFromUnicode), pos + 1), vbUnicode)
s = "4え5おか"
pos = Left5(s)
Debug.Print StrConv(MidB$(StrConv(s, vbFromUnicode), 1, pos), vbUnicode), StrConv(MidB$(StrConv(s, vbFromUnicode), pos + 1), vbUnicode)
End Sub
Function Left5(ByVal vstr As String) As Integer
'切る位置が全角文字の真中かどうか判定する
If Len(StrConv(LeftB(StrConv(vstr, vbFromUnicode), 5), vbUnicode)) _
= Len(StrConv(LeftB(StrConv(vstr, vbFromUnicode), 4), vbUnicode)) Then
'1バイト前で切ったときに文字数が変わらないのは切った位置が全角文字の後半であるので
'切り位置が正しいと判断する
Left5 = 5
Else '泣き別れのパターン
Left5 = 4
End If
End Function
No.2
- 回答日時:
「(N+0)バイトの文字列の文字数」
「(N+1)バイトの文字列の文字数」
のそれぞれが
※等しい:文字の最中で切られた
※等しくない:文字の最中で切られていない
という判断ができます。
Sub Test()
Debug.Print Left_ポジション補正("123あいう", 5)
Debug.Print Left_ポジション補正("4え5おか", 5)
End Sub
Function Left_ポジション補正(ByVal p_strWk As String, ByVal p_Postion As Long) As String
Dim l_strWk1 As String
Dim l_strWk2 As String
Dim l_lngMax As Long
'最大文字数を取得
l_lngMax = LenByte(p_strWk)
If (l_lngMax < p_Postion) Then
'文字バイト数より多いなら、そのまま返却
Left_ポジション補正 = p_strWk
Else
'入力のバイト数の文字を取得
l_strWk1 = LefByte(p_strWk, p_Postion + 0)
'入力のバイト数+1の文字を取得
l_strWk2 = LefByte(p_strWk, p_Postion + 1)
If Len(l_strWk1) = Len(l_strWk2) Then
'[(N+0)バイト = (N+1)バイト]なら、文字最中でぶった切ったことになる
Left_ポジション補正 = LefByte(p_strWk, p_Postion - 1)
Else
Left_ポジション補正 = l_strWk1
End If
End If
End Function
Function LefByte(ByVal p_String As String, ByVal p_Length As Long) As String
LefByte = ConvUnicode(LeftB(ConvFromUnicode(p_String), p_Length))
End Function
Function LenByte(ByVal p_String As String) As Long
LenByte = LenB(ConvFromUnicode(p_String))
End Function
Function ConvFromUnicode(ByVal p_String As String) As String
ConvFromUnicode = StrConv(p_String, vbFromUnicode)
End Function
Function ConvUnicode(ByVal p_String As String) As String
ConvUnicode = StrConv(p_String, vbUnicode)
End Function
No.1
- 回答日時:
通常は、
? LeftH("123あいう", 4)
123
? LeftH("123あいう", 5)
123あ
と思いますが...
Public Function LenH(ByVal Text As String) As Integer
LenH = LenB(StrConv(Text, vbFromUnicode))
End Function
Public Function LeftH(ByVal Text As String, ByVal L As Integer) As String
Dim I As Integer
Dim J As Integer
Dim K As Integer
J = Len(Text)
For I = 1 To J
If LenH(Left$(Text, I)) > L Then
Exit For
End If
K = I
Next I
LeftH = Left$(Text, K)
End Function
もしかして、下のような結果を望んでいるのでしょうか?
? LeftH("123あいう", 1)
1
? LeftH("123あいう", 2)
12
? LeftH("123あいう", 3)
123
? LeftH("123あいう", 4)
123あ
? LeftH("123あいう", 5)
123あ
? LeftH("123あいう", 6)
123あい
? LeftH("123あいう", 7)
123あい
Public Function LeftH(ByVal Text As String, ByVal L As Integer) As String
Dim I As Integer
Dim J As Integer
Dim K As Integer
J = Len(Text)
For I = 1 To J
If Not (LenH(Left$(Text, I)) <= (L + 1) And Len(Left$(Text, I)) <= L) Then
Exit For
End If
K = I
Next I
LeftH = Left$(Text, K)
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
EUSARTで通信
-
VBSでテキストファイルの文字列...
-
[VBScript][wsh]byte単位でのデ...
-
COBOLのCOMP形式について
-
SQLで1バイト、2バイト混在...
-
C++ Builderで文字列をバイトに...
-
日本語で関数名等を記述するの...
-
バイト列とバイナリ列の違いが...
-
COBOL PICTUREで X,S,Vの意味
-
ビットスワップとバイトスワッ...
-
機種依存文字をチェックしたい。
-
ピクセル,dpiから容量(バイト...
-
memcmp バイナリデータの比較方法
-
UCS-2の一覧表が欲しい
-
cprintf()関数で2バイト文字を...
-
64bit対応
-
ワイド文字のバイト数が取得で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
VBAでShift-JISのURLエンコード
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
Javaで日本語1文字のバイト数
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
:(コロン)のKeyCode
-
【VB2005】テキストボックス内...
-
64bit対応
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
おすすめ情報