No.6ベストアンサー
- 回答日時:
>JoinやMidを使っても遅いままでした。
私が、推奨したのは、以下の関数を使用する方法のつもりでした。
こちらで、簡単なサンプルで確認しても100倍以上速くなっています。
具体的なコードを提示していただければ、何か良い対策が見つかるかもしれません。
文字の結合の箇所(&による演算)で遅くなっているなら、かなり早くなるはずです。テキストボックスが多数あって、文字列の結合以前の話で、
テキストボックスから文字を取り出すところで遅くなっているなら、私が推奨した方法は役に立たないかもしれません。
-------------------------------------------
Option Explicit
Private sBuf As String
Private iBuf As Long
Private Sub Class_Initialize()
sBuf = String$(32768, vbNullChar)
iBuf = 0
End Sub
Public Sub Append(ByRef sValue As String)
If iBuf + Len(sValue) > Len(sBuf) Then
sBuf = sBuf & String$(CLng(Len(sBuf) * 2) + Len(sValue), vbNullChar)
End If
Mid(sBuf, iBuf + 1) = sValue
iBuf = iBuf + Len(sValue)
End Sub
Public Function ToString() As String
ToString = Left$(sBuf, iBuf)
End Function
No.5
- 回答日時:
こんにちは
VBAとのことですが、実際にどのような環境でどのような処理をなさっているのか不明ですけれど・・・
TextBoxへのアクセスにも時間がかかると思われます。
とは言え、ボックスが個々に存在する場合は、まとめて読み込む方法はなさそうですので、この部分は仕方がないのかも知れませんが・・
>大量の文字を連結する時~
「大量」がどの程度の量なのか不明ですが、仮に全部を連結してゆくと文字数がやたら長くなりそうなので、ひとまず5000程度までとしてみました。
サンプルとして、簡単にエクセルのシート上にテキストボックスを置いて、以下の条件でテストしてみました。
・繰り返し数5000
・テキストボックスの文字数は5文字。
(実際には、2つのボックスを交互に利用)
◇ループで変数に読み込むだけの場合
約47msec
◇ループ内で毎回「&」演算子で追加連結する場合
約50~64msec(かなりのバラツキあり)
◇配列に読んで、まとめて連結する場合(Join)
約47msec
文字列操作には文字列の長さや空きメモリの量も関係しますしバラツキもあるので、一概には言えませんが、個別に連結処理を行ったとしても、読み込み処理の方に遥かに時間がかかっているように見受けられます。
一方で、No3様がご提示の方法(Join)であれば、連結にはさほど時間はかからないと思われます。
とは言え、5000件のボックスを連結してもご質問にあるほどの時間にはならないので、「遅い」という印象ではないようにも思えます。
実際には、何のApplicationで、どのくらいの量のものをどのような処理をして、どのように時間がかかっているのかがまったくわかりませんので、これ以上は何とも言えませんけれど、ご参考にでもなればと・・・
No.4
- 回答日時:
No.1&2です。
>.textプロパティで大量の文字を連結する時とても処理が遅いので
これってTextBoxコントロールが大量にありなのかな?
それともマルチライン設定で順次追加(改行?)してくって事?
もし後者ならListBoxとかの方が良いのかもと感じますけど、詳細が不明なので。
No.3
- 回答日時:
こちらのサイトが参考になるかと思います。
https://excel-ubara.com/excelvba4/EXCEL271.html
「遅い文字列結合を最速処理する方法について」
いくつかの方法が提示されていますが、
「・StringBuilderのような機能を作成する」
が参考になるかと。
No.2
- 回答日時:
No.1です。
似たような物なら以前ですと
[VBA]ArrayListの使い方を知れば動的配列も解決!
https://y-moride.com/vba/arraylist-how-to-use.html
が使えましたが最近のOSですと個体差によるのか
『.Net Framework 3.5 を有効にする手順』が上手くいかない人もいるようです。
なら素直にVisualBasic(.Net Framework)とかに移行ってのも一案ではありますが。。。
そうすればListクラスが使えますのでより便利ではあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Excel(エクセル) Excelで文字列をtextboxにcopy 2 2022/07/16 22:00
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】開いているブックの...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【VBA】 結合セルに複数画像と...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
改行文字「vbCrLf」とは
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
VBAの質問(Msgboxについて)です
-
VBAでセルの書式を変えずに文字...
-
エクセルのVBAコードと数式につ...
-
ExcelVBAでパワポを操作したい
-
Excelのマクロについて教えてく...
-
Vba FileSystemObject オブジェ...
-
エクセルのマクロについて教え...
-
質問58753 このコードでうまく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
.textプロパティで大量の文字を連結する時とても処理が遅いので、String builderみたいな機能欲しいなと思ってます
JoinやMidを使っても遅いままでした。
sbはstringbuilderクラスのhttp://dev-clips.com/clip/vba/stringbuilder-for- … を使ってます。TextはTextboxです。btn10は”00”ボタンです。
自分が何を遅いと感じていたのか、分かりました。ボタンをクリックするとテキストボックスに数字が入力されるのですが、ボタンを連打した時の反応が遅かったのです。具体的には、”00”ボタンを5回連打したのに、”00”が3回しか入力されなかった感じです。おそらくボタンに問題がある気がします。