お世話になります。
Word, Excel, PowerPointのデータ(ファイル)にある2バイト文字を検索し、順番にハイライト表示(選択状態)にしていく処理をVBAで作りたいと考えています。
当方はC言語やPHPのプログラミングの経験はあるのですが、VBやVBAは初めてでして中々思うように作成が出来ません。
現在はとりあえず試験的に以下のようなプロシージャを作成し、メッセージボックスで表示するところまでは作成出来ています。
Sub check_2byte_stirngs(text As Object)
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
MsgBox one_char
End If
Next
End If
End Sub
これに以下のような機能を追加したいと思っています。
・「次へ」を表示するダイアログを付ける(その場で編集可能にしたいのでMsgBoxは使わない)
・見つかった文字の場所までカーソルを移動させて選択状態にする
どちらか一方でもお分りの方がいらっしゃいましたら、ご教示願いますでしょうか。
以上、宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
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は使わない)
ができたかと思うのですがこういうことですか?
早速のご説明ありがとうございます。
詳細のコードまで書いて頂きまして大変恐縮です。
教えて頂きましたコードでそのまま一つ目の問題は解決しました。
今更ですが、VBAの本も買ってきたので、なんとか二つ目の問題も解決できると良いのですが…。
No.3
- 回答日時:
とりあえずテキストボックス上で。
次のサンプルは
次へボタンを押す度にダイアログ上のテキストボックスの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
No.2
- 回答日時:
>・見つかった文字の場所までカーソルを移動させて選択状態にする
これって、TextBox上での話でしょうか?
それとも例えばEXCELのセルの上での話しょうか?
TextBox上の話ならできると思いますけど・・?
セルかな~って思ってさらっと見たけどやる方法が見つからなくて・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
_TCHAR*での引数の読み込み
-
干支のプログラム
-
C言語、このコードを実行したい...
-
c言語でユーザ関数を利用して入...
-
int main()の・・・
-
3桁区切(コンマ)記号をつけ...
-
javaでunsignedは使えないので...
-
iconv_open失敗
-
std::stringstream で得るもの...
-
C言語 ミリ秒を日付に変換には
-
C言語のポインターで詰まっている
-
コンパイルエラー invalid ope...
-
'const char *' 型は 'char *' ...
-
【C++ TR1】tr1::tuple<T1, T2,...
-
ある商品のロス率を5%見込み、...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
O(n log n)について2
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringをwchar_tに変換したい
-
fgetsなどのときのstdinのバッ...
-
charからLPTSTRへの変換方法
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
配列をnビットシフトする
-
間接操作のレベルとは
-
charでの計算?
-
テキストデータをそのままバイ...
-
型変換
-
'const char *' 型は 'char *' ...
-
double型の値をchar配列に変換...
-
間接参照のレベルが異なっています
-
干支のプログラム
-
atoi( ) の反対をやりたい
-
C言語です
-
絶対パスからのファイル名の切...
-
ネットワークにつながっている...
-
【C言語】文字型と整数型の違い
-
Win32APIでのエディットボック...
おすすめ情報