
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で質問しましょう!
似たような質問が見つかりました
- 面接・履歴書・職務経歴書 介護のバイト面接で履歴書を出さないといけないんですけど、免許資格欄に書いて良いのかわかりません。 漢 2 2022/04/07 20:51
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- ビジネスマナー・ビジネス文書 バイト先で、お客さんに領収書にサインを書いて欲しいと言われました。 『〇〇〇〇(株)』でお願いします 4 2023/08/25 22:38
- ビジネスマナー・ビジネス文書 手紙の書き方について バイトの先輩が辞めてしまうため、一言メッセージをつけてお菓子を渡そうと思ってい 1 2022/09/21 18:04
- アルバイト・パート 研修中のバイトをやめたいです。 友達にもっと良い待遇のバイトを紹介してもらったので、今研修中のバイト 1 2022/11/16 18:46
- アルバイト・パート 単発のバイトを理由にメインのバイトの休みを取ることについて。 現在バイトを一つしているのですが、興味 1 2023/04/07 21:22
- UNIX・Linux Postfixでドコモメールに送信すると届くまで10分ぐらいかかる 6 2023/03/05 13:56
- 発達障害・ダウン症・自閉症 行きつけイオン内に、ある、美容室の、店長が、夕方6時から、8時まで、清掃と、レジ締めしてくれませんか 0 2022/08/24 13:23
- 確定申告 確定申告と税金について。 お目通しありがとうございます。 確定申告と税金について質問のです。 今月か 5 2022/04/03 19:45
- アルバイト・パート 数万円単位のお金が最短時間で欲しいです。 短期バイトなどは時給?とかでコツコツ仕事して決まった日にち 4 2023/08/26 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
文字のバイトサイズの取得
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
バイナリとBCDコード
-
通貨型はバイト型に変換可能?
-
正規表現が得意なかた教えてく...
-
この関数はどのプログラミング...
-
C++ Builderで文字列をバイトに...
-
バイト境界とは
-
100MB
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
2バイト文字の判定はString#get...
-
COBOL PICTUREで X,S,Vの意味
-
機種依存文字をチェックしたい。
-
Shift_JISからUTF-8への変換に...
-
ReadProcessMemoryの読み込みバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
バイト列とバイナリ列の違いが...
-
VBAでShift-JISのURLエンコード
-
機種依存文字をチェックしたい。
-
ピクセル,dpiから容量(バイト...
-
GetWindowTextでアドレスバーか...
-
この関数はどのプログラミング...
-
ソケット通信の受信サイズ
-
:(コロン)のKeyCode
-
COBOL PICTUREで X,S,Vの意味
-
memcmp バイナリデータの比較方法
-
より高速な画像の表示法
-
半角、全角の判別方法
-
64bit対応
-
最大長を用意せずにバイナリデ...
-
バイナリとBCDコード
おすすめ情報