C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: EXCEL シート内の特定の文字列の置換と検索


(過去ログ 128 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■75877 / inTopicNo.1)  EXCEL シート内の特定の文字列の置換と検索
  
□投稿者/ sagara (1回)-(2015/05/13(Wed) 17:57:35)

分類:[VB.NET/VB2005 以降] 

VB.NETからエクセル操作について質問です。

BookにはSheetのCountが2だったり3だったりします。
その各Sheetに対して、特定の文字列を置換したいのですが
Sheetに対してどの様に(全文検索?Rangeの指定でも良いのですが)掛ければ
該当の文字列を検索できますか?

現状のコードは下記ですが、シート内にFの文字列があるセルのアドレスを
取得できません・・・。

お手数ですが、教えて下さい。


For index = 0 To excelpath.Count
If File.Exists(excelpath(index)) Then

xlBooks = DirectCast((xlapp.Workbooks.Open(excelpath(index), Type.Missing, Type.Missing, Type.Missing, Type.Missing,                           Type.Missing, _
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,                          Type.Missing)), Excel.Workbook)

xlsheets = xlBooks.Worksheets
           
For forIndex = 1 To xlsheets.Count
xlsheet = DirectCast(xlsheets(forIndex), Excel.Worksheet)

→ _range = xlsheet.Cells.Find(What:="F", LookIn:=Excel.XlFindLookIn.xlValues, LookAt:=Excel.XlLookAt.xlWhole,                         MatchCase:=True, MatchByte:=True)

If Not _range Is Nothing Then
firstAddress = _range.Address
Do

Loop While Not _range Is Nothing And _range.Address <> firstAddress
End If
Next

End If
Next


引用返信 編集キー/
■75878 / inTopicNo.2)  Re[1]: EXCEL シート内の特定の文字列の置換と検索
□投稿者/ shu (741回)-(2015/05/14(Thu) 09:13:58)
No75877 (sagara さん) に返信

FindではなくReplaceを使うだけでよい気がしますがどうでしょう?

ReleaseComObjectの記述がありませんがオブジェクト毎にしっかりと
行うようにしましょう。
引用返信 編集キー/
■75880 / inTopicNo.3)  Re[2]: EXCEL シート内の特定の文字列の置換と検索
□投稿者/ Amateur (3回)-(2015/05/14(Thu) 11:30:02)
2015/05/14(Thu) 12:23:18 編集(投稿者)

Do Loopの中身がないので実際何をしたいのかが明確でないのですが
とりあえずLoopを継続する条件が矛盾しています。(これは有名なExcelVBAへプルのミス)

Do Loopの中での処理は考えないとして
「Nothing判定 And アドレス文字比較」
これだと Nothingの時にAddress文字が取れずエラーになります。
(VB.NetにはAndAlsoなんてのもありますが下記の通り二つの条件は不要なので必要ないでしょう。)

もしもDoLoop内で対象セルの値書き換えやクリアがない場合は
DoLoopの前の段階でNothing判定は済んでますのでアドレス比較のみでOKです。

もしもDoLoop内で対象セルの値を検索条件に一致しないものに変更する場合は
アドレス判定はなしにしてNothing判定だけにします。

追記
DoLoop内でFindNextを行っているとの推測して書いています。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -