VBで”文字を取り除く方法

このQ&Aのポイント
  • VB6で”(全角)があった場合、それを取り除く処理を行ないたいのですが、うまくいかずエラーの赤色表示になってしまいます。
  • 半角の場合は、InStr(wk_kensa, """) でうまくいきました。
  • dim wk_kensa as string, wk_kensa1 as string wk_kensa = "例えば "を取り除く" If InStr(wk_kensa, """) > 0 Then wk_kensa1 = Mid(wk_kensa, 1, InStr(wk_kensa, """) - 1) wk_kensa = wk_kensa1 & Mid(wk_kensa, InStr(wk_kensa, """) + 1, 50) end if
回答を見る
  • ベストアンサー

VBで「”」文字を取り除く方法

VB6で「”」(全角)があった場合、それを取り除く処理を行ないたいのですが、 うまくいかずエラーの赤色表示になってしまいます。 どのように記述すればうまくいくのでしょうか?教えて下さい。 ちなみに半角の場合は、InStr(wk_kensa, """") でうまくいきました。 以下が、そのエラーとなってしまう部分の記述です。 dim wk_kensa as string, wk_kensa1 as string wk_kensa = "例えば ”を取り除く" If InStr(wk_kensa, "”") > 0 Then wk_kensa1 = Mid(wk_kensa, 1, InStr(wk_kensa, "”") - 1) wk_kensa = wk_kensa1 & Mid(wk_kensa, InStr(wk_kensa, "”") + 1, 50) end if よろしくお願いします。

  • iwaz
  • お礼率50% (1/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.1

”を"と解釈してしまうようですね。 Dim wk_kensa As String, wk_kensa1 As String wk_kensa = "例えば " & Chr(&H8168) & "を取り除く" If InStr(wk_kensa, Chr(&H8168)) > 0 Then wk_kensa1 = Mid(wk_kensa, 1, InStr(wk_kensa, Chr(&H8168)) - 1) wk_kensa = wk_kensa1 & Mid(wk_kensa, InStr(wk_kensa, Chr(&H8168)) + 1, 50) End If とすれば、ご希望の動作をすると思います。

iwaz
質問者

お礼

「”を"と解釈してしまうようですね。」>>そのとおりです。 上のようにやってみてうまくいきました。 早速のご回答どうもありがとうございました。

関連するQ&A

  • vb 日付の判断

    こんにちは。vb2005で日付の判断をしたいのですが、 スマートな方法がわかりません。 Dim y() as string ~ dim y(0) には 20081231 が入る ~ Dim wk As String = y(i).Insert(4, "/") wk = wk.Insert(7, "/") If IsDate(wk) Then ひづけ有効な場合 処理 とりあえずこれで、日付として成立するかを判断しているのですが、 もうすこしスマートな方法はないでしょうか?

  • ファイルを読み込んだらVBがフリーズする

    ↓のコードだと、ファイルを読み込んだ時点でVBがフリーズします(平気なファイルも一部ある)。原因と解決法を教えてください。 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub Private Sub FileRead(FL As String) Dim FileNo As Integer Dim strDAT As String Dim strELM As String Dim pot1 As Integer, pot2 As Integer Dim pDB1 As Integer, pDB2 As Integer FileNo = FreeFile() Open FL For Input As #FileNo While Not EOF(FileNo) Line Input #FileNo, strDAT strDAT = strDAT & ":" pot1 = InStr(strDAT, ":") While pot1 > 0 strELM = Left(strDAT, pot1) pot2 = InStr(strELM, "OPEN") While pot2 > 0 pDB1 = InStr(strELM, Chr(&H22)) If pDB1 > 0 Then '前の『"』の位置 pDB2 = InStr(pDB1 + 1, strELM, Chr(&H22)) If pDB2 > 0 Then RichTextBox1.Text = RichTextBox1.Text & _ Mid(strELM, pDB1 + 1, pDB2 - pDB1 - 1) & vbCrLf End If End If pot2 = InStr(pDB2 + 1, strELM, "OPEN") Wend strDAT = Mid(strDAT, pot1 + 1) pot1 = InStr(strDAT, ":") Wend Wend Close #FileNo End Sub

  • VB2008で全角半角の判定

    VB2008で全角半角の判定 VB6 では下記のようにして判定していましたが、VB2008では どのようにすればよいのかお教えください。  dim moji as string dim zhN as integer  zhN = LenB(StrConv(moji, vbFromUnicode)) mojiには1文字格納されており、  半角なら zhN = 1 全角なら zhN = 2 となる。  これをVB2008で実現する方法がわかりません。  よろしくお願いします。

  • VB6で、指定バイト数を超えた場合はその直前に。

    VB6で、最高文字数を指定するとともに、そのバイト数を超えた場合、超える直前の状態を出力する文字列とする、という処理を考えています。 最大のバイト数を116とすると、全角なら58文字までですが、 57文字まで全角で入力し、次の一文字を半角にする。 そして最後に全角を1文字打つと、116バイトを超えてしまうので、 出力文字は半角のところまでとする。 という形です。 Public Function GetStrForLimitByte(cs As String, size As Long) Dim i As Long Dim p As Long Dim limitStr As String Dim temp As String Dim parts() As String limitStr = "" ' 文字列のバイト数が指定バイト数以下は文字列をそのまま返す If (LenB(cs) <= size) Then cs = cs Else p = Len(cs) For i = 1 To p parts(i) = Mid(cs, i, 1) '1文字ずつ連結 temp = limitStr + parts(i) If (LenB(temp) > size) Then limitStr = limitStr Else limitStr = limitStr + parts(i) End If Next End If End Function すると、parts(i) = Mid(cs, i, 1)のところで「インデックスが有効範囲でありません。」 というメッセが出てしまいます。 なぜでしょうか? ご回答お待ちします、お願いします。

  • 大小・全半角の禁止文字?

    Access97を使用しております。 現在↓のような形で禁止文字を設定しておりますが、大英字全角のAでも 小英字半角のaでも全て禁止文字として認識されてしまいます。 >>たぶんUnicodeのせいだと・・・(泣) これを例えば小半角英字の「a」のみを禁止文字として認識させるにはどの ような方法があるのでしょうか?ご教授お願い致します。   Dim R As Integer Dim strChk As String Dim strMoji As String '禁止文字チェック strMoji = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "   Me.txtMsg = "" For R = 1 To Len(Me.内容) strChk = Mid$(Me.内容, R, 1) If InStr(strMoji, strChk) <> 0 Then Me.txtMsg = "入力禁止文字「 " & strChk & " 」が使用されています。" Exit Sub Exit For End If Next R

  • テキスト取込からのデータ取込編集エラーについて

    ACCESS97でインポートしたテキストを文字を変換させて新しく修正したテキストを 作成したい流れですがエラーになります。 ご教授お願いします。 ユーザー定期型は定義されていません。 ↓チェックとを入れると Microsoft DAO 3.6 Object Library ↓下記のエラーになります この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。 Private Sub cmd選択_Click() Dim objExcel As Object Dim varFilePath As Variant Dim bln As Boolean Dim infname As String Dim TName As String TName = "取込用" Call F_ExecuteSQL("DELETE FROM " & TName & "") Set objExcel = CreateObject("Excel.Application") varFilePath = objExcel.GetOpenFileName("Microsfot Access (*.txt), *.txt", , "txt選択") If varFilePath <> False Then infname = varFilePath DoCmd.TransferText acImportDelim, "取込定義", TName, infname, True Call Div MsgBox "修正したデータを正常出力しました。" End If Set objExcel = Nothing End Sub Private Sub Div() Dim infname As String Dim outfname As String Dim n_in As Integer Dim n_out As Integer Dim tmpREC As typREC Dim tmpSP As typSpace Dim tmpNL As typNewLine Dim tmpStr As String outfname = myReplaceB(infname, ".txt", ".r.txt") n_out = FreeFile() Open outfname For Output As #n_out n_in = FreeFile() Open infname For Binary As #n_in Get #n_in, , tmpNL Do Until EOF(n_in) Get #n_in, , tmpREC tmpStr = myReplaceB(tmpREC.REC400, Chr(0), "") Print #n_out, tmpStr 'datファイルが改行されてる場合は改行コードを読み捨て Get #n_in, , tmpSP Get #n_in, , tmpSP Get #n_in, , tmpSP Get #n_in, , tmpSP Loop Close #n_in Close #n_out End Sub Function myReplaceB(ByVal myString, ByVal myFind, ByVal myRp) 'Access2000風 replace関数 (Access97、Excel97用) '「大文字小文字半角全角カタカナひらがな」を区別する 2003/10/11 pPoy Dim strTmp As String Dim wk1 As Integer, wk2 As Integer Dim wk3 As Integer, wk4 As Integer '準備 If IsNull(myString) Then Exit Function If IsNull(myFind) Then Exit Function wk4 = Len(myFind) '検索する文字数 wk3 = Len(myString) '検索対象の文字数 '最初に見つかった位置 wk2 = InStr(1, myString, myFind, vbBinaryCompare) wk1 = 1 '検索開始位置 '無ければそのまま If wk2 = 0 Then myReplaceB = myString Exit Function End If '文字の最後まで置換 Do strTmp = strTmp & Mid(myString, wk1, wk2 - wk1) & myRp wk1 = wk2 + wk4 wk2 = InStr(wk1, myString, myFind, vbBinaryCompare) Loop Until wk2 = 0 strTmp = strTmp & Mid(myString, wk1, wk3) myReplaceB = strTmp End Function

  • vbaの繰り返し処理について

    vbaです。 Sub Test1() Dim Str As String Dim Pnt1 As Long Dim Pnt2 As Long Str = Range("A1") Pnt1 = InStr(Str, "重 http://") If Pnt1 <= 0 Then Exit Sub Pnt2 = InStr(Pnt1, Str, "要") If Pnt2 <= 0 Then Range("B1") = Mid(Str, Pnt1 + 2) Else Range("B1") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2)) End If End Sub という式でA1からA2.A3と下にURLが入っており空欄になるまで同じ処理をしたいのですがどのように変更すれば作動しますでしょうか?

  • エクセルで、半角カタカナの住所録を全てローマ字に変換したいと思います。

    エクセルで、半角カタカナの住所録を全てローマ字に変換したいと思います。 かなり大量に量があるので、一度に簡単に便利に出来たらよいと思い、こちらでも 似たケースを検索したところ、下記のユーザー定義登録が出てきました。 Public Const Roma_Boin = "AIUEO" Public Const Kata_S1 = "AアイウエオKカキクケコSサシスセソTタチツテトNナニヌネノ" Public Const Kata_S2 = "HハヒフヘホMマミムメモYヤイユエヨRラリルレロWワイウエヲ" Public Const Kata_S3 = "GガギグゲゴZザジズゼゾDダヂヅデドBバビブベボPパピプペポ" Public Function changeKatakana2Romaji(srcMoji As String)   Dim kataMoji As String 'カタカナ文字   Dim RomaMoji As String 'ローマ字   Dim L As Long '文字カウンタ   Dim elm As String '1文字   Dim Pot As Integer '変換テーブルでの位置   Dim wkBoin, wkSiin As String '母音と子音   Dim chgTBL As String '変換テーブル     chgTBL = Kata_S1 & Kata_S2 & Kata_S3   kataMoji = StrConv(srcMoji, vbKatakana + vbWide) '全角カタカナにして『゛゜』を処理   Application.Volatile   For L = 1 To Len(kataMoji) 'カタカナ全角文字の母音と子音を作る     elm = Mid(kataMoji, L, 1): Pot = InStr(chgTBL, elm)     If 0 < Pot And Pot <= 6 Then       wkBoin = Mid(Roma_Boin, Pot - 1, 1): wkSiin = "": elm = wkBoin & wkSiin     ElseIf Pot > 6 Then       wkBoin = Mid(chgTBL, Int((Pot - 1) / 6) * 6 + 1, 1)       wkSiin = Mid(Roma_Boin, (Pot - 1) Mod 6, 1): elm = wkBoin & wkSiin     Else       If elm = "ン" Then elm = "N" '『ン』は特別処理     End If     RomaMoji = RomaMoji & elm   Next   RomaMoji = KomojiOkikae(RomaMoji, "ャ", "YA") '小文字『ャ』の処理   RomaMoji = KomojiOkikae(RomaMoji, "ュ", "YU") '小文字『ュ』の処理   RomaMoji = KomojiOkikae(RomaMoji, "ョ", "YO") '小文字『ョ』の処理   For L = 2 To Len(RomaMoji) '小文字『ッ』の処理     If Mid(RomaMoji, L - 1, 1) = "ッ" Then       Mid(RomaMoji, L - 1, 1) = Mid(RomaMoji, L, 1)     End If   Next   changeKatakana2Romaji = StrConv(RomaMoji, vbNarrow) End Function 'カタカナ小文字の処理(ャュョ) Public Function KomojiOkikae(Moji As String, komoji As String, Okikae As String)   Dim kPot As Integer   If InStr(Moji, komoji) > 0 Then     Mid(Moji, InStr(Moji, komoji) - 1, 2) = Okikae   End If   KomojiOkikae = Moji End Function ですが、どうしてもうまく実行されません。「プロシージャの外では無効です」という メッセージが出ました。他の方法でも、構いません。 当方、VBA初心者でして、お手数ですが、「ツールバー→マクロ」というレベルから、 教えていただけると助かります。 どうぞ宜しくお願い致します。

  • ユーザー構造体

    以下のようなことはできないのでしょうか? Type TEST strData1 as String * 1 strData2 as String * 1 strData3 as String * 2 End Type Function BATCH() Dim Wk1 as String Dim Wk2 as TEST Wk1="TEST" Wk2=Wk1 * Wk2.strData1にT * Wk2.strData1にE * Wk2.strData1にSTが代入されるようなイメージ * 一般的はWk2.strData1=Mid(Wk1,1,1)とかですよね。 End Function どなたかわかる方ご教授してください。

  • 括弧が含まれる文字列の括弧の中身の文字列(VB6)

    括弧()の中身の文字列をそれぞれ配列の文字列変数に設定したいと考えているのですが、Replaceを使えばいいのでしょうか? また、Replaceは置き換える文字の検索の開始場所は設定できると思うのですが、置き換える文字の検索の終了の場所は設定できるのでしょうか? 例えば、(asdf)as(asdfe)as(sf)という文字列のasdf,asdfe,sfをそれぞれ配列を使って文字列変数として表したいのです。 nyuuryoku = Text1.Text For i = 1 To Len(nyuuryoku) If Mid(nyuuryoku, i, 1) = "(" Then k = k + "と" + CStr(i) j = j + 1 ElseIf Mid(nyuuryoku, i, 1) = ")" Then m = m + "と" + CStr(i) l = l + 1 End If Next i Text17.Text = "( は" + CStr(j) + "個" + k + "番目、 " + ") は" + CStr(l) + "個" + m + "番目" For i = 1 To Len(nyuuryoku) If Mid(nyuuryoku, i, 1) = "[" Then kk = kk + "と" + CStr(i) jj = jj + 1 ElseIf Mid(nyuuryoku, i, 1) = "]" Then mm = mm + "と" + CStr(i) ll = ll + 1 End If Next i Text2.Text = "[ は" + CStr(jj) + "個" + kk + "番目、" + "] は" + CStr(ll) + "個" + mm + "番目" Dim kakkohajime(50) As Long Dim kakkoowari(50) As Long Dim kakkonakami(50) As String For i = 1 To CStr(j) kakkohajime(0) = 1 kakkohajime(i) = InStr(kakkohajime(i - 1), nyuuryoku, "(") Next For i = 1 To CStr(j) kakkoowari(0) = 1 kakkoowari(i) = InStr(kakkohajime(CStr(j) + 1 - i), nyuuryoku, ")") Next このあとにkakkohajime(i)の場所からkakkoowari(i)の場所までの文字列をそれぞれkakkonakami(i)の配列の文字列にいれたいのです。 最後に、kakkonakami(i)をtextに表示したいと思っています。

専門家に質問してみよう