- ベストアンサー
Word, Excel, PowerPointで2バイト文字検索
- Word, Excel, PowerPointのデータ(ファイル)にある2バイト文字を検索し、順番にハイライト表示(選択状態)にしていく処理をVBAで作成したい。
- C言語やPHPのプログラミングの経験はあるが、VBやVBAは初めてで作成がうまくいかない。
- 現在は試験的に2バイト文字を検索し、メッセージボックスで表示するプロシージャを作成しているが、次のステップとして「次へ」というダイアログを表示し、見つかった文字の場所までカーソルを移動させて選択状態にする機能を追加したい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
UserForm1を追加。 TextBox1とCommandButton1を貼り付ける。 CommandButton1のCapntionを「次へ」に変更。 そして、UserForm1のコードに以下を書きます。 '------------------------------- 'ユーザーフォーム (UserForm1) '------------------------------- '次へボタン(CommandButton1の処理) Private Sub CommandButton1_Click() Unload Me End Sub 'ユーザフォームの外部からTextBoxに文字を表示するメソッド Public Sub DspText(Text As String) TextBox1.Text = Text End Sub 次に標準モジュールを追加して、コードに以下を書きます。 '------------------------------- '標準モジュール '------------------------------- Sub check_2byte_stirngs(Text As String) Dim moji_len As Integer Dim byte_len As Integer Dim i As Integer Dim one_char As String moji_len = Len(Text) byte_len = LenB(StrConv(Text, vbFromUnicode)) If (moji_len <> byte_len) Then '2バイト文字発見 For i = 1 To Len(Text) one_char = Mid(Text, i, 1) If LenB(StrConv(one_char, vbFromUnicode)) <> Len(one_char) Then DspText one_char End If Next End If End Sub 'MsgBoxの代わりに編集可能なダイアログを表示する Private Sub DspText(Text As String) Load UserForm1 With UserForm1 .DspText Text .Show vbModal End With End Sub そして、必要なところで check_2byte_stirngsを使えばお望みの1つ目 >「次へ」を表示するダイアログを付ける(その場で編集可能にしたいのでMsgBoxは使わない) ができたかと思うのですがこういうことですか?
その他の回答 (2)
- pen_pen_pen
- ベストアンサー率65% (52/79)
とりあえずテキストボックス上で。 次のサンプルは 次へボタンを押す度にダイアログ上のテキストボックスの2バイト文字を順番に選択していきます。 UserFormを追加して、TextBox1とCommandButton1を追加。 CommandButton1のCapntionは「次へ」。 UserFormのコードに次のソースを貼り付けてください。 '------------------------------- 'ユーザーフォーム '------------------------------- '次へボタン(CommandButton1の処理) Private Sub CommandButton1_Click() Static SP As Integer Dim pos As Integer '検索開始位置を初期化 If SP = 0 Then SP = 1 '2Byte文字の位置を取得 pos = InStr2Byte(SP, TextBox1.Text) If pos = 0 Then SP = 0 Else '2Byte文字が見つかったので選択状態に。 With TextBox1 .SelStart = pos - 1 .SelLength = 1 .SetFocus End With SP = pos + 1 End If End Sub '------------------------------- '文字が2Byte文字かどうかを判定 '------------------------------- Private Function Is2Byte(char As String) As Boolean Is2Byte = (Len(char) <> LenB(StrConv(char, vbFromUnicode))) End Function '------------------------------- '2Byte文字の位置を返す '------------------------------- Private Function InStr2Byte(Start As Integer, StringA As String) As Integer Dim i As Integer '初期化 InStr2Byte = 0 '2Byte文字位置を検索 For i = Start To Len(StringA) If Is2Byte(Mid(StringA, i, 1)) Then InStr2Byte = i Exit Function End If Next End Function
お礼
さらに詳しいご回答を頂き有難うございます。 大変勉強になりました。 これで、なんとかなりそうです。 有難うございました。
- pen_pen_pen
- ベストアンサー率65% (52/79)
>・見つかった文字の場所までカーソルを移動させて選択状態にする これって、TextBox上での話でしょうか? それとも例えばEXCELのセルの上での話しょうか? TextBox上の話ならできると思いますけど・・? セルかな~って思ってさらっと見たけどやる方法が見つからなくて・・。
お礼
早速のご説明ありがとうございます。 詳細のコードまで書いて頂きまして大変恐縮です。 教えて頂きましたコードでそのまま一つ目の問題は解決しました。 今更ですが、VBAの本も買ってきたので、なんとか二つ目の問題も解決できると良いのですが…。