advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 138 for 住所  分割 (0.001 sec.)
住所 (2124), 分割 (1547)
[[20211124221126]]
#score: 9589
@digest: 70fd89768a0072579ae4d5e521281f9d
@id: 89704
@mdate: 2021-11-25T08:06:11Z
@size: 6276
@type: text/plain
#keywords: 所漢 (110911), intlenb (85919), strbin (81189), convleftbstr (65413), 1234567890123456789a (36904), strret (32621), 1234567890123456789a7777777777777777777b7 (29993), 40byte (29523), vardata (22907), 7777777777777777777b (22862), 1234567890123456789a7777777777777777777b712345 (22494), address2 (19043), leftb (18134), vbunicode (17746), 字, (16842), address1 (16024), 字th (14319), 字= (13069), 漢字 (10947), vbfromunicode (9257), strconv (7105), work (6606), 内) (6593), 住所 (6178), 字as (5476), 角混 (5296), 様サ (4966), lenb (4866), イマ (4101), hatena (2887), マ) (2560), (イ (2382)
『半角と全角混在の文字列分割について。』(イマ)
"1234567890123456789a7777777777777777777b7" 上記のような半角と全角の文字列があり 40byteごとに区切りたい場合に 文字列の値が40byteで割り切れない場合 "1234567890123456789a"まで 文字化けをしないように左から文字列を取り出しているのですが 40byte以降を取り出す方法でアドバイスいただけないでしょうか。 よろしくお願いいたします。 "1234567890123456789a7777777777777777777b7" ↓ 下記のように分割 "1234567890123456789a"(40byte以内) "7777777777777777777b"(40byte以内) Sub TEST() 住所漢字 = "1234567890123456789a7777777777777777777b7" Debug.Print ConvLeftBStr(住所漢字, 40) End Sub Function ConvLeftBStr(varData As Variant, intLenB As Integer) As String Dim strBin As String Dim strRet As String strBin = StrConv((varData), vbFromUnicode) If LenB(strBin) <= intLenB Then strRet = (varData) Else If LenB(StrConv(LeftB(strBin, intLenB), vbUnicode)) = _ LenB(StrConv(LeftB(strBin, intLenB + 1), vbUnicode)) Then strRet = StrConv(LeftB(strBin, intLenB - 1), vbUnicode) Else strRet = StrConv(LeftB(strBin, intLenB), vbUnicode) End If End If ConvLeftBStr = strRet End Function < 使用 Excel:Excel2019、使用 OS:Windows10 > ---- こんな感じではどうでしょう。 Sub test() Const n As Long = 40 Dim s As String Dim ss As String ReDim ary(0 To 0) As String s = "1234567890123456789a7777777777777777777b7" Columns("A").NumberFormat = "@" Do ss = LeftB(s, n) ary(UBound(ary)) = ss s = Replace(s, ss, "", Count:=1) If s = "" Then Exit Do ReDim Preserve ary(UBound(ary) + 1) If LenB(StrConv(s, vbFromUnicode)) <= n Then ary(UBound(ary)) = s Exit Do End If Loop [A1].Resize(UBound(ary) + 1, 1) = Application.Transpose(ary) End Sub # 修正しました。 # 質問者さんのコードで完成していたのですね。どうも失礼。 (γ) 2021/11/25(木) 01:16 ---- 提示のConvLeftBStrを使うなら、 Sub TEST() Dim 住所漢字 As String, res As String 住所漢字 = "1234567890123456789a7777777777777777777b7aaa" Do res = ConvLeftBStr(住所漢字, 40) Debug.Print res If res = 住所漢字 Then Exit Do 住所漢字 = Mid(住所漢字, Len(res) + 1) Loop End Sub (hatena) 2021/11/25(木) 04:58 ---- γ様 hatena様 サンプルコードご提示ありがとうございます。 参考にさせていただきます。 (イマ) 2021/11/25(木) 10:59 ---- 現在下記のコードで 住所漢字 = "1234567890123456789a7777777777777777777b712345"だった場合 1234567890123456789a, 7777777777777777777b712345となるのですが 下記の結果のように 1234567890123456789a, 7777777777777777777b, 712345 40byteごとに配列を区切りたいのですがアドバイスいただけると助かります。 補足ですが120byte以上ある場合は 配列は4つになっていくのを想定しております。 今回下記でご提示させていただいたコードで 流用する場合の アドバイスを頂けたら大変助かります。 Sub test() Dim address1 As String, address2 As String, address3 As String Dim work As String Dim ii As Integer 住所漢字 = "1234567890123456789a7777777777777777777b712345" For ii = 1 To Len(住所漢字) work = Left(住所漢字, ii) work = StrConv(work, vbFromUnicode) If (LenB(work) > 40) Then Exit For End If Next ii address1 = Left(住所漢字, ii - 1) '住所1 address2 = Mid(住所漢字, ii) '住所2 Debug.Print address1 & "," & address2 End Sub (イマ) 2021/11/25(木) 11:16 ---- 40バイトごとにカンマを挿入したいということなら、下記で。 Sub test() Dim address As String Dim 住所漢字 As String Dim work As String 住所漢字 = "1234567890123456789a7777777777777777777b712345" Do work = ConvLeftBStr(住所漢字, 40) address = address & "," & work If work = 住所漢字 Then Exit Do 住所漢字 = Mid(住所漢字, Len(work) + 1) Loop address = Mid(address, 2) Debug.Print address End Sub ConvLeftBStrは質問にある関数そのままで。 配列にしたいなら、最後に Split(address,",") で配列に変換できます。 (hatena) 2021/11/25(木) 14:32 ---- hatena様 ありがとうございます。 このままではDebug.Printが表示されませんが こちらは半角全角混合で 40バイトで割り切れない場合、文字化けしないサンプルでしょうか。 それともあくまで 40バイトごとにカンマを挿入するイメージでしょうか。 お手数をおかけします。 (イマ) 2021/11/25(木) 14:51 ---- γ様。 サンプル助かります。 こちらのコードはセル操作ですが debug.printで表示できるように するとコード的にどのようになりますか。 お手数をおかけします。 (イマ) 2021/11/25(木) 14:54 ---- こちらでは、イミディエイトウィンドウに、 1234567890123456789a,7777777777777777777b,712345 とカンマ区切りで表示されてますけど。 質問にある下記のコードは削除していないですよね。 Function ConvLeftBStr(varData As Variant, intLenB As Integer) As String Dim strBin As String Dim strRet As String strBin = StrConv((varData), vbFromUnicode) If LenB(strBin) <= intLenB Then strRet = (varData) Else If LenB(StrConv(LeftB(strBin, intLenB), vbUnicode)) = _ LenB(StrConv(LeftB(strBin, intLenB + 1), vbUnicode)) Then strRet = StrConv(LeftB(strBin, intLenB - 1), vbUnicode) Else strRet = StrConv(LeftB(strBin, intLenB), vbUnicode) End If End If ConvLeftBStr = strRet End Function (hatena) 2021/11/25(木) 15:00 ---- hatena様 失礼しました。 Debug.Print確認できました。 実際のテストデータから いろいろなパターンのテストデータで検証したところ 今のところ問題なく 正常な実行結果が得られており助かりました。 ありがとうございました。 (イマ) 2021/11/25(木) 17:06 ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/202111/20211124221126.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97055 documents and 608280 words.

訪問者:カウンタValid HTML 4.01 Transitional