こんばんは、
vbで悩んでいます。
配列の検索で、みつかったら、行と位置を出力する
でた結果の次の行から 再検索する
ということをしたいのですが。
一回目の検索はできるのですが、ボタンをおしたら つづいて
検索できるようにしたいのです。
できたら、アドバイス等おねがいいたいします。
Dim i,r,j As Integer
Dim a1() As String
Dim a2 As String
a2 = Text.Text
For j = LBound(a1) To UBound(a1)
r = r + 1
i = a1(j).IndexOf(a2, 0)
Do Until i <> 0
text1.Text = Val(i + 1)
i = a1(j).IndexOf(a2, i + 1)
text2.Text = r
text3.Text = a1(j)
If i <> 0 Then
Exit For
End If
Loop
Next
a1に以下の内容があった時
a1(0) = "例1"
a1(1) = "例2"
a1(2) = "例3"
”例”と検索をかけると、
text1.Textには 1と出力。(位置表す)
text2.Textには 1と出力。(行表す)
text3.Textには 例1と出力。
exit for でループをぬけているのですが。
これを、検索ボタンを押すたびに、行と位置
が表示されるようにしたいのですが、
アドバイスおねがいします。
No.3ベストアンサー
- 回答日時:
最後に該当した行を覚えておく必要がありますよね。
例)
------------------------------------
Private startIndex As Integer
(省略)
For j = startIndex To UBound(a1)
(省略)
If i <> 0 Then
startIndex=j+1 '最終行+1を確保
Exit For
End If
(省略)
-----------------------------------
startIndexの初期化のタイミングや最終行に達した場合等の処理は
考えてみてください:)
No.4
- 回答日時:
お使いのコードがあれば公開しても支障の無い範囲で投稿しましょう
Array.FindIndexと前回発見した位置を記憶しておいてということでしょうか
Formレベルの変数に
dim sTag as String ' 検索する文字列
Dim nStart as Integer ' 検索開始位置
Private Function myFindFunc( byVal ss as String) as Boolean
return ( ss.IndexOf( sTag ) > -1 )
End if
を記述して、ボタンのクリックイベントに
dim r,i as integer
sTag = Text.Text
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
r = Array.FindIndex( a1, nStart, AddressOf myFindFunc )
if r > -1 then
TextBox1.Text = a1(r).IndexOf( sTag ) + 1
TextBox2.Text = r + 1
TextBox3.Text = a1(r)
end if
nStart = r + 1
といった感じでしょう ・・・
No.2
- 回答日時:
検索対象をスキップするように組めばいいでしょう
a2 = Text.Text
Intger.TryParse( TextBox2.Text, r )
i = 1
j = r
for each ss as string in a1
if j > 0 then
j -= 1
Continue For
end if
i = ss.IndexOf( a2 )
r += 1
if i > -1 then
TextBox1.Text = i+1
TextBox2.Text = r
TextBox3.Text = ss
end if
next
VB.NET2003以前なら
for each ss as string in a1
if j > 0 then
j -= 1
else
i = ss.IndexOf( a2 )
r += 1
if i > -1 then
TextBox1.Text = i+1
TextBox2.Text = r
TextBox3.Text = ss
end if
end if
next
といった具合でしょう
String.IndexOfで見つからなかった場合の値は -1ですよ
この回答への補足
回答ありがとうございます。
説明下手ですみません。
a1に以下の内容があった時
a1(0) = "四面楚歌"
a1(1) = "一石一石"
a1(2) = "石橋を渡る"
a1(3) = "石橋を渡る"
a1(4) = "四面楚歌"
楚歌で検索ボタン(クリック)をしますと
1(行)3(位置)が表示されて。
もう一回検索ボタン(クリック)をしますと
5(行)3(位置)がでるようなことなのです。
ボタンをおすたびに、あったときは表示されるようにしたいのです。
アドバイスいただいた方法だと、最後までいきます。
説明下手ですみません。
よかったら おしえてください。
No.1
- 回答日時:
???
フォーム上にボタンを置いてボタン.Clickイベント中に上記の処理を入れればいいのでは?
以下独り言
またエスパー質問だろうか・・・
この回答への補足
こんばんは、
上記の処理でやりますと。
”例”と検索をかけると、
text1.Textには 1と出力。(位置表す)
text2.Textには 1と出力。(行表す)
text3.Textには 例1と出力。
このように表示されまして
また クリック(検索ボタン)をおしても
text1.Textには 1と出力。(位置表す)
text2.Textには 2と出力。(行表す)
text3.Textには 例2と出力。
と表示されないのです。
すみません 説明不足で
よかったら アドバイスおねがいします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAバーコード照合 バーコード...
-
vbs 文字位置を中央に
-
C++で、b[bit]の非負整数(例え...
-
あああ..ああい..ああう とい...
-
指数関数近似を行うプログラム...
-
マクロの「SaveAs」でエラーが...
-
Worksheets メソッドは失敗しま...
-
VBAマクロ実行時エラーの修正に...
-
Excelで、あるセルの値に応じて...
-
エクセル マクロ オートフィ...
-
Excel UserForm の表示位置
-
エクセルで離れた列を選択して...
-
エクセルVBA 配列からセルに「...
-
エクセルで複数のシートのクリ...
-
VBA シートをコピーする際に Co...
-
Excelで数字を入れたら対応する...
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
Excelのシート上のShapeにイベ...
-
マクロ実行後に別シートの残像...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAにて『元に戻すボタン』を作...
-
select caseの入れ子
-
VBAバーコード照合 バーコード...
-
xlookup関数の引数を利用して検...
-
vbs 文字位置を中央に
-
エクセルで選択したセルがディ...
-
スペース区切りのAND検索
-
ASPでバイナリ(ビッグエンディ...
-
半透明ブラシ重ね塗りのアルゴ...
-
エクセルで特定の文字列が入っ...
-
VBAマクロ実行時エラーの修正に...
-
マクロの「SaveAs」でエラーが...
-
VBA シートをコピーする際に Co...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで離れた列を選択して...
-
Worksheets メソッドは失敗しま...
-
VLOOKUPの列番号の最大は?
-
Excelで、あるセルの値に応じて...
おすすめ情報